PDF文本注释

添加、删除和获取注释对于不同种类的注释是相似的。让我们以文本注释为例。

如何在现有PDF文件中添加文本注释

在本教程中,您将学习如何在现有PDF文档中添加文本。文本工具允许您在文档的任何地方添加文本。文本注释是附加到PDF文档中特定位置的注释。关闭时,注释显示为一个图标;打开时,它应显示一个弹出窗口,其中包含读者选择的字体和大小的笔记文本。

注释由特定页面的Annotations集合包含。 这份集合仅包含该特定页面的注释;每个页面都有其自己的注释集合。

要向特定页面添加注释,请使用 Add 方法将其添加到该页面的注释集合中。

  1. 首先,创建一个要添加到 PDF 的注释。
  2. 然后打开输入 PDF。
  3. 将注释添加到 Page 对象的注释集合中。

以下代码片段向您展示了如何在 PDF 页面中添加注释。

package com.aspose.pdf.examples;

import com.aspose.pdf.*;
import java.util.*;

public class ExampleTextAnnotation {

    private static String _dataDir = "/home/aspose/pdf-examples/Samples/";

    public static void AddTextAnnotation()
    {
        // 加载 PDF 文件
        Document document = new Document(_dataDir + "sample.pdf");
        Page page = document.getPages().get_Item(1);
        Rectangle rect = new Rectangle(200, 750, 400, 790);
        TextAnnotation textAnnotation = new TextAnnotation(page, rect);

        textAnnotation.setTitle("Aspose User");
        textAnnotation.setSubject("Sample Subject");
        textAnnotation.setState (AnnotationState.Accepted);
        textAnnotation.setContents("Sample contents for the annotation");
        textAnnotation.setOpen(true);
        textAnnotation.setIcon(TextIcon.Circle);

        Border border = new Border(textAnnotation);
        border.setWidth(5);
        border.setDash(new Dash(1, 1));
        textAnnotation.setBorder(border);
        textAnnotation.setRect(rect);

        page.getAnnotations().add(textAnnotation);
        document.save(_dataDir + "sample_textannot.pdf");
    }
}

添加新的(或创建)自由文本注释

自由文本注释直接在页面上显示文本。PdfContentEditor.CreateFreeText 方法允许创建这种类型的注释。在以下代码片段中,我们在字符串首次出现的位置上方添加自由文本注释。

package com.aspose.pdf.examples;

import com.aspose.pdf.*;
import java.util.*;

public class ExampleFreeTextAnnotation {

    private static String _dataDir = "/home/aspose/pdf-examples/Samples/";

    public static void AddFreeTextAnnotation()
    {
        // 加载 PDF 文件
        Document document = new Document(_dataDir + "sample.pdf");
        Page page = document.getPages().get_Item(1);

        DefaultAppearance defaultAppearance = new DefaultAppearance();
        defaultAppearance.setFontName("Helvetica");
        defaultAppearance.setFontSize(12);
        defaultAppearance.setTextColor(java.awt.Color.BLUE);

        FreeTextAnnotation freeTextAnnotation = new FreeTextAnnotation(page, new Rectangle(300.0, 770.0, 400.0, 790.0), defaultAppearance);

        freeTextAnnotation.setRichText("自由文本演示");
        page.getAnnotations().add(freeTextAnnotation);
        document.save(_dataDir + "sample_freetext.pdf");
    }
}

获取自由文本注释

Aspose.PDF for Java 允许您从 PDF 文档中获取自由文本注释。

请查看以下代码片段以解决此任务:

public static void GetFreeTextAnnotation() {
        // 加载 PDF 文件
        Document document = new Document(_dataDir + "sample_freetext.pdf");

        // 使用 AnnotationSelector 过滤注释
        Page page = document.getPages().get_Item(1);
        AnnotationSelector annotationSelector = new AnnotationSelector(
                new FreeTextAnnotation(page, Rectangle.getTrivial(), new DefaultAppearance()));
        page.accept(annotationSelector);
        List<Annotation> freeTextAnnotations = annotationSelector.getSelected();

        // 打印结果
        for (Annotation fa : freeTextAnnotations) {
            System.out.println(fa.getRect());
        }
    }

删除自由文本注释

Aspose.PDF for Java 允许您从 PDF 文档中删除自由文本注释。

请查看以下代码片段以解决此任务:

  public static void DeleteFreeTextAnnotation() {
         // 加载PDF文件
         Document document = new Document(_dataDir + "sample_freetext.pdf");

         // 使用AnnotationSelector过滤注释
         Page page = document.getPages().get_Item(1);
         AnnotationSelector annotationSelector = new AnnotationSelector(
                 new FreeTextAnnotation(page, Rectangle.getTrivial(), new DefaultAppearance()));
         page.accept(annotationSelector);
         List<Annotation> freeTextAnnotations = annotationSelector.getSelected();

         // 删除注释
         for (Annotation fa : freeTextAnnotations) {
            page.getAnnotations().delete(fa);
        }
        document.save(_dataDir + "sample_freetext_del.pdf");
    }

从PDF文件的页面删除所有注释

Page 对象的 AnnotationCollection 集合包含该特定页面的所有注释。 要删除页面中的所有注释,请调用AnnotationCollection集合的Delete方法。

以下代码片段展示了如何删除特定页面的所有注释。

    public static void DeleteTextAnnotation() {
         // 加载PDF文件
         Document document = new Document(_dataDir + "sample_textannot.pdf");

         // 使用AnnotationSelector过滤注释
         Page page = document.getPages().get_Item(1);
         AnnotationSelector annotationSelector = new AnnotationSelector(
                 new TextAnnotation(page, Rectangle.getTrivial()));
         page.accept(annotationSelector);
         List<Annotation> TextAnnotations = annotationSelector.getSelected();

         // 删除注释
         for (Annotation fa : TextAnnotations) {
            page.getAnnotations().delete(fa);
        }
        document.save(_dataDir + "sample_textannot_del.pdf");
    }

从PDF文档的页面获取所有注释

Aspose.PDF允许您从整个文档或给定页面获取注释。 要从 PDF 文档中的页面获取所有注释,请遍历所需页面资源的 AnnotationCollection 集合。下面的代码片段展示了如何获取页面的所有注释。

  public static void GetTextAnnotation() {
        // 加载 PDF 文件
        Document document = new Document(_dataDir + "sample_textannot.pdf");

        // 使用 AnnotationSelector 过滤注释
        Page page = document.getPages().get_Item(1);
        AnnotationSelector annotationSelector = new AnnotationSelector(
                new TextAnnotation(page, Rectangle.getTrivial()));
        page.accept(annotationSelector);
        List<Annotation> TextAnnotations = annotationSelector.getSelected();

        // 打印结果
        for (Annotation fa : TextAnnotations) {
            System.out.println(fa.getRect());
        }
    }