微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么我无法使用CAM :: PDF解析非比例文本?

如何解决为什么我无法使用CAM :: PDF解析非比例文本?

| 解析页面编号时。在http://sfdoccentral.symantec.com/sf/5.1/linux/pdf/vxfs_admin.pdf的22中,我能够解析除“ 0”以外的所有单词,因为其编码样式和/或字体与普通的纯文本不同。 有关详细信息,请参见附件的PDF页面。 请找到我的代码:-
`#!/usr/bin/perl
use CAM::PDF;
my $file_name=\"vxfs_admin_51sp1_lin.pdf\";
my $pdf = CAM::PDF ->new($file_name);
my $no_pages=$pdf->numPages();
print \"$no_pages\\n\";
for(my $i=1;$i<$no_pages;$i++){
my $page = $pdf->getPageText($i);
//for page no. 22
//if($i==22){ 
print $page;
//}
}`
    

解决方法

        PDF不存储您阅读的语义文本,而是使用字符代码,这些字符代码映射到特定字体中的字形(绘制的字符)。但是,代码标志符号映射通常会匹配常见的字符集(例如ISO-8859-1或UTF-8),因此代码是人类可读的。这是您能够解析的所有文本的情况,尽管有时奇数字符(主要是标点符号)也是“错误的”。 不幸的是,文档中\“ mount_vxfs \”的文本编码方式完全不同,导致明显的垃圾。如果您好奇,可以通过在代码中用getPageContent()代替getPageText()来查看实际的内容。 为了将PDF文本转换回有意义的字符,PDF阅读器必须跳过带有许多转换表(包括所谓的CMap)的箍圈。因为这是很多编程工作,所以许多简单的库都选择不实施它们。 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页上。)     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。