VintaSoft Imaging .NET SDK 14.0: Документация для .NET разработчика
В этом разделе
    PDF: Работа с действиями PDF документа
    В этом разделе
    PDF документ позволяет определить действия, которые должны быть выполнены приложением во время просмотра PDF документа. Действия могут быть простыми, например, переход к определенному месту в текущем документе, или сложными, например, запуск внешнего приложения или JavaScript-кода.


    Поддерживаемые типы действий

    Класс PdfAction является базовым классом для любых действий с PDF документом.

    Вот список действий, поддерживаемых SDK: Действие может быть составным. Для создания составного действия используется свойство PdfAction.NextActions.

    Каждое действие должно быть связано с элементом PDF документа. Действие может быть связано с документом, страницей, закладкой, аннотацией, интерактивной формой, ...


    Исполнители действий

    Исполнитель действия содержит логику выполнения действия определенного типа. Базовым классом для исполнителей действий является класс PdfActionExecutorBase.

    Вот список исполнителей действий, поддерживаемых SDK: Вот список исполнителей действий, реализованных в демонстрационных приложениях (PdfDemosCommonCode): Вот C#/VB.NET код, который демонстрирует, как настроить выполнение всех поддерживаемых действий (включая выполнение действий JavaScript) для визуального инструмента PdfAnnotationTool:
    /// <summary>
    /// Creates the PDF annotation tool with JavaScript support.
    /// </summary>
    /// <param name="viewer">The image viewer.</param>
    public static Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool CreatePdfAnnotationToolWithJavaScriptSupport(Vintasoft.Imaging.UI.ImageViewer viewer)
    {
        // create PDF JavaScript application
        Vintasoft.Imaging.Pdf.UI.JavaScript.WinFormsPdfJsApp jsApp = 
            new Vintasoft.Imaging.Pdf.UI.JavaScript.WinFormsPdfJsApp();
        // add PDF documents, which are associated with images in viewer,
        // to the document set of PDF JavaScript application
        jsApp.RegisterImageViewer(viewer);
        // create PdfJavaScriptActionExecutor for PDF JavaScript application
        jsApp.ActionExecutor = new Vintasoft.Imaging.Pdf.JavaScript.PdfJavaScriptActionExecutor(
            jsApp, new Vintasoft.Imaging.Pdf.JavaScriptApi.PdfJsConsole());
    
        // create Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool
        Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool annotationTool = 
            new Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool(jsApp, true);
        annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.Markup;
    
        // create an application action executor
        Vintasoft.Imaging.Pdf.PdfActionCompositeExecutor applicationActionExecutor = 
            new Vintasoft.Imaging.Pdf.PdfActionCompositeExecutor();
        // add executor for PdfJavaScriptAction to the application action executor
        applicationActionExecutor.Items.Add(jsApp.ActionExecutor);
        // add executor for PdfGotoAction to the application action executor
        applicationActionExecutor.Items.Add(new Vintasoft.Imaging.Pdf.UI.PdfGotoActionExecutor(viewer));
        // add executor for PdfNamedAction to the application action executor
        applicationActionExecutor.Items.Add(new Vintasoft.Imaging.Pdf.UI.PdfNamedActionExecutor(viewer));
        // add executor for PdfResetFormAction to the application action executor
        applicationActionExecutor.Items.Add(
            new Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationToolResetFormActionExecutor(annotationTool));
        // add executor for PdfAnnotationHideAction to the application action executor
        applicationActionExecutor.Items.Add(
            new Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationToolAnnotationHideActionExecutor(annotationTool));
        // add executor for PdfUriAction to the application action executor,
        // executor is located in WpfPdfDemosCommonCode
        //applicationActionExecutor.Items.Add(new PdfUriActionExecutor());
        // add executor for PdfLaunchAction to the application action executor,
        // executor is located in WpfPdfDemosCommonCode
        //applicationActionExecutor.Items.Add(new PdfLaunchActionExecutor());
        // add executor for PdfSubmitFormAction to the application action executor,
        // executor is located in WpfPdfDemosCommonCode
        //applicationActionExecutor.Items.Add(new PdfSubmitActionExecutor(viewer));
        // add the default executor (for PdfResetFormAction and PdfAnnotationHideAction)
        // to the application action executor
        applicationActionExecutor.Items.Add(new Vintasoft.Imaging.Pdf.PdfActionExecutor());
    
        // set the application action executor as action executor of PDF annotation tool
        annotationTool.ActionExecutor = applicationActionExecutor;
    
        // create a document-level actions executor
        Vintasoft.Imaging.Pdf.PdfDocumentLevelActionsExecutor documentLevelActionsExecutor =
           new Vintasoft.Imaging.Pdf.PdfDocumentLevelActionsExecutor(jsApp);
        // set the application action executor as action executor of the document-level actions executor
        documentLevelActionsExecutor.ActionExecutor = applicationActionExecutor;
    
        return annotationTool;
    }
    
    ''' <summary>
    ''' Creates the PDF annotation tool with JavaScript support.
    ''' </summary>
    ''' <param name="viewer">The image viewer.</param>
    Public Shared Function CreatePdfAnnotationToolWithJavaScriptSupport(viewer As Vintasoft.Imaging.UI.ImageViewer) As Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool
        ' create PDF JavaScript application
        Dim jsApp As New Vintasoft.Imaging.Pdf.UI.JavaScript.WinFormsPdfJsApp()
        ' add PDF documents, which are associated with images in viewer,
        ' to the document set of PDF JavaScript application
        jsApp.RegisterImageViewer(viewer)
        ' create PdfJavaScriptActionExecutor for PDF JavaScript application
        jsApp.ActionExecutor = New Vintasoft.Imaging.Pdf.JavaScript.PdfJavaScriptActionExecutor(jsApp, New Vintasoft.Imaging.Pdf.JavaScriptApi.PdfJsConsole())
    
        ' create Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool
        Dim annotationTool As New Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool(jsApp, True)
        annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.Markup
    
        ' create an application action executor
        Dim applicationActionExecutor As New Vintasoft.Imaging.Pdf.PdfActionCompositeExecutor()
        ' add executor for PdfJavaScriptAction to the application action executor
        applicationActionExecutor.Items.Add(jsApp.ActionExecutor)
        ' add executor for PdfGotoAction to the application action executor
        applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.UI.PdfGotoActionExecutor(viewer))
        ' add executor for PdfNamedAction to the application action executor
        applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.UI.PdfNamedActionExecutor(viewer))
        ' add executor for PdfResetFormAction to the application action executor
        applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationToolResetFormActionExecutor(annotationTool))
        ' add executor for PdfAnnotationHideAction to the application action executor
        applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationToolAnnotationHideActionExecutor(annotationTool))
        ' add executor for PdfUriAction to the application action executor,
        ' executor is located in WpfPdfDemosCommonCode
        'applicationActionExecutor.Items.Add(new PdfUriActionExecutor());
        ' add executor for PdfLaunchAction to the application action executor,
        ' executor is located in WpfPdfDemosCommonCode
        'applicationActionExecutor.Items.Add(new PdfLaunchActionExecutor());
        ' add executor for PdfSubmitFormAction to the application action executor,
        ' executor is located in WpfPdfDemosCommonCode
        'applicationActionExecutor.Items.Add(new PdfSubmitActionExecutor(viewer));
        ' add the default executor (for PdfResetFormAction and PdfAnnotationHideAction)
        ' to the application action executor
        applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.PdfActionExecutor())
    
        ' set the application action executor as action executor of PDF annotation tool
        annotationTool.ActionExecutor = applicationActionExecutor
    
        ' create a document-level actions executor
        Dim documentLevelActionsExecutor As New Vintasoft.Imaging.Pdf.PdfDocumentLevelActionsExecutor(jsApp)
        ' set the application action executor as action executor of the document-level actions executor
        documentLevelActionsExecutor.ActionExecutor = applicationActionExecutor
    
        Return annotationTool
    End Function
    


    Действия с документом

    Действие, которое должно быть выполнено при открытии PDF документа, можно определить с помощью свойства PdfDocument.OpenAction.
    Свойство PdfDocument.AdditionalActions позволяет определить дополнительные действия для PDF документа, в частности, действия, которые должны быть выполнены перед сохранением или печатью документа, а также действия, которые должны быть выполнены после сохранения, печати или закрытия документа.


    Действия для страницы

    Свойство PdfPage.AdditionalActions позволяет определить дополнительные действия для PDF страницы, в частности, действия, которые должны выполняться при открытии или закрытии страницы.


    Действия с закладкой

    Свойство PdfBookmark.Action позволяет определить действие, которое должно быть выполнено, когда закладка становится активной.

    Вот C#/VB.NET код, который демонстрирует, как изменить действие, которое должно быть выполнено, когда закладка становится активной:
    /// <summary>
    /// Changes action of the first bookmark of PDF document.
    /// </summary>
    /// <param name="pdfFilename">The filename of PDF document.</param>
    public static void ChangeFirstBookmarkAction(string pdfFilename)
    {
        // open PDF document
        using (Vintasoft.Imaging.Pdf.PdfDocument document = 
            new Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename))
        {
            // create goto action to the last page of PDF document
            Vintasoft.Imaging.Pdf.Tree.PdfDestinationFit dest = 
                new Vintasoft.Imaging.Pdf.Tree.PdfDestinationFit(document, document.Pages[document.Pages.Count - 1]);
            Vintasoft.Imaging.Pdf.Tree.PdfGotoAction newAction = 
                new Vintasoft.Imaging.Pdf.Tree.PdfGotoAction(dest);
            
            // get the first bookmark of PDF document
            Vintasoft.Imaging.Pdf.Tree.PdfBookmark bookmark = document.Bookmarks[0];
            // change the action of bookmark
            bookmark.Action = newAction;
    
            // save changes to a file
            document.SaveChanges();
        }
    }
    
    ''' <summary>
    ''' Changes action of the first bookmark of PDF document.
    ''' </summary>
    ''' <param name="pdfFilename">The filename of PDF document.</param>
    Public Shared Sub ChangeFirstBookmarkAction(pdfFilename As String)
        ' open PDF document
        Using document As New Vintasoft.Imaging.Pdf.PdfDocument(pdfFilename)
            ' create goto action to the last page of PDF document
            Dim dest As New Vintasoft.Imaging.Pdf.Tree.PdfDestinationFit(document, document.Pages(document.Pages.Count - 1))
            Dim newAction As New Vintasoft.Imaging.Pdf.Tree.PdfGotoAction(dest)
    
            ' get the first bookmark of PDF document
            Dim bookmark As Vintasoft.Imaging.Pdf.Tree.PdfBookmark = document.Bookmarks(0)
            ' change the action of bookmark
            bookmark.Action = newAction
    
            ' save changes to a file
            document.SaveChanges()
        End Using
    End Sub
    


    Действия с аннотации

    Класс PdfAnnotation является базовым классом для любых аннотаций к PDF документу. Свойство PdfAnnotation.ActivateAction позволяет определить действие, которое должно быть выполнено при активации аннотации.
    Свойство PdfAnnotation.AdditionalActions позволяет определить дополнительные действия, например, действие, которое должно выполняться при нажатии на аннотацию кнопкой мыши, или действие, которое должно выполняться, когда страница с аннотацией становится видимой.


    Действия с полем интерактивной формы

    Класс PdfInteractiveFormField является базовым классом для любого поля PDF интерактивной формы документа. Свойство PdfInteractiveFormField.AdditionalActions позволяет определить действия, связанные с полем формы.