【问题标题】:Adding metadata to PDF将元数据添加到 PDF
【发布时间】:2013-09-01 03:40:19
【问题描述】:

我需要将元数据添加到我正在使用prawn 创建的 PDF 中。该元数据稍后将由pdf-reader 提取。此元数据将包含内部文档编号和下游工具所需的其他信息。

将元数据与 PDF 的每一页关联起来会很方便。 The PDF specification 声称我可以将每页的私有数据存储在“Page-Piece Dictionary”中。第 14.5 节指出:

分页词典 (PDF 1.3) 可用于保存私有 符合产品数据。数据可能与页面或 通过页面中可选的 PieceInfo 条目形成 XObject 对象(参见表 30)或表单字典(参见表 95)。开始 对于 PDF 1.4,私人数据也可能与 PDF 相关联 通过文档目录中的 PieceInfo 条目记录文档 (见表 28)。

如何用大虾设置“分页词典”?我用的是大虾 0.12.0。

如果这不可能,我还能如何实现在页面级别或文档级别存储有关每个页面的元数据的目标?

【问题讨论】:

    标签: ruby pdf pdf-generation metadata prawn


    【解决方案1】:

    你可以看看大虾的来源

    https://github.com/prawnpdf/prawn/commit/131082af5abb71d83de0e2005ecceaa829224904

    info = { :Title => "Sample METADATA",
                 :Author => "Me",
                 :Subject => "Not Working",
                 :CreationDate => Time.now }
    
    @pdf = Prawn::Document.new(:template => filename, :info => info) 
    

    【讨论】:

    • PDF 标题是否适合存放大型私有元数据?特别是,PDF 标头中带有私钥的 PDF 是否符合要求?
    • 我不确定是否有大数据,但如果你想要关于文件的所有信息,那就是它应该去的地方。您有要保存的数据示例吗?
    • 如果用 YAML 表示,一个 PDF 的元数据可能有数万行。
    【解决方案2】:

    一种方法是以上都不做;即不要将元数据附加为分页字典,也不要将其与虾一起附加。而是使用pdftk 命令行工具将元数据作为文件附件附加。

    为此,请使用元数据创建一个文件。例如,文件 metadata.yaml 可能包含:

    ---
    - :document_id: '12345'
      :account_id: 10
      :page_numbers:
      - 1
      - 2
      - 3
    - :document_id: '12346'
      :account_id: 24
      :page_numbers:
      - 4
    

    用大虾创建pdf文件后,使用pdftk将元数据文件附加到pdf文件:

    $ pdftk foo.pdf attach_files metadata.yaml output foo-with-attachment.pdf
    

    由于 pdftk 不会就地修改文件,因此输出文件必须不同于输入文件。

    您也许可以使用 pdf-reader 提取元数据文件,但您当然可以使用 pdftk 来完成。此命令将 metadata.yaml 解压到 unpacked-attachments 目录中。

    $ pdftk foo-with-attachment.pdf unpack_files output unpacked-attachments
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多