Way*_*rad 8 ruby pdf pdf-generation metadata prawn
我需要向使用prawn创建的PDF添加元数据.这个元数据稍后可能会被pdf-reader提取出来.此元数据将包含内部文档编号和下游工具所需的其他信息.
将元数据与PDF的每个页面相关联将是方便的. PDF规范声称我可以将每页私有数据存储在"页面字典"中.第14.5节规定:
页面字典(PDF 1.3)可用于保存私有符合产品数据.数据可以通过页面对象中的可选PieceInfo条目(参见表30)或表单字典(参见表95)与页面或表单XObject相关联.从PDF 1.4开始,私有数据也可以通过文档目录中的PieceInfo条目与PDF文档相关联(参见表28).
如何用虾设置"页面字典"?我正在使用虾0.12.0.
如果那是不可能的,那么我怎样才能实现在页面级别或文档级别存储每个页面元数据的目标?
你可以看看虾的来源
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)
Run Code Online (Sandbox Code Playgroud)
一种方法是不执行上述任何操作;即不要将元数据作为页片字典附加,也不要与大虾附加。相反,使用pdftk命令行工具将元数据附加为文件附件。
为此,请创建一个包含元数据的文件。例如,文件metadata.yaml可能包含:
---
- :document_id: '12345'
:account_id: 10
:page_numbers:
- 1
- 2
- 3
- :document_id: '12346'
:account_id: 24
:page_numbers:
- 4
Run Code Online (Sandbox Code Playgroud)
使用 prawn 创建完 pdf 文件后,然后使用pdftk将元数据文件附加到 pdf 文件中:
$ pdftk foo.pdf attach_files metadata.yaml output foo-with-attachment.pdf
Run Code Online (Sandbox Code Playgroud)
由于pdftk不会就地修改文件,因此输出文件必须与输入文件不同。
您也许可以使用 pdf-reader 提取元数据文件,但您当然可以使用 pdftk 来做到这一点。此命令将metadata.yaml解压到unpacked-attachments目录中。
$ pdftk foo-with-attachment.pdf unpack_files output unpacked-attachments
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |