2009-08-15 21 views
7

私はPDF仕様に全く慣れていません。私は、PDFファイルを直接操作することが可能かどうか疑問に思っていたので、私が重要と判断した特定のテキストブロックが自分の好みの色で強調表示されるようにしました。選択する言語はPythonになります。PDFでテキストのフォント色をプログラムで変更する

答えて

11

PDF形式が非常に豊富なので可能ですが、必ずしも簡単ではありません。詳細については、hereのドキュメントを参照してください。

BT 
/F13 12 Tf 
288 720 Td 
(ABC) Tj 
ET 

BTとETはテキストオブジェクトの開始と終了のコマンドです。 Tfは、サイズ12で外部フォントリソースF13(Helveticaになる)を使用するコマンドです。 Tdは、指定された座標にカーソルを置くコマンドです。 Tjは、前の文字列のグリフを書き込むコマンドです。フレーバーは多少「逆ポリッシュ表記」ですが、Adobeの他のタイプセットへの大きな貢献の1つであるPostscriptの風味にかなり近いです。

問題は、表示されているページ上で「見た目に」見えるテキストは実際には「一緒」でなければならないということは、PDF仕様には何もありません。精密な座標を常に与えることができるので、PDFが洗練された印刷システムによって生成された場合、座標によってテキストを正確に位置付けることができる。したがって、文字や単語の形でテキストを再構築することは必ずしも容易ではありません。光学式テキスト認識とほとんど同じですが、文字を正確に与えられている点を除きます。 ... ;-)。

pyPdfは、非常に単純な純粋なPythonライブラリで、PDFファイルを再生するのに適しています。その "テキスト抽出"機能は非常に初歩的なもので、いくつかのテキスト描画コマンドの引数を連結するだけです。それはいくつかのドキュメントで十分であることがわかりますし、他のものではまったく使用できませんが、少なくとも始まりです。配布されているように、pyPdfは色についてはほとんど何もしませんが、いくつかのハッキングを修正することができます。

reportlabの強力なPythonライブラリは、既存のPDFを解釈または変更するのではなく、新しいPDFを生成することに専念しています。他の極端なところでは、純粋なPythonライブラリpdfminerは完全にPDFファイルの解析に焦点を当てています。よりシンプルなライブラリが困惑するケースでは、テキストを再構築しようとするためにいくつかのクラスタリングを行います。

あなたが望む変換タスクを実行する既存のライブラリはわかりませんが、これらの既存のライブラリを混在させて一致させることは可能です。

+0

私は1つのpdfを読むことを試みましたが、その文字とストリームは、PDFとEOFを認識でき、多くの特殊文字があります。特定のエンコーディングはありますか?あなたはBTとETを検索するための簡単なコードを共有してください。同じ質問がありました。http://stackoverflow.com/questions/12982188/how-to-access-lines-in-a-pdf-page-programmatically - と - 与える - それら - 別の色、おかげで – Shan

0

PDFアノテーションを使用してpdfファイルでハイライトが可能ですが、ネイティブで行うことは簡単ではありません。上記の図書館のいずれかがそのような施設を提供する場合は、あなたが探しているかもしれないものです。

関連する問題