将元数据添加到PDF

时间:2013-08-28 21:27:01

标签: ruby pdf pdf-generation metadata prawn

我需要使用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。

如果无法做到这一点,我还能如何在页面级别或文档级别实现存储每个页面元数据的目标?

2 个答案:

答案 0 :(得分: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) 

答案 1 :(得分:4)

一种方法是以上;也就是说,不要将元数据作为页面字典附加,也不要将它与prawn一起附加。而是使用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