以前pdftk
はPDFを解凍して、テキストファイルとして開いていました。/ MediaBoxフィールド
を編集したいのですが、私の場合は
/MediaBox [0 0 612 792]
たとえば、マージンを減らしたい
/MediaBox [100 0 512 792]
残念ながら、それは機能しません。0
を2
またはに変更することはできますが、たとえば9
置くことはできません。100
なぜですか?
文字列100には、0よりも2つ多い数字が含まれています。テキストエディタを使用して文字を追加すると、ファイルが長くなります。そのため、9または2、あるいはその他の1桁に置き換えると問題なく機能します。理論的にはテキストエディタを使用してPDFを編集できますが、それは単純ではなく、ファイルの内部構造を尊重する必要があります。外部参照テーブルは、PDFの終わり近くにあるテーブルで、各オブジェクトがどこにあるかを読者に正確に伝えます。何かの長さや場所を変更するたびに変更する必要があります。
上記の手動による方法pdftk
が機能しない理由は、ファイルの中央に2バイトを追加しているためです。これはテーブルを壊しxref
ます。すべてを手動で更新する場合xref
、これは機能しますが、非常に面倒な可能性があります。sed
または他のテキスト編集ツールを 使用しても問題は解決しません。あなたのために計算を行いますpodofo
。xref
sedを使用して発生箇所を置き換えます
sed 's/MediaBox \[0 0 612 792*/MediaBox \[100 0 512 792]/g'<in.pdf >out.pdf
またはpodofobox(podofo utils内)
最初にpdfストリームを解凍する必要はありません(pdftkで必要に応じて)
podofobox in.pdf out.pdf media 10000 0 51200 79200
ご覧のとおり、podofoboxはMediaBoxの値に100を掛けたものを使用します。これは、そのスケールがサブマルチプルであるため、MediaBoxフィールドで読み取ることができる値に2つのゼロ( 00 )を追加するだけです。
PDFの余白を変更するためのより良い方法があります:
投稿してからその答えが見つかったといいのですが:-)