资讯详情

Java 读取、修改和清空 PDF 文档属性(元数据)

📅 2026/10/24 2:29:05 | 华诺云谱 👁 阅读
Java 读取、修改和清空 PDF 文档属性(元数据)
PDF 文件除了正文内容还可以保存一些文档属性例如标题、作者、主题、关键词以及创建时间。这些信息通常不会直接显示在 PDF 页面上但可以在 PDF 阅读器的文档属性中查看。例如整理一批项目报告时可能需要检查文件的作者和标题是否正确或者在对外发送 PDF 前清理不需要保留的文档属性。本文将介绍如何使用 Java 读取、修改和清空 PDF 中的常见文档属性。一、添加 Maven 依赖首先在 Java 项目的pom.xml文件中添加以下 Maven 仓库和依赖repositoriesrepositoryidcom.e-iceblue/idnamee-iceblue/nameurlhttps://repo.e-iceblue.cn/repository/maven-public//url/repository/repositoriesdependenciesdependencygroupIde-iceblue/groupIdartifactIdspire.pdf/artifactIdversion12.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 文档对象PdfDocumentpdfnewPdfDocument();try{// 加载 PDF 文件pdf.loadFromFile(report.pdf);// 获取文档属性PdfDocumentInformationinfopdf.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 文档对象PdfDocumentpdfnewPdfDocument();try{// 加载 PDF 文件pdf.loadFromFile(report.pdf);// 获取文档属性PdfDocumentInformationinfopdf.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 文档对象PdfDocumentpdfnewPdfDocument();try{// 加载 PDF 文件pdf.loadFromFile(report.pdf);// 获取文档属性PdfDocumentInformationinfopdf.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信息。因此如果需要清理特定属性建议在保存后重新打开输出文件检查这些字段的实际值而不是只根据代码执行成功就判断清理完成。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