2013-08-28 17 views
7

Potrzebuję dodać metadane do pliku PDF, który utworzę za pomocą prawn. Te meta-dane zostaną później wyodrębnione prawdopodobnie przez pdf-reader. Te metadane będą zawierały wewnętrzne numery dokumentów i inne informacje potrzebne dalszym narzędziom.Dodawanie metadanych do pliku PDF

Przydatne byłoby powiązanie metadanych z każdą stroną pliku PDF. The PDF specification twierdzi, że mogę przechowywać prywatne dane na stronie w "Słowniku na stronie". Sekcja 14.5 stwierdza:

Słownik stronicowy (PDF 1.3) może być używany do przechowywania prywatnych danych zgodnych z danymi . Dane mogą być powiązane ze stroną lub formularzem XObject za pomocą opcjonalnego wpisu PieceInfo na obiekcie strony (patrz Tabela 30) lub formularza (patrz Tabela 95). Począwszy od z PDF 1.4, dane prywatne mogą być również powiązane z dokumentem PDF za pomocą wpisu PieceInfo w katalogu dokumentów (patrz Tabela 28).

Jak ustawić "słownik stronicowy" z krewetkami? Używam krewetki 0.12.0.

Jeśli nie jest to możliwe, w jaki inny sposób mogę osiągnąć cel przechowywania metadanych dotyczących każdej strony, na poziomie strony lub dokumentu?

Odpowiedz

4

Jednym sposobem jest wykonanie żadnego z powyższych; to znaczy, nie dołączaj metadanych do słownika stronicowania i nie dołączaj do niego krewetki. Zamiast tego dołącz metadane jako załącznik do pliku, korzystając z narzędzia wiersza polecenia pdftk.

Aby zrobić to w ten sposób, utwórz plik z metadanymi. Na przykład, plik metadata.yaml może zawierać:

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

Po zakończeniu tworzenia pliku PDF z krewetek, a następnie użyć pdftk dołączyć plik metadanych w pliku PDF:

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

Od pdftk nie zmodyfikuje pliku w miejscu, plik wyjściowy musi być inny niż plik wejściowy.

Możesz być w stanie wyodrębnić plik metadanych za pomocą czytnika pdf, ale na pewno możesz to zrobić za pomocą pdftk. To polecenie rozpakowuje metadata.yaml do katalogu unpacked-attachments .

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

można spojrzeć na źródła krewetki

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

Czy PDF nagłówku odpowiedniego miejsca na dużej, prywatnej metadanych? W szczególności, czy plik PDF z kluczami prywatnymi w nagłówku PDF jest zgodny? –

+0

Nie jestem pewien dla dużych danych, ale jeśli chcesz wszystkie informacje o pliku, to jest miejsce, gdzie powinien iść. czy masz przykład danych, które chcesz zapisać? – MZaragoza

+0

Jeśli wyrażone w YAML, metadane mogą być dziesiątkami tysięcy wierszy dla jednego pliku PDF. –

Powiązane problemy