Проблемы с чтением текста из PDF в Perl - PullRequest
4 голосов
/ 23 декабря 2011

Я пытаюсь прочитать текстовое содержимое файла PDF в переменную Perl. Из других SO вопросов / ответов я понимаю, что мне нужно использовать CAM::PDF. Вот мой код:

#!/usr/bin/perl -w

use CAM::PDF;
my $pdf = CAM::PDF->new('1950-01-01.pdf');
print $pdf->numPages(), " pages\n\n";

my $text = $pdf->getPageText(1);
print $text, "\n";

Я попытался запустить это на этом файле PDF . Perl не сообщает об ошибках. Первое печатное заявление работает; он печатает «2 страницы», то есть правильное количество страниц в этом документе.

Следующая инструкция print не возвращает ничего читабельного. Вот как выглядит вывод в Emacs:

2 pages

^A^B^C^D^E^C^F^D^G^H
^D^A^K^L^C^M^D^N^C^M^O^D^P^C^Q^Q^C      ^D^R^K^M^O^D ^A^B^C^D^E
^F^G^G^H^E
^K^L
^M^N^E^O^P^E^O^Q^R^S^E
.... more lines with similar codes ....

Есть ли что-то, что я могу сделать, чтобы заставить эту работу? Я не очень хорошо понимаю файлы pdf, но я подумал, что, поскольку я могу легко копировать и вставлять текст из файла PDF с помощью Acrobat, он должен распознаваться как текст, а не как изображение, поэтому я надеялся, что это означает, что я смогу извлечь его с Perl.

Любое руководство будет высоко ценится.

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

PDF-файлы могут иметь различные виды контента.PDF может вообще не иметь читаемого текста, например, только растровые изображения и графическое содержимое.PDF-файл, на который вы ссылаетесь, содержит сжатые данные.Откройте его в текстовом редакторе, и вы увидите, что содержимое находится в блоке "/ Filter / FlateDecode".Возможно, CAM :: PDF не поддерживает это.Google FlateDecode для нескольких идей.

Глядя дальше в этот PDF, я вижу, что он также использует встроенные подмножества шрифтов с пользовательскими кодировками.Даже если CAM :: PDF обрабатывает сжатие, пользовательская кодировка может быть тем, что выбрасывает его.Это может помочь: Веб-страница от компании-разработчика программного обеспечения, описывающая проблему

2 голосов
/ 29 декабря 2011

Я вполне уверен, что проблема не в вашем Perl-коде, а в PDF-файле.Я запустил один и тот же скрипт на одном из моих собственных файлов PDF, и он отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...