我正在尝试将pdf文件的文本内容读取到Perl变量中。从其他问答中,我得到了我需要使用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";我试过在this pdf file上运行它。Perl没有报告错误。第一个print语句起作用;它打印"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文件,但我认为因为我可以使用Acrobat轻松地复制和粘贴PDF文件中的文本,所以它必须被识别为文本而不是图像,所以我希望这意味着我可以用Perl提取它。
任何指导都将不胜感激。
发布于 2011-12-30 03:27:07
PDF可以有不同种类的内容。例如,PDF可能根本没有任何可读文本,只有位图和图形内容。您链接到的PDF中包含压缩数据。使用文本编辑器打开它,您将看到内容在"/Filter/FlateDecode“块中。也许CAM::PDF不支持这一点。在谷歌FlateDecode上搜索一些想法。
进一步研究该PDF,我发现它还使用了带有自定义编码的嵌入式字体子集。即使CAM::PDF处理压缩,自定义编码也可能是抛弃它的原因。这可能会有所帮助:Web page from a software company, describing the problem
发布于 2011-12-30 02:11:21
我非常确定问题不是出在perl代码上,而是出在PDF文件上。我在我自己的一个PDF文件上运行了相同的脚本,它工作得很好。
https://stackoverflow.com/questions/8611530
复制相似问题