2013-08-28 105 views
7

Tôi cần phải thêm siêu dữ liệu vào tệp PDF mà tôi đang tạo bằng cách sử dụng prawn. Siêu dữ liệu đó sẽ được trích xuất sau đó, có lẽ, pdf-reader. Siêu dữ liệu này sẽ chứa số tài liệu nội bộ và các thông tin khác cần thiết bởi các công cụ hạ lưu.Thêm siêu dữ liệu vào PDF

Sẽ thuận tiện khi kết hợp siêu dữ liệu với mỗi trang của PDF. The PDF specification tuyên bố rằng tôi có thể lưu trữ dữ liệu riêng tư trên mỗi trang trong một "Từ điển trang-Piece". Mục 14.5 nêu rõ:

Từ điển một trang (PDF 1.3) có thể được sử dụng để giữ riêng tư dữ liệu sản phẩm phù hợp. Dữ liệu có thể được liên kết với một trang hoặc biểu mẫu XObject bằng cách sử dụng mục nhập SampleInfo tùy chọn trong trang đối tượng (xem Bảng 30) hoặc từ điển biểu mẫu (xem Bảng 95). Bắt đầu từ với PDF 1.4, dữ liệu cá nhân cũng có thể được liên kết với tài liệu PDF bằng cách nhập mục MảnhInfo trong danh mục tài liệu (xem Bảng 28).

Tôi làm cách nào để đặt "từ điển mẫu trang" bằng tôm? Tôi đang sử dụng tôm 0.12.0.

Nếu điều đó là không thể, làm cách nào khác tôi có thể đạt được mục tiêu lưu trữ siêu dữ liệu về mỗi trang, ở cấp trang hoặc ở cấp tài liệu?

Trả lời

4

Một cách là làm không có mục nào ở trên; có nghĩa là, không đính kèm siêu dữ liệu dưới dạng từ điển của một trang, và không đính kèm nó với tôm. Thay vào đó, hãy đính kèm siêu dữ liệu dưới dạng tệp đính kèm bằng cách sử dụng công cụ dòng lệnh pdftk.

Để thực hiện theo cách này, hãy tạo tệp có siêu dữ liệu. Ví dụ, các tập tin metadata.yaml có thể chứa:

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

Sau khi bạn hoàn thành việc tạo file pdf với tôm, sau đó sử dụng pdftk để đính kèm tập tin siêu dữ liệu vào file pdf:

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

pdftk sẽ không sửa đổi tệp tại chỗ, tệp đầu ra phải khác với tệp đầu vào.

Bạn có thể trích xuất tệp siêu dữ liệu bằng trình đọc pdf, nhưng bạn chắc chắn có thể làm điều đó với pdftk. Lệnh này giải nén siêu dữ liệu.yaml vào thư mục unpacked-attachment.

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

bạn có thể nhìn vào nguồn tôm

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) 
+0

Sản phẩm PDF tiêu đề một nơi thích hợp cho lớn, siêu dữ liệu riêng tư không? Đặc biệt, là một tệp PDF có khóa riêng tư trong tiêu đề PDF có tuân thủ không? –

+0

Tôi không chắc chắn cho dữ liệu lớn, nhưng nếu bạn muốn tất cả các thông tin về tập tin đó là nơi mà nó nên đi. bạn có ví dụ về dữ liệu bạn muốn lưu không? – MZaragoza

+0

Nếu được thể hiện trong YAML, siêu dữ liệu có thể là hàng chục nghìn dòng cho một tệp PDF. –