如今,大量用户将 PDF 文档中的不同文件保存为附件。这些附件可以在必要时提取并用于其他目的。通常来说,PDF 中有两种类型的附件:文档级附件和注释附件。以下是它们之间的区别。
- 文档级附件:PDF 的文档级附件不会显示在页面上,只能在 PDF 阅读器的“附件”面板中查看。
- 注释附件:文件将被添加到页面的特定位置。注释附件在页面上显示为回形针图标;审阅者可以双击图标打开文件。
在本文中,您将学习如何使用 Spire.PDF for Java 从 PDF 文档中提取这两种附件。
安装 Spire.PDF for Java
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而在应用程序中导入 JAR 文件。
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>10.11.2</version>
</dependency>
</dependencies>
在 Java 中从 PDF 中提取附件
我们可以使用 PdfDocument.getAttachments() 方法获取 PDF 文档的文档级附件。以下步骤将向您展示如何提取附件并将它们保存到本地文件夹。
- 创建一个 PdfDocument 对象。
- 使用 PdfDocument.loadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument.getAttachments() 方法从文档中获取附件集合。
- 使用 PdfAttachmentCollection.get() 方法获取特定附件,并使用 PdfAttachment.getData() 方法获取其数据。将数据写入文件并保存到指定文件夹。
- Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.annotations.*;
import com.spire.pdf.attachments.PdfAttachmentCollection;
import java.io.*;
public class ExtractAttachments {
public static void main(String[] args) throws Exception {
//创建一个 PdfDocument 对象
PdfDocument doc = new PdfDocument();
//加载包含附件的 PDF 文件
doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\添加附件.pdf");
//获取PDF文档的附件集
PdfAttachmentCollection attachments = doc.getAttachments();
//循环遍历集合
for (int i = 0; i < attachments.getCount(); i++) {
//指定输出文件路径和名称
File file = new File("C:\\Users\\Administrator\\Desktop\\输出文件\\" + attachments.get(i).getFileName());
OutputStream output = new FileOutputStream(file);
BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);
//获取特定附件并写入文件
bufferedOutput.write(attachments.get(i).getData());
bufferedOutput.close();
}
}
}
在 Java 中从 PDF 中提取注释附件
注释附件是一个基于页面的元素。要从特定页面获取注释,可以使用 PdfPageBase.getAnnotationsWidget() 方法。然后,您需要确定特定注释是否为注释附件。以下是从整个文档中提取注释附件并将其保存到本地文件夹的步骤。
- 创建一个 PdfDocument 对象。
- 使用 PdfDocument.loadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument.getPages().get() 方法从文档中获取特定页面。
- 使用 PdfPageBase.getAnnotationsWidget() 方法从页面获取注释集合。
- 确定特定注释是否为 PdfAttachmentAnnotationWidget 的实例。如果是,将注释附件写入文件,并保存到指定文件夹。
- Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.annotations.PdfAnnotationCollection;
import com.spire.pdf.annotations.PdfAttachmentAnnotationWidget;
import java.io.*;
public class ExtractAnnotationAttachments {
public static void main(String[] args) throws Exception {
//创建一个 PdfDocument 对象
PdfDocument doc = new PdfDocument();
//加载包含附件的 PDF 文件
doc.loadFromFile("D:\\Users\\Administrator\\Desktop\\添加注释附件.pdf");
//循环遍历页面
for (int i = 0; i < doc.getPages().getCount(); i++) {
//获取注解集合
PdfAnnotationCollection collection = doc.getPages().get(i).getAnnotationsWidget();
//循环遍历注释
for (Object annotation : collection) {
//确定注释是否为 PdfAttachmentAnnotationWidget 的实例
if (annotation instanceof PdfAttachmentAnnotationWidget) {
//将注释附件保存到指定文件夹
String fullPath = ((PdfAttachmentAnnotationWidget) annotation).getFileName();
String fileName = fullPath.substring(fullPath.lastIndexOf("\\") + 1);
File file = new File("D:\\Users\\Administrator\\Desktop\\输出结果\\" + fileName);
OutputStream output = new FileOutputStream(file);
BufferedOutputStream bufferedOutput = new BufferedOutputStream(output);
bufferedOutput.write(((PdfAttachmentAnnotationWidget) annotation).getData());
bufferedOutput.close();
}
}
}
}
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。