Некоторые PDF-файлы создаются без специальной информации, которая имеет решающее значение для успешного извлечения из них текста. Даже средствами Adobe. По сути, такие файлы не содержат информации о сопоставлении глифа с символом.
Такие файлы будут нормально отображаться и печататься (поскольку формы символов определены правильно), но текст из них не может быть правильно скопирован/извлечен (поскольку нет информации о значении используемых глифов/форм).
Например, Distiller создает такие файлы, когда используется предустановка «Наименьший размер файла».
Боюсь, кроме OCR нет другого способа извлечь текст из таких файлов. Недавно мы опубликовали руководство по распознаванию PDF-файлов в .NET.
Дополнение к исходному ответу
В исходном ответе упоминалась информация о значении используемых глифов/фигур. Эта информация должна содержаться в структуре 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
извлечение текста удается только для одного из двух шрифтов и не удается для другого, потому что только один шрифт имеет таблицу /ToUnicode
.
Я, Курт Пфайфле, недавно создал серия PDF-файлов с ручным кодированием для демонстрации влияния существующих, ошибочных, измененных или отсутствующих /ToUnicode
таблиц в исходный код PDF. Эти PDF-файлы подробно прокомментированы и подходят для изучения с помощью текстового редактора. Приведенные выше pdffonts
выходных примеров были созданы с помощью этих закодированных вручную файлов. (Есть еще несколько PDF-файлов с другими результатами, которые заинтересованный читатель может захотеть изучить...)
person
Bobrovsky
schedule
30.08.2012