PDFファイルのコードを表示および編集する方法

PDFファイルのコードを表示および編集する方法

PDFファイルのコードを見て編集する方法を知りたいです。

  1. 見てみると、バイナリ形式を見たくないので、hexdumpおそらく私が望むものではないようです。試しましたが、geditPDFコンテンツをデコードするために使用できるエンコード方法はありません。

  2. 編集を通じてsedなど/Fitで検索して変更したいと思います。/XYZしかし、私のコマンドは、sed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdfエラーを報告していなくてもPDFの外観を期待どおりに変更しないようです。sedPDFファイルをプレーンテキストのように処理できるかどうかを知りたいです。

私の質問の背景は以下にあります。この問題。私のオペレーティングシステムはUbuntu 10.10です。

答え1

最初の質問(「ソースは表示されますがバイナリはありません」)について:多くのオブジェクトにリンクされている内部バイナリストリームを解凍するために使用できるオプションがあります。

私の好きなツールは量子PDF、すべての主要なオペレーティングシステムプラットフォームで利用可能です。次のコマンド解凍するすべてのストリームとすべてのオブジェクトストリーム:

 qpdf --qdf --object-streams=disable orig.pdf expanded.pdf

これで、すべてのテキストエディタでPDFを開くことができます。 (たとえば、QPDF拡張には、意味のないフォントファイルやICCプロファイルなどのいくつかのバイナリ汚れがまだある可能性があります。)

到着再圧縮再編集後、expanded.pdf次を実行できます。

 qpdf expanded.pdf orig2.pdf

(PDFを手動で編集するときは注意してください!これを正しく実行するには、内部構文についてよく知っている必要があります。シングルバイトを追加または削除すると、PDFリーダーにエラーメッセージが表示され、編集できなくなる可能性があります。編集用に開くにはPDF内部ディレクトリが破損しているため、バイトオフセットに基づいて計算されますが、文字列Fitに置き換えるだけXYZです...)

答え2

バイナリファイルを使用できますsed(少なくともGNU sed;一部の実装では、ファイルにNULL文字が含まれているか改行文字で終わらない問題がある可能性があります)。ただし、使用したコマンドは/Fit各行の最初の項目のみを置き換え、PDFファイルでは行の意味がほとんどありません。次の項目をすべて置き換える必要があります。

 sed s/\/Fit/\/XYZ/g

/Fitその後に単語コンポーネントがない場合は、置き換えるだけでより強力になります(例:置換なし、ファイルに問題が発生する可能性がある/Fitnessものが含まれているかどうかわかりません)。/Fit1つの方法は次のとおりです。

perl -pe 's!/Fit\b!/XYZ!g'

答え3

LibreOfficeまたはOpenOfficeを使用して、PDFを開く、表示、コンテンツの置き換え、新しいPDFの作成などを実行できます。処理する文書が多い場合は、コマンドラインで使用することも、プログラムで使用することもできます。

PDFのソースは次のとおりです。一部ソース(スキャナなど)には通常、ページがテキストではなく画像として含まれているため、検索と置換には使用できません。

答え4

sedライン指向なので、ラインではなくブロックで構造化されたバイナリファイルには適していません。
代わりに bbe(bbe-.sourceforge.net) を試してください。

あるいは、Emacs(GNUとXEmacs)とvimの両方でPDFファイルをシームレスに開くことができます。もちろん、テキストとバイナリが混在しているので、見事に印刷されませんが、編集には十分です。
一つあるPDFファイルvimプラグインを使用すると、すべてが簡単になります。ダウンロードここ(圧縮ファイル).
ご存知のように、上記の両方のエディタは強力な検索と置換機能を備えています。

また、PDFQDFモードbeforeを使用すると、PDFファイルを非常に簡単に編集できます。

関連情報