3

pdftotextを使用してPDFからテキストを抽出しています。私もGhostscriptでこれを行いました。最近、ユーティリティプロバイダーがPDFを変更したため、PDFの一部がこれらのメソッドで抽出されていません。具体的には、期日と合計期日がありません。リーダーでPDFを開くと、「欠落している」テキストを強調表示してコピーし、外部エディターに貼り付けることができます。それをAcrobatProで開き、コンテンツを表示すると([表示]->[表示/非表示]->[ナビゲーションペイン]->[コンテンツ])、必要なテキストがそこにあります。手動でコピーして貼り付けることなく、どうすれば取り出すことができますか?(これは何千ものPDFで行うため、オプションではありません)?

これが私が扱っているものの例です。すべての機密データを削除しました:

PDFへのリンク

編集:これを投稿した後、ファイル(Googleドライブでホストされている)へのリンクをたどると、ページ上のほとんどのテキストを選択してコピーできるようになりますが、不足しているものはできません。ファイルをダウンロードすると、PDFリーダーで不足しているテキストを選択できます。

4

3 に答える 3

2

Ghostscriptの最近のリリースには、おそらく試す価値のあるtxtwriteデバイスがあります。

于 2013-02-20T17:29:06.453 に答える
1

gitからGhostscriptの最新の未リリースバージョンを取得してビルドすることで、これを解決しました。これで、txtwriteデバイスが必要なものを正確に提供してくれます。私を正しい方向に導いてくれた彼の答えとコメントをくれたchrislに感謝します。

于 2013-03-01T18:19:48.543 に答える
0

データを抽出するための非常にハッキーな方法がありますが、8.51や8.62などの古いバージョンのghostscriptでのみ機能します。古いバージョンのghostscriptでは、PDFコマンドは/lib/pdf_ops.psで定義されています。新しいバージョンは別のことを行います。

バージョン8.62のテスト済みバージョンは、こちらから入手できます。

http://sourceforge.net/projects/ghostscript/files/GPL%20Ghostscript/8.62/gs862w32.exe/download

後のテキストは、各定義の先頭にを使用/Tj {} def/TJ {} defて、を追加することによって印刷されます。dup ==(これはもっと洗練されたものにすることができます)フォントの警告メッセージについても心配する必要はありませんでしたが、データがファイルに書き込まれると、これらは除外されます。

カーニングが行われているため、一部の単語は断片と個々の文字に分割されます。時間があれば、これもフィルタリングできます。

pdf_ops.psから/Tjを変更/Tj{dup == 0 0 moveto Show settextposition} bdef

pdf_ops.psから/TJを変更

/TJ { dup == 
  0 0 moveto {
    dup type /stringtype eq {
      Show
    } { -1000 div
      currentfont /ScaleMatrix .knownget { 0 get mul } if
      0 Vexch rmoveto
    } ifelse
  } forall settextposition
} bdef

出力

(Help a neighbor within your county each month by contributing to The Salvation )
(Army's Project SHARE and Georgia Power will match your gift. To help, simply check )
($1, $2, $5, or $10 on the return portion of this bill. Starting next month, your pledge )
(amount will be included on your monthly bill.)
(Our business offices will be closed on December 24 and 25 for Christmas and January )
(1 for New Year's Day. In case of an emergency, please call us at the number on your )
(bill 24 hours a day, 7 days a week.)
(PLEASE KEEP THIS PORTION FOR YOUR RECORDS.)
(PLEASE RETURN THIS PORTION WITH YOUR PAYMENT, MAKING SURE THE RETURN ADDRESS SHOWS IN THE ENVELOPE WINDOW.)
(Account Number)
(Mail To:)

追記は面白くないですか?

于 2013-02-21T01:30:22.240 に答える