VintaSoft Imaging .NET SDK 15.1: Документация для .NET разработчика
В этом разделе
PDF: Редактирование PDF аннотаций PDF документа в WinForms
В этом разделе
Класс PdfAnnotationTool позволяет редактировать аннотации к PDF страницам в WinForms просмотрщике изображений. Класс может редактировать PDF аннотации в двух режимах: 'Markup' и 'Edit'.

В режиме 'Markup' класс PdfAnnotationTool:
В режиме 'Edit' класс PdfAnnotationTool:
Процесс визуального построения аннотации выполняется с помощью метода 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