注释 PDF

本篇博文是上一篇博文的延续,上一篇博文重点介绍了 Aspose.PDF Cloud SDK for Java 的一些精彩功能,包括如何添加 突出显示或删除文本,以及使用 Java REST API 在 PDF 中添加线条或圆圈注释。在本文中,我们将特别讨论使用 Java 编程语言在 PDF 文档中添加文本、折线、波浪线和附件注释的细节。

Aspose.PDF Cloud 是一个 REST API,它使用户能够创建、操作和呈现现有 PDF 文件为其他 支持的文档格式。可以使用以下两种方法访问 Cloud API:

  • 通过 cURL 命令访问 API
  • 使用 Java 编程语言访问 API

让我们进一步讨论使用 cURL 命令和 Java 代码向 PDF 文档添加各种注释。

使用 cURL 命令添加注释

cURL 命令是访问 REST API 最简单、最酷的方法之一。因此,让我们讨论如何使用 cURL 命令添加不同的注释。请注意,每个 API 还允许您访问可以存储文件以供处理的云存储,因此为了确保数据完整性,我们的 API 仅供授权人员访问。因此,您需要首先访问 Aspose.Cloud 仪表板,如果您有 GitHub 或 Google 帐户,只需注册即可。否则,单击 创建新帐户 按钮并提供所需信息。现在使用凭据登录仪表板,从仪表板展开应用程序部分,然后向下滚动到客户端凭据部分以查看客户端 ID 和客户端密钥详细信息。

现在下一步是生成 JSON Web Token (JWT),以便可以通过命令提示符访问 API。

curl -v "https://api.aspose.cloud/connect/token" \
-X POST \
-d "grant_type=client_credentials&client_id=7042694c-5251-4aba-83c9-e81e7518724f&client_secret=db246d4742e8cd22e7266c9391992689" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Accept: application/json"

文本注释

