PDF не хранит семантический текст, который вы прочитали, а использует коды символов, которые отображаются на глифы (закрашенные символы) в определенном шрифте. Однако часто сопоставление код-глиф соответствует общим наборам символов (таким как ISO-8859-1 или UTF-8), так что коды удобочитаемы человеком. Это относится ко всему тексту, который вы смогли проанализировать, хотя иногда нечетный символ, в основном пунктуация, также «неправильный».
Текст для "mount_vxfs" в вашем документе закодирован совершенно по-другому, к сожалению, что приводит к очевидному мусору. Если вам интересно, вы можете увидеть, что там на самом деле, заменив getPageText () на getPageContent () в вашем коде.
Чтобы преобразовать PDF-текст обратно в значимые символы, читатели PDF должны пройти через несколько таблиц преобразования (включая так называемые CMaps). Поскольку это большая работа по программированию, многие более простые библиотеки предпочитают не реализовывать их. Так обстоит дело с CAM :: PDF.
Если вы просто заинтересованы в разборе текста (не редактировании его), то я с успехом использую следующую технику:
Получить xpdf (http://foolabs.com/xpdf) или Poppler (http://poppler.freedesktop.org/). Poppler - более новая ветвь xpdf). Если вы используете * nix, будет доступен пакет.
Используйте инструмент командной строки 'pdftotext' для извлечения текста из файла, по страницам или сразу.
Пример: * * один тысяча двадцать-одна
#!/usr/bin/perl
use English;
my $file_name="vxfs_admin.pdf";
open my $text_fh, "/usr/bin/pdftotext -layout -q '$file_name' - 2>/dev/null |";
local $INPUT_RECORD_SEPARATOR = "\f"; # slurp a whole page at a time
while (my $page_text = <$text_fh>) {
# this is here only for demo purposes
print $page_text if $INPUT_LINE_NUMBER == 19;
}
close $text_fh;
(Примечание. Документ, который я получил с помощью вашей ссылки, немного отличается; бит «оскорбительный» находится на стр. 19.)