如何将xmp填充到PDF页面的/ Metadata条目

我正在开发一个项目,它将元数据嵌入到现有PDF的每个页面(PDF / A3标准) . 我有xml文件和页面数量一样多,程序会将相应的xml文件作为元数据嵌入到页面中 .

到目前为止,我的程序使用iText 5为每个页面添加了一个/ Metadata条目,我还可以在每个页面的元数据条目中添加一个简单的字符串或文本,它可以在Adobe的PDF树结构下显示Acrobat Pro . 这是我的代码,其中向页面添加/元数据条目:

writer.addPageDictEntry(PdfName.METADATA, new PdfString("123"));

到目前为止的问题是如何将xml添加到/ Metadata条目?我的xml文件是一些简单的树结构,我不知道如何将xml文件转换为PdfObject . 通过iText开发者网站,它说每个页面中的/ Metadata条目应该包含xmp的引用,我不知道如何这样做 . 我应该将每个xml文件嵌入到一起,并将该部分的引用传递到每个页面的条目中吗?

This screenshot of acrobat pro shows what my program can do so far, click here to see the pic

回答(1)

2 years ago

addPageDictEntry() 方法不是您所需要的 . 你应该尝试 setPageXmpMetadata() 方法 . 见API docs .

该方法接受 byte[] . 确保 byte[] 包含正确的XMP数据 . 该方法将在内部完成所有繁重的工作 . 也就是说:它将创建一个包含XML的流对象,它将从页面字典中添加一个引用到该流对象 . 您可能知道,PDF中禁止使用PDF流作为直接对象 .

如果您想通过自己创建流对象,通过将其添加到 PdfWriter 来获取引用,然后使用该引用作为页面词典中条目的值来实现它,您可能会在答案中找到灵感对于这个问题:How do I add XMP metadata to each page of an existing PDF using iTextSharp(或this example),但快捷方法应该更容易使用 .