7

以前pdftkはPDFを解凍して、テキストファイルとして開いていました。/ MediaBoxフィールド
を編集したいのですが、私の場合は

/MediaBox [0 0 612 792]

たとえば、マージンを減らしたい

/MediaBox [100 0 512 792]

残念ながら、それは機能しません。02またはに変更することはできますが、たとえば9置くことはできません。100

なぜですか?

4

3 に答える 3

15

文字列100には、0よりも2つ多い数字が含まれています。テキストエディタを使用して文字を追加すると、ファイルが長くなります。そのため、9または2、あるいはその他の1桁に置き換えると問題なく機能します。理論的にはテキストエディタを使用してPDFを編集できますが、それは単純ではなく、ファイルの内部構造を尊重する必要があります。外部参照テーブルは、PDFの終わり近くにあるテーブルで、各オブジェクトがどこにあるかを読者に正確に伝えます。何かの長さや場所を変更するたびに変更する必要があります。

上記の手動による方法pdftkが機能しない理由は、ファイルの中央に2バイトを追加しているためです。これはテーブルを壊しxrefます。すべてを手動で更新する場合xref、これは機能しますが、非常に面倒な可能性があります。sedまたは他のテキスト編集ツールを 使用しても問題は解決しません。あなたのために計算を行いますpodofoxref

于 2013-02-25T17:03:36.893 に答える
9

sedを使用して発生箇所を置き換えます

sed 's/MediaBox \[0 0 612 792*/MediaBox \[100 0 512 792]/g'<in.pdf >out.pdf

またはpodofoboxpodofo utils内)

最初にpdfストリームを解凍する必要はありません(pdftkで必要に応じて)

podofobox in.pdf out.pdf media 10000 0 51200 79200

ご覧のとおり、podofoboxはMediaBoxの値に100を掛けたものを使用します。これは、そのスケールがサブマルチプルであるため、MediaBoxフィールドで読み取ることができる値に2つのゼロ( 00 )を追加するだけです。

于 2012-04-06T13:27:15.800 に答える
5

PDFの余白を変更するためのより良い方法があります:

投稿してからその答えが見つかったといいのですが:-)

于 2012-04-06T08:29:11.783 に答える