我正在嘗試將pdf文件的文本內容讀取到Perl變量中。從其他SO問題/答案我得到的意義,我需要使用CAM::PDF
。這裏是我的代碼:在閱讀Perl中的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";
我試着在this pdf file上運行這個。 Perl沒有報告錯誤。第一份印刷聲明有效;它會打印出「2頁」,這是本文檔中正確的頁數。
下一個打印語句不會返回任何可讀的內容。以下是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文件,但我認爲,因爲我可以使用Acrobat輕鬆複製和粘貼來自PDF文件的文本,所以它必須被識別爲文本而不是圖像,所以我希望這意味着我可以提取它與Perl。
任何指導將不勝感激。
好的。如果我在Acrobat中打開該文件並保存爲文本文件,則會正確地導出文本。正因爲如此,我認爲必須有某種方式來用Perl來提取它。但是,Acrobat是否理解編碼和CAM :: PDF不兼容? – itzy 2011-12-30 20:06:50
是的,我相信就是這樣。看到我上面超鏈接的頁面,它描述了子集編碼的樣子。沒有任何保證的方式來恢復字符是什麼,除了渲染和做OCR(儘管一些啓發式可能工作,如標題爲「找出它」的部分所述)。 – theglauber 2012-01-03 16:29:45