PDF: Просмотр интерактивных полей PDF документа в WPF
В этом разделе
Поля интерактивной формы PDF документа могут быть отображены на PDF странице в WPF просмотрщике изображений с помощью визуального инструмента -
WpfPdfAnnotationTool.
Внешний вид интерактивного поля определяется классом
PdfWidgetAnnotation, экземпляр которого можно получить с помощью свойства
PdfInteractiveFormField.Annotation. Для каждого типа интерактивного поля реализован тип аннотации, который определяет, как отображается интерактивное поле и как пользователь может с ним взаимодействовать:
Класс
WpfPdfAnnotationTool позволяет отображать интерактивные поля в двух режимах: 'None' и 'View'.
В режиме 'None' класс
WpfPdfAnnotationTool:
- Позволяет просматривать интерактивные поля.
- НЕ вызывает и не обрабатывает события (Activate, MouseDown, Keystoke, ...) интерактивных полей.
- НЕ взаимодействует с интерактивными полями.
В режиме 'View' класс
WpfPdfAnnotationTool:
- Позволяет просматривать и заполнять интерактивные поля.
- Вызывает и обрабатывает события (Activate, MouseDown, Keystoke, ...) интерактивных полей.
- Использует PdfAnnotationView.ViewTransformer в качестве контроллера взаимодействия для интерактивного поля.
Вот C#/VB.NET код, который демонстрирует, как отобразить интерактивные поля PDF документа в WPF просмотрщике изображений:
/// <summary>
/// Creates the PDF annotation tool.
/// </summary>
/// <param name="viewer">The image viewer.</param>
public static Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool CreatePdfAnnotationTool(
Vintasoft.Imaging.Wpf.UI.WpfImageViewer viewer)
{
// create PdfAnnotationTool
Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool pdfAnnotationTool =
new Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool(true);
pdfAnnotationTool.InteractionMode = Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationInteractionMode.Markup;
// create an application action executor
Vintasoft.Imaging.Pdf.PdfActionCompositeExecutor applicationActionExecutor =
new Vintasoft.Imaging.Pdf.PdfActionCompositeExecutor();
// add executor for PdfGotoAction to the application action executor
applicationActionExecutor.Items.Add(new Vintasoft.Imaging.Pdf.Wpf.UI.WpfPdfGotoActionExecutor(viewer));
// add executor for PdfNamedAction to the application action executor
applicationActionExecutor.Items.Add(new Vintasoft.Imaging.Pdf.Wpf.UI.WpfPdfNamedActionExecutor(viewer));
// add executor for PdfResetFormAction to the application action executor
applicationActionExecutor.Items.Add(
new Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationToolResetFormActionExecutor(pdfAnnotationTool));
// add executor for PdfAnnotationHideAction to the application action executor
applicationActionExecutor.Items.Add(
new Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationToolAnnotationHideActionExecutor(pdfAnnotationTool));
// 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
pdfAnnotationTool.ActionExecutor = applicationActionExecutor;
return pdfAnnotationTool;
}
''' <summary>
''' Creates the PDF annotation tool.
''' </summary>
''' <param name="viewer">The image viewer.</param>
Public Shared Function CreatePdfAnnotationTool(viewer As Vintasoft.Imaging.Wpf.UI.WpfImageViewer) As Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool
' create PdfAnnotationTool
Dim pdfAnnotationTool As New Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool(True)
pdfAnnotationTool.InteractionMode = Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationInteractionMode.Markup
' create an application action executor
Dim applicationActionExecutor As New Vintasoft.Imaging.Pdf.PdfActionCompositeExecutor()
' add executor for PdfGotoAction to the application action executor
applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.Wpf.UI.WpfPdfGotoActionExecutor(viewer))
' add executor for PdfNamedAction to the application action executor
applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.Wpf.UI.WpfPdfNamedActionExecutor(viewer))
' add executor for PdfResetFormAction to the application action executor
applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationToolResetFormActionExecutor(pdfAnnotationTool))
' add executor for PdfAnnotationHideAction to the application action executor
applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationToolAnnotationHideActionExecutor(pdfAnnotationTool))
' 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
pdfAnnotationTool.ActionExecutor = applicationActionExecutor
Return pdfAnnotationTool
End Function
Класс
WpfPdfAnnotationTool имеет свойство
WpfPdfAnnotationTool.ActionExecutor, которое используется для выполнения действий в PDF при возникновении событий интерактивного поля. По умолчанию свойство
WpfPdfAnnotationTool.ActionExecutor представляет собой составной исполнитель действий, который может выполнять различные типы действий. Например, класс
PdfJavaScriptActionExecutor выполняет действия на JavaScript в PDF, то есть исполняет код JavaScript с помощью интерпретатора JavaScript.
Вот C#/VB.NET код, который демонстрирует, как отобразить интерактивные поля PDF документа в WPF просмотрщике изображений с включенным JavaScript:
/// <summary>
/// Creates the PDF annotation tool with JavaScript support.
/// </summary>
/// <param name="viewer">The image viewer.</param>
public static Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool CreatePdfAnnotationToolWithJavaScriptSupport(
Vintasoft.Imaging.Wpf.UI.WpfImageViewer viewer)
{
// create PDF JavaScript application
Vintasoft.Imaging.Pdf.Wpf.UI.JavaScript.WpfPdfJsApp jsApp =
new Vintasoft.Imaging.Pdf.Wpf.UI.JavaScript.WpfPdfJsApp();
// 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 PdfAnnotationTool
Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool annotationTool =
new Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool(jsApp, true);
annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationInteractionMode.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.Wpf.UI.WpfPdfGotoActionExecutor(viewer));
// add executor for PdfNamedAction to the application action executor
applicationActionExecutor.Items.Add(new Vintasoft.Imaging.Pdf.Wpf.UI.WpfPdfNamedActionExecutor(viewer));
// add executor for PdfResetFormAction to the application action executor
applicationActionExecutor.Items.Add(
new Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationToolResetFormActionExecutor(annotationTool));
// add executor for PdfAnnotationHideAction to the application action executor
applicationActionExecutor.Items.Add(
new Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationToolAnnotationHideActionExecutor(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.Wpf.UI.WpfImageViewer) As Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool
' create PDF JavaScript application
Dim jsApp As New Vintasoft.Imaging.Pdf.Wpf.UI.JavaScript.WpfPdfJsApp()
' 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 PdfAnnotationTool
Dim annotationTool As New Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationTool(jsApp, True)
annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationInteractionMode.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.Wpf.UI.WpfPdfGotoActionExecutor(viewer))
' add executor for PdfNamedAction to the application action executor
applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.Wpf.UI.WpfPdfNamedActionExecutor(viewer))
' add executor for PdfResetFormAction to the application action executor
applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationToolResetFormActionExecutor(annotationTool))
' add executor for PdfAnnotationHideAction to the application action executor
applicationActionExecutor.Items.Add(New Vintasoft.Imaging.Pdf.Wpf.UI.Annotations.WpfPdfAnnotationToolAnnotationHideActionExecutor(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 документа в WPF просмотрщике изображений, доступна здесь:
"Редактирование интерактивных полей PDF документа в WPF"
.