8

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

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

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

如何用大虾设置“分页词典”?我正在使用虾 0.12.0。

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

4

2 回答 2

7

你可以看看大虾的来源

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) 
于 2013-08-31T03:49:32.730 回答
4

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

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

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

使用 prawn 创建完 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
于 2013-08-30T15:44:34.837 回答