PDF: Редактирование PDF аннотаций PDF документа в WinForms
В этом разделе
Класс
PdfAnnotationTool позволяет редактировать аннотации к PDF страницам в WinForms просмотрщике изображений. Класс может редактировать PDF аннотации в двух режимах: 'Markup' и 'Edit'.
В режиме 'Markup' класс
PdfAnnotationTool:
- Позволяет просматривать PDF аннотации, изменять PDF markup-аннотаций и заполнять интерактивные PDF поля.
- Вызывает события и обрабатывает сгенерированные события (Activate, MouseDown, Keystoke, ...) аннотаций и интерактивных полей.
- Позволяет копировать и вставлять PDF markup-аннотации.
- Использует PdfMarkupAnnotationView.MarkupTransformer в качестве контроллера взаимодействия для markup-аннотаций и PdfAnnotationView.ViewTransformer в качестве контроллера взаимодействия для не markup-аннотаций и интерактивных полей.
В режиме 'Edit' класс
PdfAnnotationTool:
- Позволяет просматривать и редактировать все PDF аннотации и интерактивные PDF поля.
- НЕ вызывает события и не обрабатывает сгенерированные события (Activate, MouseDown, Keystoke, ...) аннотаций и интерактивных полей.
- Позволяет копировать и вставлять любые аннотации и интерактивные поля.
- Позволяет выбрать несколько аннотаций и интерактивных полей, выбранные аннотации можно перемещать как группу.
- Показывает все (не скрытые и скрытые) аннотации и интерактивные поля.
- Позволяет использовать специальную подсветку полей (PdfAnnotationTool.EditorModeHighlight).
- Использует PdfAnnotationView.EditTransformer в качестве контроллера взаимодействия.
Процесс визуального построения аннотации выполняется с помощью метода
PdfAnnotationTool.AddAndBuildAnnotation.
Вот C#/VB.NET код, который демонстрирует, как создать визуальный инструмент для отображения и взаимодействия с аннотациями и полями интерактивной PDF формы:
/// <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
Вот C#/VB.NET код, который демонстрирует, как начать создание PDF аннотации:
/// <summary>
/// Adds and builds a polyline annotation.
/// </summary>
/// <param name="annotationTool">The PDF annotation tool, which will build an annotation.</param>
public static void AddAndBuildPolylineeAnnotation(Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool annotationTool)
{
Vintasoft.Imaging.Pdf.Tree.PdfPage focusedPage = annotationTool.FocusedPage;
if (focusedPage == null)
throw new System.InvalidOperationException();
// create a PDF annotation
Vintasoft.Imaging.Pdf.Tree.Annotations.PdfPolylineAnnotation annotation =
new Vintasoft.Imaging.Pdf.Tree.Annotations.PdfPolylineAnnotation(focusedPage);
annotation.BorderWidth = 5;
annotation.Color = System.Drawing.Color.Red;
annotation.InteriorColor = System.Drawing.Color.Green;
annotation.StartPointLineEndingStyle = Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationLineEndingStyle.ClosedArrow;
// if tool mode does not allow to build annotation
if (annotationTool.InteractionMode == Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.None ||
annotationTool.InteractionMode == Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.View)
// change the tool mode
annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.Markup;
// add and build the annotation
annotationTool.AddAndBuildAnnotation(annotation);
}
''' <summary>
''' Adds and builds a polyline annotation.
''' </summary>
''' <param name="annotationTool">The PDF annotation tool, which will build an annotation.</param>
Public Shared Sub AddAndBuildPolylineeAnnotation(annotationTool As Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool)
Dim focusedPage As Vintasoft.Imaging.Pdf.Tree.PdfPage = annotationTool.FocusedPage
If focusedPage Is Nothing Then
Throw New System.InvalidOperationException()
End If
' create a PDF annotation
Dim annotation As New Vintasoft.Imaging.Pdf.Tree.Annotations.PdfPolylineAnnotation(focusedPage)
annotation.BorderWidth = 5
annotation.Color = System.Drawing.Color.Red
annotation.InteriorColor = System.Drawing.Color.Green
annotation.StartPointLineEndingStyle = Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationLineEndingStyle.ClosedArrow
' if tool mode does not allow to build annotation
If annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.None OrElse annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.View Then
' change the tool mode
annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.Markup
End If
' add and build the annotation
annotationTool.AddAndBuildAnnotation(annotation)
End Sub
Вот C#/VB.NET код, который демонстрирует, как переопределить процесс создания PDF аннотации и запустить создание PDF аннотации:
/// <summary>
/// Adds and builds a freehand polyline annotation.
/// </summary>
/// <param name="annotationTool">The PDF annotation tool, which will build an annotation.</param>
public static void AddAndBuildFreehandPolylineAnnotation(
Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool annotationTool)
{
Vintasoft.Imaging.Pdf.Tree.PdfPage focusedPage = annotationTool.FocusedPage;
if (focusedPage == null)
throw new System.InvalidOperationException();
// create the PDF annotation
Vintasoft.Imaging.Pdf.Tree.Annotations.PdfPolylineAnnotation annotation =
new Vintasoft.Imaging.Pdf.Tree.Annotations.PdfPolylineAnnotation(focusedPage);
annotation.BorderWidth = 5;
annotation.Color = System.Drawing.Color.Red;
// if tool mode does not allow to build annotation
if (annotationTool.InteractionMode == Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.None ||
annotationTool.InteractionMode == Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.View)
// change the tool mode
annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.Markup;
// create the annotation view because view parameters must be changed
Vintasoft.Imaging.Pdf.UI.Annotations.PdfPolygonalAnnotationView view =
new Vintasoft.Imaging.Pdf.UI.Annotations.PdfPolylineAnnotationView(annotation, annotationTool.FocusedJsDoc);
// set the builder for annotation view
view.Builder = new Vintasoft.Imaging.UI.VisualTools.UserInteraction.PointBasedObjectFreehandBuilder(view, 2, 0.1f);
// add and build annotation
annotationTool.AddAndBuildAnnotation(view);
}
''' <summary>
''' Adds and builds a freehand polyline annotation.
''' </summary>
''' <param name="annotationTool">The PDF annotation tool, which will build an annotation.</param>
Public Shared Sub AddAndBuildFreehandPolylineAnnotation(annotationTool As Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationTool)
Dim focusedPage As Vintasoft.Imaging.Pdf.Tree.PdfPage = annotationTool.FocusedPage
If focusedPage Is Nothing Then
Throw New System.InvalidOperationException()
End If
' create the PDF annotation
Dim annotation As New Vintasoft.Imaging.Pdf.Tree.Annotations.PdfPolylineAnnotation(focusedPage)
annotation.BorderWidth = 5
annotation.Color = System.Drawing.Color.Red
' if tool mode does not allow to build annotation
If annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.None OrElse annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.View Then
' change the tool mode
annotationTool.InteractionMode = Vintasoft.Imaging.Pdf.UI.Annotations.PdfAnnotationInteractionMode.Markup
End If
' create the annotation view because view parameters must be changed
Dim view As Vintasoft.Imaging.Pdf.UI.Annotations.PdfPolygonalAnnotationView = New Vintasoft.Imaging.Pdf.UI.Annotations.PdfPolylineAnnotationView(annotation, annotationTool.FocusedJsDoc)
' set the builder for annotation view
view.Builder = New Vintasoft.Imaging.UI.VisualTools.UserInteraction.PointBasedObjectFreehandBuilder(view, 2, 0.1F)
' add and build annotation
annotationTool.AddAndBuildAnnotation(view)
End Sub