iText C#:如何修改或移除PDF元数据中的创建日期?
如何修改或移除PDF元数据中的创建日期(基于iText)
当然可以修改或移除PDF的创建日期啦!你之前遇到的问题我太懂了——直接操作writer.Info其实只是在修改元数据字典的副本,你的修改根本不会同步到正在生成的PDF里。下面分两种场景,结合不同版本的iText给你正确的操作方法:
一、如果你用的是iText 5.x版本
移除创建日期
你需要先获取当前的元数据字典,移除CREATIONDATE字段后,再把修改后的字典设置回PdfWriter:
// 假设你已经初始化了Document和PdfWriter实例 PdfDictionary metadata = writer.getInfo(); // 移除创建日期字段 metadata.remove(PdfName.CREATIONDATE); // 将修改后的元数据设置回writer,让生效 writer.setInfo(metadata);
修改为自定义创建日期
同样的逻辑,先获取字典,修改后再设置回去:
PdfDictionary metadata = writer.getInfo(); // 设置你想要的日期,比如2017年1月1日 metadata.put(PdfName.CREATIONDATE, new PdfDate(new DateTime(2017, 1, 1))); writer.setInfo(metadata);
二、如果你用的是iText 7.x版本
iText 7的API做了优化,操作起来更直观,直接通过PdfDocument的文档信息对象修改即可:
移除创建日期
// 初始化PdfDocument和PdfWriter PdfDocument pdfDoc = new PdfDocument(new PdfWriter("output.pdf")); PdfDocumentInfo docInfo = pdfDoc.getDocumentInfo(); // 直接移除创建日期 docInfo.remove(PdfName.CREATIONDATE); // 别忘了关闭文档,确保修改写入 pdfDoc.close();
修改为自定义创建日期
PdfDocument pdfDoc = new PdfDocument(new PdfWriter("output.pdf")); PdfDocumentInfo docInfo = pdfDoc.getDocumentInfo(); // 设置自定义创建日期 docInfo.setCreationDate(new PdfDate(new DateTime(2017, 1, 1))); pdfDoc.close();
简单来说,核心就是:别直接修改Info返回的副本,一定要通过官方提供的API把修改后的元数据同步回PDF实例里,这样你的修改才会真正生效。
内容的提问来源于stack exchange,提问作者PraiseTheBaud
相关产品推荐
相关产品推荐

