将元数据添加到PDF

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

一种方法是不做以上任何事情; 也就是说,不要将元数据作为页面字典附加,也不要将它与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