Ghostscript を使用して PDF の一部 (座標を使用) からテキストを抽出したいと思います。
誰でも私を助けることができますか?
Ghostscript を使用して PDF の一部 (座標を使用) からテキストを抽出したいと思います。
誰でも私を助けることができますか?
はい、Ghostscript を使用すると、PDF からテキストを抽出できます。しかし、いいえ、それは仕事に最適なツールではありません. いいえ、「部分」(単一ページの一部)で行うことはできません。できること: 特定の範囲のページのテキストのみを抽出します。
txtwrite
出力デバイス (あまり良くない) gs \
-dBATCH \
-dNOPAUSE \
-sDEVICE=txtwrite \
-dFirstPage=3 \
-dLastPage=5 \
-sOutputFile=- \
/path/to/your/pdf
これにより、3 ~ 5 ページに含まれるすべてのテキストが stdout に出力されます。テキストファイルに出力したい場合は、
-sOutputFile=textfilename.txt
gs
アップデート:
Ghostscript の最近のバージョンでは、txtwrite
デバイスが大幅に改善され、バグが修正されています。詳細については、最近の Ghostscript の変更ログ(そのページでtxtwriteを検索) を参照してください。
ps2ascii.ps
PostScript ユーティリティ(改善)これには、ファイルps2ascii.psの最新バージョンをGhostscript Git ソース コード リポジトリからダウンロードする必要があります。PDF を PostScript に変換してから、PS ファイルに対して次のコマンドを実行する必要があります。
gs \
-q \
-dNODISPLAY \
-P- \
-dSAFER \
-dDELAYBIND \
-dWRITESYSTEMDICT \
-dSIMPLE \
/path/to/ps2ascii.ps \
input.ps \
-c quit
パラメータが定義されていない場合-dSIMPLE
、各出力行には、使用されているフォントとフォント サイズに関する純粋なテキスト コンテンツ以外の追加情報が含まれます。
そのパラメーターを に置き換えると、使用され-dCOMPLEX
ている色と画像に関する追加情報が得られます。
このユーティリティの詳細については、 ps2ascii.ps内のコメントを参照してください。使い心地は良くありませんが、私にとっては必要なほとんどの場合に機能しました....
pdftotext
CLI ユーティリティ (Ghostscript より快適)テキスト抽出を行うより快適な方法: を使用しますpdftotext
(Windows だけでなく、Linux/Unix または Mac OS X でも使用できます)。このユーティリティは、Poppler または XPDF に基づいています。これはあなたが試すことができるコマンドです:
pdftotext \
-f 13 \
-l 17 \
-layout \
-opw supersecret \
-upw secret \
-eol unix \
-nopgbrk \
/path/to/your/pdf
- |less
これにより、ページ範囲 13 (最初のページ) から 17 (最初のページ) が表示され、二重パスワードで保護された名前付き PDF ファイルのレイアウトが保持されます (ユーザーと所有者のパスワードsecretおよびsupersecret を使用)。 PDFページ間に改ページを挿入し、lessを介してパイプします...
pdftotext -h
利用可能なすべてのコマンドライン オプションを表示します。
もちろん、どちらのツールも PDF のテキスト部分 (存在する場合) に対してのみ機能します。ああ、数式もうまく機能しません... ;-)
pdftotext
アップデート:
Popplerの最近のバージョンには、OPが要求したように、「PDFの一部(座標を使用)」pdftotext
ページを抽出するオプションがあります。パラメータは次のとおりです。
-x <int>
: トリミング領域の左上隅の x 座標-y <int>
: トリミング領域の左上隅の y 座標-W <int>
: トリミング領域の幅 (ピクセル単位) (デフォルトは 0)-H <int>
: トリミング領域の高さ (ピクセル単位) (デフォルトは 0)-layout
パラメーターと一緒に使用する場合に最適です。
mutool draw
コマンドはテキストを抽出することもできますクロスプラットフォームのオープン ソースMuPDFアプリケーション (Ghostscript も開発している同じ会社によって作成された) には、コマンド ライン ツールmutool
. このツールを使用して PDF からテキストを抽出するには、次を使用します。
mutool draw -F txt the.pdf
抽出されたテキストを に出力し<stdout>
ます。-o filename.txt
ファイルに書き込む場合に使用します。
pdflib製品ファミリのテキスト抽出ツールキットであるTETは、PDF ファイル内のテキスト コンテンツの xy 座標 (およびその他の多く) を見つけることができます。TET にはコマンドライン インターフェイスがあり、私が知っているすべてのテキスト抽出ツールの中で最も強力です。(合字も処理できます...) 彼らのウェブサイトからの引用:
ジオメトリ
TET は、ページ上の位置、グリフの幅、テキストの方向など、テキストの正確な測定基準を提供します。ページ上の特定の領域を除外したり、テキスト抽出に含めたりすることができます。たとえば、ヘッダーとフッターまたは余白を無視します。
私の経験では、想像できる最も単純な CLI インターフェイスを備えているわけではありません。
さらに多くのオプションがあります。
podofotxtextract
(CLI ツール) PoDoFo プロジェクトから (オープン ソース)calibre
(通常、電子書籍、オープン ソースを処理する GUI プログラム) には、PDF からテキストを抽出できるコマンドライン オプションがあります。AbiWord
(GUI ワード プロセッサ、オープン ソース) は、PDF をインポートして、そのファイルを .txt として保存できます。abiword --to=txt --to-name=output.txt input.pdf
Debenu Quick PDF Libraryは、ページ上の定義された領域からテキストを抽出できます。SetTextExtractionArea関数を使用すると、x 座標と y 座標を指定でき、領域の幅と高さも指定できます。
次に、この直後にGetPageText関数を呼び出して、定義された領域からテキストを抽出できます。
C# を使用した例を次に示します (ただし、ライブラリはマルチプラットフォームであり、さまざまなプログラミング言語で使用できます)。
DPL.LoadFromFile(@"Sample.pdf", "");
DPL.SetOrigin(1); // Sets 0,0 coordinate position to top left of page, default is bottom left
DPL.SetTextExtractionArea(35, 35, 229, 30); // Left, Top, Width, Height
string ExtractedContent = DPL.GetPageText(8);
Console.WriteLine(ExtractedContent);
GetPageText を使用すると、その領域にあるテキスト、またはその領域にあるテキストだけでなく、名前、色、サイズなどのテキストのフォントに関する情報も返すことができます。