PDF: View interactive fields of PDF document in WPF
In This Topic
The fields of interactive form can be displayed on PDF page in WPF image viewer using visual tool -
WpfPdfAnnotationTool.
The visual appearance of interactive field is defined by
PdfWidgetAnnotation class, an instance of which can be obtained using
PdfInteractiveFormField.Annotation property. For each type of interactive field is implemented the type of annotation, which defines how the interactive field is displayed and how the user can interact with the interactive field:
The
WpfPdfAnnotationTool class allows to display the interactive fields in two modes: 'None' and 'View'.
In 'None' mode the
WpfPdfAnnotationTool class:
- Allows to view interactive fields.
- Does NOT raise and process events (Activate, MouseDown, Keystoke, etc) of interactive fields.
- Does NOT interact with interactive fields.
In 'View' mode the
WpfPdfAnnotationTool class:
- Allows to view and fill interactive fields.
- Raises and processes events (Activate, MouseDown, Keystoke, etc) of interactive fields.
- Uses PdfAnnotationView.ViewTransformer as an interaction controller for interactive field.
Here is C#/VB.NET code that demonstrates how to display interactive fields of PDF document in WPF image viewer:
/// <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
The
WpfPdfAnnotationTool class has the
WpfPdfAnnotationTool.ActionExecutor property, which is used for executing the PDF actions when the interactive field events are triggered. By default the
WpfPdfAnnotationTool.ActionExecutor property represents a composite action executor, which can execute different types of actions. For example, the
PdfJavaScriptActionExecutor class executes PDF JavaScript action, i.e. executes JavaScript code using JavaScript interpreter.
Here is C#/VB.NET code that demonstrates how to display interactive fields of PDF document in WPF image viewer with enabled 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
The information on how to edit the interactive fields of PDF document in WPF image viewer is available here:
"Editing interactive fields of PDF document in WPF".