☰
Java 读取、修改和清空 PDF 文档属性(元数据)
2026/10/24 2:28:56 网站建设 项目流程

PDF 文件除了正文内容,还可以保存一些文档属性,例如标题、作者、主题、关键词以及创建时间。这些信息通常不会直接显示在 PDF 页面上,但可以在 PDF 阅读器的文档属性中查看。

例如,整理一批项目报告时,可能需要检查文件的作者和标题是否正确,或者在对外发送 PDF 前清理不需要保留的文档属性。

本文将介绍如何使用 Java 读取、修改和清空 PDF 中的常见文档属性。

一、添加 Maven 依赖

首先,在 Java 项目的pom.xml文件中添加以下 Maven 仓库和依赖:

<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>12.10.3</version></dependency></dependencies>

下面以一个名为report.pdf的文件为例。三个代码示例均使用该文件作为输入,可以分别运行。

二、读取 PDF 文档属性

如果需要查看 PDF 的标题、作者、关键词等信息,可以使用PdfDocument.getDocumentInformation()方法。

该方法返回一个PdfDocumentInformation对象,通过它可以获取 PDF 中保存的常见文档属性。

完整代码如下:

importcom.spire.pdf.PdfDocument;importcom.spire.pdf.PdfDocumentInformation;publicclassReadPDFProperties{publicstaticvoidmain(String[]args){// 创建 PDF 文档对象PdfDocumentpdf=newPdfDocument();try{// 加载 PDF 文件pdf.loadFromFile("report.pdf");// 获取文档属性PdfDocumentInformationinfo=pdf.getDocumentInformation();// 读取并输出属性信息System.out.println("标题:"+info.getTitle());System.out.println("作者:"+info.getAuthor());System.out.println("主题:"+info.getSubject());System.out.println("关键词:"+info.getKeywords());System.out.println("创建程序:"+info.getCreator());System.out.println("PDF 生成程序:"+info.getProducer());System.out.println("创建时间:"+info.getCreationDate());System.out.println("修改时间:"+info.getModificationDate());}finally{// 释放文档资源pdf.close();}}}

运行后,程序会将 PDF 的文档属性输出到控制台。

其中,几个容易混淆的属性需要区分:

  • Title:文档标题,不一定与 PDF 文件名相同。
  • Author:文档作者。
  • Subject:文档主题或内容描述。
  • Keywords:用于描述或分类文档的关键词。
  • Creator:创建原始文档的应用程序。
  • Producer:生成 PDF 文件的软件或组件。

例如,一份报告可能最初由 Microsoft Word 创建,再通过其他软件转换为 PDF。此时,Creator和Producer记录的可能是不同的信息。

另外,并不是所有 PDF 都包含完整的文档属性。如果某个字段没有设置,读取结果可能为空或null,具体取决于文件内容。

三、修改 PDF 文档属性

如果 PDF 的标题、作者或其他信息不正确,可以直接修改,而不需要重新生成正文内容。

例如,一份项目报告原来的标题是“项目报告初稿”,正式发布时可以将其修改为“2026 年第三季度项目报告”,同时更新作者、主题和关键词。

通过PdfDocumentInformation对象提供的setTitle()、setAuthor()等方法,就可以完成这些操作。

完整代码如下:

importcom.spire.pdf.PdfDocument;importcom.spire.pdf.PdfDocumentInformation;importjava.util.Date;publicclassUpdatePDFProperties{publicstaticvoidmain(String[]args){// 创建 PDF 文档对象PdfDocumentpdf=newPdfDocument();try{// 加载 PDF 文件pdf.loadFromFile("report.pdf");// 获取文档属性PdfDocumentInformationinfo=pdf.getDocumentInformation();// 修改文档标题info.setTitle("2026 年第三季度项目报告");// 修改作者info.setAuthor("项目管理部");// 修改主题info.setSubject("第三季度项目进度与风险分析");// 修改关键词info.setKeywords("项目报告, 进度, 风险分析");// 更新修改时间info.setModificationDate(newDate());// 保存修改后的 PDFpdf.saveToFile("report-updated.pdf");System.out.println("PDF 文档属性已更新");}finally{// 释放文档资源pdf.close();}}}

运行后,会生成report-updated.pdf。

这里主要使用了以下方法:

方法作用
setTitle()设置文档标题
setAuthor()设置作者
setSubject()设置主题
setKeywords()设置关键词
setModificationDate()设置修改时间

示例通过new Date()将修改时间设置为程序运行时的当前时间。

需要注意,修改 PDF 文档属性并不会修改 PDF 页面中实际显示的文字。

例如,将Title设置为“2026 年第三季度项目报告”,不会自动更改 PDF 首页的标题。

文档属性与页面内容是两个不同的部分。如果需要同步修改页面上的文字,还需要另外处理 PDF 正文。

四、清空 PDF 中的常见文档属性

有时 PDF 文件需要发送给外部人员,但其中的作者、创建程序或其他文档属性已经不再适合保留。

对于这些常见的文本属性,可以将相应字段设置为空字符串。

例如,下面的代码清空 PDF 的标题、作者、主题、关键词和创建程序信息。

importcom.spire.pdf.PdfDocument;importcom.spire.pdf.PdfDocumentInformation;publicclassClearPDFProperties{publicstaticvoidmain(String[]args){// 创建 PDF 文档对象PdfDocumentpdf=newPdfDocument();try{// 加载 PDF 文件pdf.loadFromFile("report.pdf");// 获取文档属性PdfDocumentInformationinfo=pdf.getDocumentInformation();// 清空常见文本属性info.setTitle("");info.setAuthor("");info.setSubject("");info.setKeywords("");info.setCreator("");// 保存处理后的 PDFpdf.saveToFile("report-cleared-properties.pdf");System.out.println("指定的 PDF 文档属性已清空");}finally{// 释放文档资源pdf.close();}}}

运行后,程序会生成report-cleared-properties.pdf。

代码中的关键操作是:

info.setTitle("");info.setAuthor("");info.setSubject("");info.setKeywords("");info.setCreator("");

这些语句将指定属性的值设置为空字符串。

需要特别注意:清空上述字段不等于彻底删除 PDF 中的所有元数据。

PDF 除了常见的文档信息字段,还可能包含 XMP 元数据、自定义属性及其他内部信息。

因此,该示例适合清空指定的常见文档属性,但不能直接作为完整的 PDF 元数据清理或敏感信息删除方案。

如果文件涉及隐私或合规要求,还需要检查其他元数据以及 PDF 正文、批注、附件等内容。

五、操作 PDF 文档属性时需要注意的问题

1. 文档属性和 XMP 元数据有所不同

PDF 可以通过文档信息字典保存标题、作者等常见属性,也可能通过 XMP 保存结构化元数据。

两者可能包含相同或相似的信息,但并不意味着修改其中一处后,另一处就一定同步更新。

本文主要操作的是PdfDocumentInformation中的常见字段。如果需要检查或修改 XMP 元数据,应另外处理。

2. 修改后需要重新保存文件

读取文档属性不会改变原文件。

但修改或清空属性后,需要调用saveToFile()将结果保存到 PDF 文件中。

本文将结果保存为新的文件,便于与原始 PDF 对比,也可以避免误覆盖源文件。

3. 创建时间不一定等于文件创建时间

PDF 文档属性中的CreationDate与操作系统显示的文件创建时间不是一回事。

例如,将一份旧 PDF 复制到新的文件夹中,文件系统记录的创建时间可能发生变化,但 PDF 内部的创建日期仍可能保留原值。

如果需要根据时间进行文件归档或筛选,应该先明确使用的是 PDF 内部时间,还是文件系统时间。

4. 部分属性可能由生成软件重新写入

在保存 PDF 时,处理软件可能更新某些属性,例如修改时间或Producer信息。

因此,如果需要清理特定属性,建议在保存后重新打开输出文件,检查这些字段的实际值,而不是只根据代码执行成功就判断清理完成。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询