我将把AsposePdf的用法改为iText7。我还需要阅读CreateDate属性的pdf文档以及itext7库。
就目前而言,我是这样实现的:
PdfDocument doc = new PdfDocument(pdfReader);
string xmp = Encoding.UTF8.GetString(doc.GetXmpMetadata());
XElement xmpXml = XElement.Parse(xmp);
XElement dateElement = (from e in xmpXml.Descendants()
where 0 == string.Compare(e.Name.LocalName, "CreateDate", true)
select e).SingleOrDefault();
DateTime? createDateTime = null;
if (dateElement != null)
{
createDateTime = DateTime.Parse(dateElement.Value);
}但我不确定这是像CreateDate这样的属性的正确读取方式。理论上:在不同版本的pdf文档中,CreateDate可能会在不同的地方编写。或者XMP部件的XML结构可能会被更改。
因此,我希望iText7处理提取CreateDate属性的逻辑。
所以我的问题是:
有什么更好的方法来完成我在代码部分中用iText7实现的吗?
谢谢!
发布于 2020-04-16 06:47:31
CreateDate/CreationDate有两个地方可以驻留: document字典和document元数据。
从理论上讲,这可能是不同步的,您将不得不选择哪个优先考虑,但通常所有的主要PDF生产者保持这些日期同步。
为了提取这两个值,iText提供了标准函数:
// Info dictionary
String date = pdfDocument.getDocumentInfo().getMoreInfo("CreationDate");
// XMP metadata
if (pdfDocument.getXmpMetadata() != null) {
XMPMeta meta = XMPMetaFactory.parseFromBuffer(pdfDocument.getXmpMetadata());
XMPDateTime dateTime = meta.getPropertyDate(XMPConst.NS_XMP, PdfConst.CreateDate);
}请注意,代码是用Java编写的,但是应该很容易适应.NET。
https://stackoverflow.com/questions/61227358
复制相似问题