文本注释是附加到 PDF 文档中特定位置的注释。关闭时,注释显示为图标;打开时,应显示一个弹出窗口,其中包含读者选择的字体和大小的注释文本。要添加文本注释,我们需要使用 PostPageTextAnnotation API。使用以下 cURL 命令添加带有注释图标的文本注释。

 curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithBookmarks.pdf/pages/1/annotations/text" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-H  "Content-Type: application/json" \
-d "[{  \"Color\": {  \"A\": 0, \"R\": 0xDA,  \"G\": 0xA5, \"B\": 0x20    },  \"Contents\": \"Hello World \",  \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"string\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 800,      \"URX\": 100,      \"URY\": 100    },    \"PageIndex\": 1,    \"ZIndex\": 1,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Center\",    \"CreationDate\": \"string\",    \"Subject\": \"Subject of Annotation\",    \"Title\": \"Annotation Title\",    \"RichText\": \"string\",    \"State\": \"Undefined\",    \"Open\": true,    \"Icon\": \"Note\"  }]"
PDF 中的文本注释

图片 1:PDF 文件中带有注释图标的文本注释。

上述示例中使用的示例 PDF 文件可以从以下链接下载

折线注记

折线注释用于在页面上手绘折线。它们可以包含由折线顶点定义的任意数量的边。具有透明填充颜色的折线注释只能在其可见线周围选择。还可以使用 PostPagePolyLineAnnotations API 添加折线注释。

curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithTable.pdf/pages/1/annotations/polyline" \
-H  "accept: application/json" \
-H  "authorization: Bearer " \
-H  "Content-Type: application/json" \
-d "[  {       \"Color\": {      \"A\": 0,      \"R\": 122,      \"G\": 132,      \"B\": 255    },    \"Contents\": \"Hello World...\",    \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"Polyline\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 200,      \"URX\": 150,      \"URY\": 250    },    \"PageIndex\": 1,    \"ZIndex\": 1,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Center\",    \"CreationDate\": \"05/26/2021 03:10:00.000 PM\",    \"Subject\": \"Subject of Annotation\",    \"Title\": \"Title of Annotation\",    \"RichText\": \"<?xml version=\\\"1.0\\\"?><body xmlns=\\\"http://www.w3.org/1999/xhtml\\\" xmlns:xfa=\\\"http://www.xfa.org/schema/xfa-data/1.0/\\\" xfa:APIVersion=\\\"Acrobat:7.0.0\\\" xfa:spec=\\\"2.0.2\\\" ><span style=\\\"text-decoration:;font-size:10.0pt\\\">Contents</span></body>\",    \"InteriorColor\": {      \"A\": 255,      \"R\": 120,      \"G\": 110,      \"B\": 255    },    \"StartingStyle\": \"Circle\",    \"EndingStyle\": \"OpenArrow\",    \"Intent\": \"PolyLineDimension\",    \"Vertices\": [      {            \"X\": 164.611,            \"Y\": 499.629          },          {            \"X\": 192.858,            \"Y\": 509.857          },          {            \"X\": 226.461,            \"Y\": 493.785          }    ]  }]"

波浪注释

annotpdf-npm

波浪形或锯齿状下划线注释有助于突出显示文档中的信息。可以使用 PostPageSquigglyAnnotations API 添加它们。下面的命令可帮助您将波浪形注释添加到 PDF 文档。

curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithTable.pdf/pages/1/annotations/squiggly" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-H  "Content-Type: application/json" \
-d "[  {    \"Color\": {      \"A\": 255,      \"R\": 120,      \"G\": 123,      \"B\": 150    },    \"Contents\": \"A squiggly Annotation\",    \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"First Annotation\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 300,      \"URX\": 120,      \"URY\": 330    },    \"PageIndex\": 1,    \"ZIndex\": 1,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Center\",    \"CreationDate\": \"05/26/2021 03:10:00.000 PM\",    \"Subject\": \"Subject \",    \"Title\": \"Title of Squiggly\",     \"Starting\": {      \"X\": 162.663,      \"Y\": 654.5    },    \"StartingStyle\": \"Circle\",    \"Ending\": {      \"X\": 230.845,      \"Y\": 654.5    },    \"EndingStyle\": \"OpenArrow\",    \"InteriorColor\": {      \"A\": 255,      \"R\": 220,      \"G\": 220,      \"B\": 220    },    \"LeaderLine\": 10,    \"LeaderLineExtension\": 5,    \"LeaderLineOffset\": 2.5,    \"ShowCaption\": true,    \"CaptionOffset\": {      \"X\": 7,      \"Y\": 8    },    \"CaptionPosition\": \"Top\",    \"Intent\": \"LineArrow\",\"RichText\": \"string\",    \"QuadPoints\": [      {        \"X\": 100,        \"Y\": 200      }    ]  }]"

附件注释

可以将各种文件作为附件注释添加到 PDF 文档中,为了满足此要求,可以使用 PostPageFileAttachmentAnnotations API。执行以下 cURL 命令可将现有文件附加到 PDF 文档。在我们的示例中,名为 PdfWithTable.pdf 的文件(已在云存储中可用)用作附件。

curl -X POST "https://api.aspose.cloud/v3.0/pdf/PdfWithBookmarks.pdf/pages/1/annotations/fileattachment" \
-H  "accept: application/json" \
-H  "authorization: Bearer <JWT Token>" \
-H  "Content-Type: application/json" \
 -d "[  {       \"Color\": {      \"A\": 255,      \"R\": 120,      \"G\": 120,      \"B\": 120    },    \"Contents\": \"Content\",    \"Modified\": \"05/26/2021 03:10:00.000 PM\",    \"Id\": \"1\",    \"Flags\": [      \"Default\"    ],    \"Name\": \"FileAttachment\",    \"Rect\": {      \"LLX\": 100,      \"LLY\": 200,      \"URX\": 120,      \"URY\": 2200    },    \"PageIndex\": 1,    \"ZIndex\": 0,    \"HorizontalAlignment\": \"Center\",    \"VerticalAlignment\": \"Top\",    \"CreationDate\": \"05/26/2021 03:10:00.000 PM\",    \"Subject\": \"Subject\",    \"Title\": \"Title\",    \"RichText\": \"string\",    \"Icon\": \"PushPin\",    \"Opacity\": 0,    \"FileDescription\": \"string\",    \"FileName\": \"PdfWithTable.pdf\",    \"FilePath\": \"PdfWithTable.pdf\"  }]"

使用 Java 添加注释

除了 cURL 命令之外,使用我们的云 API 的另一种方法是通过编程 SDK 访问它们。我们已经为流行的编程语言开发了编程 SDK。因此,要使用 Java 语言处理 PDF 中的注释,请尝试使用 Aspose.PDF Cloud SDK for Java

第一步是在系统上安装 SKD。Cloud SDK 可通过 MavenGitHub 下载。现在在您的 pom.xml 文件中添加以下详细信息,以便在您的 Maven 构建项目中下载并使用 Aspose.Pdf.jar。

<repositories>
 <repository>
        <id>aspose-cloud</id>
        <name>artifact.aspose-cloud-releases</name>
        <url>https://artifact.aspose.cloud/repo</url>
    </repository>   
</repositories>
<dependencies>
 <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-pdf-cloud</artifactId>
        <version>21.1.0</version>
        <scope>compile</scope>
    </dependency>
 </dependencies>

欲了解更多信息,请访问如何安装 Aspose.Cloud SDKs

文本注释

下面给出了向 PDF 文档添加文本注释的步骤。

  • 第一步是创建一个 PdfApi 对象,其中我们提供 ClientID 和 ClientSecret 作为参数
  • 然后我们创建 Rectangle 对象,在其中添加注释
    • LLX——左下角的 X 坐标。
    • LLY——Y——左下角坐标。
    • URY-X-右上角的坐标。
    • URY-Y-右上角的坐标。
  • 创建 TextAnnotation 对象,使用 setHorizontalAlignment(..) 方法定义对齐方式。使用 setSubject(…) 方法设置主题,使用 setState(…) 方法设置默认状态,等等
  • 然后创建 TextAnnotation 类型的 ArrayList<> 对象,并将上面创建的 TextAnnotation 对象添加到其中
  • 最后,调用 postPageTextAnnotations(…),我们将输入的 PDF 文件名、PageNumber 和上面创建的 Annotations ArrayList 作为参数传递
// 从 https://dashboard.aspose.cloud/ 获取 ClientID 和 ClientSecret
String clientId = "7042694c-5251-4aba-83c9-e81e7518724f";
String clientSecret = "db246d4742e8cd22e7266c9391992689";
				
// createPdfApi 实例
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// 输入PDF文档
String name = "PdfWithTable.pdf";	        
			    
// 从本地系统加载文件
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// 将文件上传至云存储
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// 需要添加注释的页码
int pageNumber = 1;

// 创建添加注释的矩形对象
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(600.)
    .URX(200.)
    .URY(650.);

// 创建 AnnotationFlags 的 ListArray
List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// 创建 TextAnnotation 对象
TextAnnotation textAnnotation = new TextAnnotation();
textAnnotation.setName("Annotation Name");
textAnnotation.setRect(rect);
textAnnotation.setFlags(flags);
textAnnotation.setHorizontalAlignment(HorizontalAlignment.CENTER);

// 设置注释中显示的内容
textAnnotation.contents("Hello World...");
// 设置注释的图标
textAnnotation.icon(TextIcon.KEY);

textAnnotation.setSubject("Text Box Subj");
textAnnotation.setZindex(1);

// 注释对象的默认状态
textAnnotation.setState(AnnotationState.COMPLETED);
		        
// 创建 TextAnnotation 的 ListArray
List<TextAnnotation> annotations = new ArrayList<>();

// 将上面创建的 TextAnnotation 添加到 List 实例
annotations.add(textAnnotation);

// 调用方法为 PDF 文件添加注释
AsposeResponse response = pdfApi.postPageTextAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

折线注释

Cloud SDK 还提供了相同的功能,可将折线注释添加到 PDF 文档。下面给出了满足此要求的步骤和代码片段。

  • 首先,我们需要创建一个 PdfApi 实例并将源文件上传到云存储。
  • 创建 Point 类型的 ArrayList,定义绘制折线的点。
  • 下一步是创建一个 PolyLineAnnotation 对象,我们在其中定义矩形区域并将 Points ListArray 传递给 setVertices(…) 方法。
  • 要设置内部颜色,请使用方法 setInteriorColor(…) 并传递 Color 实例作为参数。
  • 现在调用startingStyle(…)和endingStyle(…)方法来定义注释的开始和结束样式。这些方法从LineEnding枚举中获取值作为参数。
  • 最后,调用PdfApi类的postPagePolyLineAnnotations(…)方法在PDF文档中呈现Annotation。
// 从 https://dashboard.aspose.cloud/ 获取 ClientID 和 ClientSecret
String clientId = "a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4";
String clientSecret = "d87269aade6a46cdc295b711e26809af";
				
// createPdfApi 实例
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// 输入PDF文档
String name = "PdfWithTable.pdf";	        
			    
// 从本地系统加载文件
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// 将文件上传至云存储
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// 将添加注释的输入文件的页码
int pageNumber = 1;

// 注释的矩形区域
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(600.)
    .URX(200.)
    .URY(650.);

// 指定注释的顶点
List<Point> vertices = new ArrayList();
vertices.add(new Point().X(10.).Y(10.));
vertices.add(new Point().X(20.).Y(10.));
vertices.add(new Point().X(10.).Y(20.));
vertices.add(new Point().X(10.).Y(10.));

List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// 创建 PolyLineAnnotation 对象
PolyLineAnnotation annotation = new PolyLineAnnotation();
annotation.setName("Name");
annotation.setRect(rect);
annotation.setFlags(flags);
// 设置注释的水平对齐方式
annotation.setHorizontalAlignment(HorizontalAlignment.CENTER);
annotation.contents("Rich Text in the PDF File...");
annotation.setSubject("Subj");
annotation.setZindex(1);
annotation.setTitle("Title");

// 创建颜色对象
Color color = new Color();
color.setA(255);
color.setR(120);
color.setG(140);
color.setB(130);

// 设置注释实例的内部颜色
annotation.setInteriorColor(color);
		        
annotation.setVertices(vertices);
// 指定注释的起始样式
annotation.startingStyle(LineEnding.OPENARROW);

// 设置注释的结束样式
annotation.endingStyle(LineEnding.SQUARE);

List<PolyLineAnnotation> annotations = new ArrayList<>();
annotations.add(annotation);
		        
// 调用方法将折线注释添加到文档第一页
AsposeResponse response = pdfApi.postPagePolyLineAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

波浪注释

一个名为 SquigglyAnnotation 的单独类用于向 PDF 文档添加 Squiggly 注释。下面给出的代码片段可用于向云存储上的 PDF 文件添加 Squiggly 注释。

// 从 https://dashboard.aspose.cloud/ 获取 ClientID 和 ClientSecret
String clientId = "a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4";
String clientSecret = "d87269aade6a46cdc295b711e26809af";
				
// createPdfApi 实例
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// 输入PDF文档
String name = "PdfWithTable.pdf";	        
			    
// 从本地系统加载文件
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// 将文件上传至云存储
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// 将添加注释的输入文件的页码
int pageNumber = 1;

// 注释的矩形区域
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(600.)
    .URX(200.)
    .URY(650.);

// 指定注释的顶点
List<Point> vertices = new ArrayList();
vertices.add(new Point().X(10.).Y(10.));
vertices.add(new Point().X(20.).Y(10.));
vertices.add(new Point().X(10.).Y(20.));
vertices.add(new Point().X(10.).Y(10.));

List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// 创建 SquigglyAnnotation 对象
SquigglyAnnotation annotation = new SquigglyAnnotation();
annotation.setName("Name");
annotation.setRect(rect);
annotation.setFlags(flags);
annotation.setHorizontalAlignment(HorizontalAlignment.CENTER);
annotation.contents("Rich Text in the PDF File...");
annotation.setSubject("Subj");
annotation.setZindex(1);
annotation.setTitle("Title");
annotation.setModified("28/05/2021 00:00:00.000 AM");
		        
// 创建颜色对象
Color color = new Color();
color.setA(155);
color.setR(120);
color.setG(140);
color.setB(130);

// 设置注释实例的内部颜色
annotation.color(color);

// 设置注释点		        
annotation.setQuadPoints(vertices);

List<SquigglyAnnotation> annotations = new ArrayList<>();
annotations.add(annotation);
		        
// 调用方法将波浪注释添加到文档第一页
AsposeResponse response = pdfApi.postPageSquigglyAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

文件附件注释

要添加文件附件注释,请尝试使用以下代码片段。代码描述与上述部分中分享的相同,只是您需要使用 FileAttachmentAnnotation 对象来完成此要求。

// 从 https://dashboard.aspose.cloud/ 获取 ClientID 和 ClientSecret
String clientId = "a41d01ef-dfd5-4e02-ad29-bd85fe41e3e4";
String clientSecret = "d87269aade6a46cdc295b711e26809af";
				
// createPdfApi 实例
PdfApi pdfApi = new PdfApi(clientSecret,clientId);
				
// 输入PDF文档
String name = "PdfWithTable.pdf";	        
			    
// 从本地系统加载文件
File file = new File("/Users/nayyershahbaz/Downloads/" + name);
// 将文件上传至云存储
FilesUploadResult uploadResponse = pdfApi.uploadFile(name, file, null);
				
// 将添加注释的输入文件的页码
int pageNumber = 1;

// 注释的矩形区域
Rectangle rect = new Rectangle()
    .LLX(100.)
    .LLY(100.)
    .URX(200.)
    .URY(200.);

List<AnnotationFlags> flags = new ArrayList<>();
flags.add(AnnotationFlags.DEFAULT);

// 创建 FileAttachmentAnnotation 对象
FileAttachmentAnnotation annotation = new FileAttachmentAnnotation();
annotation.setName("Name");
annotation.setRect(rect);
annotation.setFlags(flags);
annotation.setHorizontalAlignment(HorizontalAlignment.CENTER);
annotation.contents("Rich Text in the PDF File...");
annotation.setSubject("Subj");
annotation.setZindex(1);
annotation.setTitle("Title");
annotation.setModified("28/05/2021 00:00:00.000 AM");
		        
// 附件文件路径
annotation.setFilePath("images.jpeg");
// 附件文件名
annotation.setFileName("images.jpeg");

// 创建 FileAttachment 的 List 实例
List<FileAttachmentAnnotation> annotations = new ArrayList<>();
annotations.add(annotation);
		        
// 调用方法将 FileAttachment 注释添加到文档第一页
AsposeResponse response = pdfApi.postPageFileAttachmentAnnotations(name, pageNumber, annotations, null, null);
assertEquals(200, (int)response.getCode());

结论

在本文中,我们讨论了向 PDF 文档添加文本、折线、波浪线和文件附件注释的步骤和相关细节。由于我们的 Cloud SDK 是开源的,您可以从 GitHub 下载完整的源代码。该存储库还包含有关如何使用 Java Cloud SDK 创建和操作现有 PDF 文件的其他有用示例。如果您有任何相关疑问,请随时通过免费的 客户支持论坛 与我们联系。

相关文章

我们强烈建议您阅读以下文章: