一部の PDF ファイルは、テキストを正常に抽出するために重要な特別な情報なしで生成されます。Adobeツールでも。基本的に、このようなファイルには、グリフから文字へのマッピング情報が含まれていません。
このようなファイルは問題なく表示および印刷されますが (文字の形状が適切に定義されているため)、それらのテキストを適切にコピー/抽出することはできません (使用されているグリフ/形状の意味に関する情報がないため)。
たとえば、「最小ファイル サイズ」プリセットが使用されている場合、Distiller はそのようなファイルを生成します。
OCR 以外に、そのようなファイルからテキストを取得する方法はありません。最近、.NET で PDF を OCR する方法のガイドを公開しました。
元の回答の補足
元の回答では、「使用されているグリフ/形状の意味に関する情報」に言及していました。この情報は、テーブルと呼ばれる PDF 構造に含まれている必要があり/ToUnicode
ます。このようなテーブルは、サブセットとして埋め込まれ、非標準 ( Custom
) エンコーディングを使用するすべてのフォントに必要です。
テキスト コンテンツの抽出可能性をすばやく評価するために、pdffonts
コマンド ライン ユーティリティを使用できます。これにより、PDF で使用される各フォントに関する一連の項目が表形式で出力されます。テーブルの存在は、/ToUnicode
列見出し で示されますuni
。
いくつかの出力例:
$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-good.pdf
name type encoding emb sub uni object ID
------------------------ ----------- ---------- --- --- --- ---------
BAAAAA+Helvetica TrueType WinAnsi yes yes yes 12 0
CAAAAA+Helvetica-Bold TrueType WinAnsi yes yes yes 13 0
$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-bad1.pdf
name type encoding emb sub uni object ID
------------------------ ----------- ---------- --- --- --- ---------
BAAAAA+Helvetica TrueType WinAnsi yes yes no 12 0
CAAAAA+Helvetica-Bold TrueType WinAnsi yes yes no 13 0
$ kp@mbp:git.PDF101.angea> pdffonts handcoded/textextract/textextract-bad2.pdf
name type encoding emb sub uni object ID
------------------------ ----------- ---------- --- --- --- ---------
BAAAAA+Helvetica TrueType WinAnsi yes yes yes 12 0
CAAAAA+Helvetica-Bold TrueType WinAnsi yes yes no 13 0
good.pdf
では、両方のフォントに対応するテーブルがあるため、両方のフォントのテキスト コンテンツを正しく抽出できます/ToUnicode
。
bad1.pdf
と の場合bad2.pdf
、テキストの抽出は 2 つのフォントのうち 1 つのみで成功し、もう 1 つのフォントでは失敗します。これは、1 つのフォントだけに/ToUnicode
テーブルがあるためです。
私、Kurt Pfeifleは最近、PDF ソース コード内の既存の、バグのある、操作された、または欠落しているテーブルの影響を示すために、一連の手作業でコーディングされた PDF ファイルを作成しました。/ToUnicode
これらの PDF は広範囲にコメントされており、テキスト エディターを使用して調べるのに適しています。上記のpdffonts
出力例は、これらの手作業でコーディングされたファイルを使用して作成されました。(別の結果を示す PDF が他にもいくつかあります。興味のある読者は、それらを調べてみてください...)