Back to Devexpress

IPdfViewerCommandFactoryService Interface

windowsforms-devexpress-dot-xtrapdfviewer-79c70b2d.md

latest8.9 KB
Original Source

IPdfViewerCommandFactoryService Interface

A service which is used to create PDF Viewer commands.

Namespace : DevExpress.XtraPdfViewer

Assembly : DevExpress.XtraPdfViewer.v25.2.dll

NuGet Package : DevExpress.Win.PdfViewer

Declaration

csharp
public interface IPdfViewerCommandFactoryService
vb
Public Interface IPdfViewerCommandFactoryService

Remarks

All commands in the PdfViewer are created using the command factory service. You can substitute the default command factory service with its descendant, designed to create a custom command instead of the default command. Subsequently, the specified custom command is used in all PDF Viewer operations instead of the original command.

Example

This example shows how to modify the functionality of an existing PdfViewer command.

The PdfViewer exposes the IPdfViewerCommandFactoryService interface that enables you to substitute the default command with your own custom command.

To accomplish this task:

  • Create a custom command class (for example, a CustomNextPageCommand class), inherited from the command that you wish to replace (for example, PdfNextPageCommand).
  • Override the required method of the command. The main functionality and command specifics are located in the Execute method.
  • Create a class (for example, CustomPdfViewerCommandFactoryService ) that implements the IPdfViewerCommandFactoryService. You should override the IPdfViewerCommandFactoryService.CreateCommand method to create an instance of a custom command class if an identifier of a certain command is passed as a parameter. So, instead of the default command, a custom command will be used by the PdfViewer.
  • Use the created class to substitute for the default PdfViewer’s service.

View Example

csharp
using DevExpress.XtraPdfViewer;
using System;
using System.Windows.Forms;

namespace ViewerCustomCommand {
    public partial class Form1 : Form {

        void ReplacePdfViewerCommandFactoryService(PdfViewer control) {
            IPdfViewerCommandFactoryService service = control.GetService<IPdfViewerCommandFactoryService>();
            if (service == null)
                return;
            control.RemoveService(typeof(IPdfViewerCommandFactoryService));
            control.AddService(typeof(IPdfViewerCommandFactoryService), new CustomPdfViewerCommandFactoryService(control,service));
        }

        public Form1() {
            InitializeComponent();
            pdfViewer1.LoadDocument("..\\..\\Demo.pdf");
            ReplacePdfViewerCommandFactoryService(pdfViewer1);
        }     
    }
}
csharp
using DevExpress.Utils;
using DevExpress.XtraPdfViewer;
using DevExpress.XtraPdfViewer.Commands;

namespace ViewerCustomCommand {
    public class CustomPdfViewerCommandFactoryService : IPdfViewerCommandFactoryService {
        readonly IPdfViewerCommandFactoryService service;
        readonly PdfViewer control;

        public CustomPdfViewerCommandFactoryService(PdfViewer control,
            IPdfViewerCommandFactoryService service) {
            Guard.ArgumentNotNull(control, "control");
            Guard.ArgumentNotNull(service, "service");
            this.control = control;
            this.service = service;
        }

        public PdfViewerCommand CreateCommand(PdfViewerCommandId id) {
            if (id == PdfViewerCommandId.NextPage)
                return new CustomNextPageCommand(control);

            return service.CreateCommand(id);
        }
    }
}
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ViewerCustomCommand {
    static class Program {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());

        }
    }
}
csharp
using DevExpress.XtraPdfViewer;
using DevExpress.XtraPdfViewer.Commands;
using System.Windows.Forms;

namespace ViewerCustomCommand {
    public class CustomNextPageCommand : PdfNextPageCommand {
        public CustomNextPageCommand(PdfViewer control)
            : base(control) {
        }

        public override void Execute() {
            MessageBox.Show("Custom command executed");
            base.Execute();
        }
    }
}
vb
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Threading.Tasks
Imports System.Windows.Forms

Namespace ViewerCustomCommand
    Friend NotInheritable Class Program

        Private Sub New()
        End Sub

        ''' <summary>
        ''' The main entry point for the application.
        ''' </summary>
        <STAThread> _
        Shared Sub Main()
            Application.EnableVisualStyles()
            Application.SetCompatibleTextRenderingDefault(False)
            Application.Run(New Form1())

        End Sub
    End Class
End Namespace
vb
Imports DevExpress.XtraPdfViewer
Imports DevExpress.XtraPdfViewer.Commands
Imports System.Windows.Forms

Namespace ViewerCustomCommand
    Public Class CustomNextPageCommand
        Inherits PdfNextPageCommand

        Public Sub New(ByVal control As PdfViewer)
            MyBase.New(control)
        End Sub

        Public Overrides Sub Execute()
            MessageBox.Show("Custom command executed")
            MyBase.Execute()
        End Sub
    End Class
End Namespace
vb
Imports DevExpress.XtraPdfViewer
Imports System
Imports System.Windows.Forms

Namespace ViewerCustomCommand
    Partial Public Class Form1
        Inherits Form

        Private Sub ReplacePdfViewerCommandFactoryService(ByVal control As PdfViewer)
            Dim service As IPdfViewerCommandFactoryService = control.GetService(Of IPdfViewerCommandFactoryService)()
            If service Is Nothing Then
                Return
            End If
            control.RemoveService(GetType(IPdfViewerCommandFactoryService))
            control.AddService(GetType(IPdfViewerCommandFactoryService), New CustomPdfViewerCommandFactoryService(control,service))
        End Sub

        Public Sub New()
            InitializeComponent()
            pdfViewer1.LoadDocument("..\..\Demo.pdf")
            ReplacePdfViewerCommandFactoryService(pdfViewer1)
        End Sub
    End Class
End Namespace
vb
Imports DevExpress.Utils
Imports DevExpress.XtraPdfViewer
Imports DevExpress.XtraPdfViewer.Commands

Namespace ViewerCustomCommand
    Public Class CustomPdfViewerCommandFactoryService
        Implements IPdfViewerCommandFactoryService

        Private ReadOnly service As IPdfViewerCommandFactoryService
        Private ReadOnly control As PdfViewer

        Public Sub New(ByVal control As PdfViewer, ByVal service As IPdfViewerCommandFactoryService)
            Guard.ArgumentNotNull(control, "control")
            Guard.ArgumentNotNull(service, "service")
            Me.control = control
            Me.service = service
        End Sub

        Public Function CreateCommand(id As PdfViewerCommandId) As PdfViewerCommand Implements IPdfViewerCommandFactoryService.CreateCommand
            If id = PdfViewerCommandId.NextPage Then
                Return New CustomNextPageCommand(control)
            End If

            Return service.CreateCommand(id)
        End Function

    End Class
End Namespace

See Also

IPdfViewerCommandFactoryService Members

DevExpress.XtraPdfViewer Namespace