2014-01-16 14 views
5

私は、レンダリングされた画像シーケンスをPDFに出力するためのblender用のPythonスクリプトを開発しようとしています。私は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 
>> 

私が働いても4番目と5番目のライン、上の必要に応じてタグを挿入するためにsedを使用しようとしていますが、しかし、 PDFを開くと、画像が壊れてしまいます。私が手動で編集したPDF(破損していない)とnotepad ++のsedで編集したPDF(破損している)を比較すると、ファイルに違いはありません。異なる文字数がありますが、差異の場所が見つかりません

私は、PDFにオフセットの相互参照テーブルがあることを理解していますが、手作業で行うと何かが損なわれないのですが、それはsedと腐敗を作成する

私は間違って何ですか?

+0

2つのファイルをどこかに投稿して両方を見ることはできますか? – janos

+6

バイト数がオフだが違いを視覚的に確認できない場合、CR/LFの問題があることを示唆しています。実際のサンプルPDFが役に立ちます。 – usr2564301

+2

*手作業で行うと何も変わっていません* - 一部のPDFビューア、つまりAdobe Readerは、処理することが知られている特定の種類のダメージを無視する傾向があります。処理できません。したがって、手動による変更によってファイルが破損した可能性があります。 @ Jongwareの仮定が差異が行区切り文字であると仮定した場合、真である(sedはファイル*を行ごとに読み*し、書面では常にその行末を使用する)、圧縮されたストリームの行区切り文字を変更すると、壊せ。 – mkl

答えて

2

あなたは本当にsedからこれをやりたがりません。 PDFの中には、行指向のテキストファイルのように見えるものもありますが、確かにそうではありません。

既にPythonを使用しているので、このタスクにはPythonライブラリを使用できます。

pdfrwは、純粋なPythonからこの問題を解決します。それはPDFファイルでスラップし、必要な変更を加えてファイルを再構築し、ファイルのオフセットを正しく設定します。

 
    from pdfrw import PdfReader, PdfWriter, PdfName 

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

免責事項:私はpdfrwの作者だ次のコードスニペットは、PDFの/ルート辞書に/ UseThumbsに/ PageModeを設定する必要があります。

+0

私はこれを昨日見たかったです。 – saulspatz

関連する問題