【问题标题】:How to fill xmp to /Metadata entry of PDF pages如何将 xmp 填充到 PDF 页面的 /Metadata 条目
【发布时间】:2017-02-13 22:43:07
【问题描述】:

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

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

        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

【问题讨论】:

    标签: xml pdf itext metadata xmp


    【解决方案1】:

    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),但捷径应该更容易使用。

    【讨论】:

    • 感谢您的回答!!那真的很有帮助!!!现在,我想办法将 xmp 填充到 PDF 页面中。但是我遇到了一个新问题,我厌倦了通过 Adob​​e Acrobat CC 验证我的 PDF 是否为真 PDF/A。但是,软件告诉我我的 PDF 文件不是真正的 PDF/A-3A,错误消息是“XMP 属性是预定义的,但未按照定义使用 (XMP 2005)”。错误属性正是“purl.org/dc/elements/1.1/dc:title”。我对此感到困惑,因为我不知道如何解决这个问题。
    • 没有看 PDF 的人怎么能回答这个问题?我只能猜测您在 /Info 字典中的元数据和 XMP 中的元数据之间存在差异。
    • 您好 Bruno,我已将我的测试 pdf 文件上传到下面的 Dropbox 链接。请检查一下,我不知道如何通过 PDF/A-2B 有效性检查。 dropbox.com/s/wibx73w99utbmmp/…
    • 我认为您需要专家。您是否考虑过购买 iText 许可证并获得付费支持?
    猜你喜欢
    • 2015-01-06
    • 2013-04-25
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多