2014-01-16 83 views
5

我正在嘗試爲攪拌器開發一個python腳本,以便將呈現的圖像序列輸出到PDF。我使用Imagemagick轉換爲PDF,該部分工作正常,但是,我希望縮略圖預覽也包含在PDF中。使用sed編輯PDF屬性

PDF格式對我來說有點困惑,但我找到了/PageMode/UseThumbs標籤以及如何正確地將它們插入到文件中。我可以手動執行此操作,並且工作得很好。但我一直在試圖得到一個類似的結果,而不需要手動完成,畢竟我正在編寫一個腳本。這是在PDF標題中的數據爲例片段,與添加的標籤:

%PDF-1.3 
1 0 obj 
<< 
/Pages 2 0 R 
/PageMode 
/UseThumbs 
/Type /Catalog 
>> 
endobj 
2 0 obj 
<< 
/Type /Pages 
/Kids [ 3 0 R 17 0 R 31 0 R ] 
/Count 3 
>> 

我試圖用sed根據需要在第4和第5行,這也是工作插入標籤,但當我打開PDF時,圖像已損壞。在我比較手動編輯的PDF(沒有損壞)和記事本++中sed編輯過的PDF(已損壞)的情況下,我可以發現文件沒有區別。有一個不同的字符數,但我找不到差異的位置

據我所知,PDF有一個偏移交叉引用表,但我似乎很奇怪,手工操作不會破壞任何東西,但做它與sed創造腐敗

我在做什麼錯?

+0

你可以把這兩個文件放在某個地方,這樣我們可以看看兩者嗎? – janos

+6

它表明如果字節數已關閉,但您無法直觀地確認差異,則存在CR/LF問題。一個樣本PDF確實會有所幫助。 – usr2564301

+2

*手工操作不會破壞任何東西* - 某些PDF閱讀器,即Adobe Reader,傾向於忽略他們知道處理的某些類型的損害,並且只有在PDF文件以某種方式損壞時纔會抱怨無法處理。因此,最有可能的是,您的手動更改僅以不同方式*損壞文件。如果@ Jongware假設差異在行分隔符中,則爲true(也許sed逐行讀取文件*並在回寫中始終使用其首選行結尾),請注意,更改壓縮流中的行分隔符字符確實會打破它。 – mkl

回答

2

你真的不希望從sed做到這一點。有些PDF可能看起來像面向行的文本文件,但它們確實不是。

由於您已經在使用Python,因此您可以使用Python庫執行此任務。

pdfrw將從純Python中爲您做到這一點。它會淹沒在一個PDF文件中,並用你想要的任何改變重建它,並正確地設置文件偏移量。下面的代碼段應設置/ PageMode在PDF的/根字典/ UseThumbs:

 
    from pdfrw import PdfReader, PdfWriter, PdfName 

    trailer = PdfReader('myfile.pdf') 
    trailer.Root.PageMode = PdfName.UseThumbs 
    PdfWriter().write('mynewfile.pdf', trailer) 

免責聲明:我是pdfrw作者。

+0

我希望我昨天見過這個。 – saulspatz