PDFファイルのコードを見て編集する方法を知りたいです。
見てみると、バイナリ形式を見たくないので、
hexdump
おそらく私が望むものではないようです。試しましたが、gedit
PDFコンテンツをデコードするために使用できるエンコード方法はありません。編集を通じてsedなど
/Fit
で検索して変更したいと思います。/XYZ
しかし、私のコマンドは、sed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdf
エラーを報告していなくてもPDFの外観を期待どおりに変更しないようです。sed
PDFファイルをプレーンテキストのように処理できるかどうかを知りたいです。
私の質問の背景は以下にあります。この問題。私のオペレーティングシステムは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
ものが含まれているかどうかわかりません)。/Fit
1つの方法は次のとおりです。
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ファイルを非常に簡単に編集できます。