使用iText7从PDF元数据获取创建日期的可行方案求助
使用iText7获取PDF创建日期的可行方案
- 核心逻辑:PDF的创建日期一般存在文档元数据的
CreationDate字段里,用iText7的PdfDocumentInfo就能直接读取。 - 先确保引入正确依赖(Maven示例):
<dependency> <groupId>com.itextpdf</groupId> <artifactId>itext7-core</artifactId> <version>7.2.5</version> <!-- 换最新稳定版更稳妥 --> </dependency>
- 基础实现代码:
import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfReader; import com.itextpdf.kernel.pdf.PdfDocumentInfo; import java.io.File; import java.io.IOException; import java.util.Date; public class PdfDateGetter { public static void main(String[] args) { File targetPdf = new File("你的PDF文件路径.pdf"); // 使用try-with-resources自动关闭资源,避免内存泄漏 try (PdfReader reader = new PdfReader(targetPdf); PdfDocument pdfDoc = new PdfDocument(reader)) { PdfDocumentInfo docInfo = pdfDoc.getDocumentInfo(); Date createDate = docInfo.getCreationDate(); if (createDate != null) { System.out.println("创建日期:" + createDate); } else { System.out.println("该PDF没有设置创建日期字段"); } } catch (IOException e) { e.printStackTrace(); } } }
- 遇到
getCreationDate()返回null的处理办法:
有些PDF的元数据格式不标准,或者字段藏在目录字典里,可以手动解析:
// 在上面的try代码块里添加这段逻辑 import com.itextpdf.kernel.pdf.PdfDictionary; import com.itextpdf.kernel.pdf.PdfName; import com.itextpdf.kernel.pdf.PdfString; import com.itextpdf.text.pdf.DateConverter; PdfDictionary catalog = pdfDoc.getCatalog().getPdfObject(); PdfDictionary infoDict = catalog.getAsDictionary(PdfName.Info); if (infoDict != null) { PdfString dateStr = infoDict.getAsString(PdfName.CreationDate); if (dateStr != null) { Date manualDate = DateConverter.convert(dateStr.toString()); System.out.println("手动解析得到的创建日期:" + manualDate); } }
- 额外注意:如果PDF是加密的,创建
PdfReader时要传入密码,比如new PdfReader(targetPdf, new ReaderProperties().setPassword("密码".getBytes()))。
内容的提问来源于stack exchange,提问作者tmighty
相关产品推荐
相关产品推荐

