PDF: Работа с действиями PDF документа
В этом разделе
PDF документ позволяет определить действия, которые должны быть выполнены приложением во время просмотра PDF документа. Действия могут быть простыми, например, переход к определенному месту в текущем документе, или сложными, например, запуск внешнего приложения или JavaScript-кода.
Поддерживаемые типы действий
Класс
PdfAction является базовым классом для любых действий с PDF документом.
Вот список действий, поддерживаемых SDK:
Действие может быть составным. Для создания составного действия используется свойство
PdfAction.NextActions.
Каждое действие должно быть связано с элементом PDF документа. Действие может быть связано с документом, страницей, закладкой, аннотацией, интерактивной формой, ...
Исполнители действий
Исполнитель действия содержит логику выполнения действия определенного типа. Базовым классом для исполнителей действий является класс
PdfActionExecutorBase.
Вот список исполнителей действий, поддерживаемых SDK:
Вот список исполнителей действий, реализованных в демонстрационных приложениях (PdfDemosCommonCode):
- PdfViewerNamedActionExecutor - выполняет действие PdfViewerNamedAction, т.е. осуществляет навигацию в просмотрщике изображений
- PdfUriActionExecutor - выполняет действие PdfUriAction, т.е. открывает URL в веб браузере по умолчанию
- PdfLaunchActionExecutor - выполняет действие PdfLaunchAction, то есть запускает приложение
- PdfSubmitActionExecutor - выполняет действие PdfSubmitFormAction, т.е. передает имена и значения выбранных полей интерактивной формы на указанный URL
Вот 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 позволяет определить действия, связанные с полем формы.