我正在尝试使用Perl从PDF文件中提取文本。我一直在命令行使用pdftotext.exe
(即使用Perl system
函数)从PDF文件中提取文本,这种方法运行正常。
问题是我们在PDF文件中有像α,β和其他特殊字符的符号,这些符号没有显示在生成的txt文件中。在文本中随机添加的空格也很少。
是否有更好,更可靠的方法从PDF文件中提取文本,使得文本将包含所有符号,如α,β等,文本将与PDF中的文本完全匹配(即没有额外的空格)?
答案 0 :(得分:20)
这些模块可以实现pdf中的提取文本
来自CPAN
my $pdf = CAM::PDF->new($filename);
my $pageone_tree = $pdf->getPageContentTree(1);
print CAM::PDF::PageText->render($pageone_tree);
此模块尝试从PDF页面中提取顺序文本。这不是一个强大的过程,因为PDF文本以图形方式按任意顺序排列。该模块使用一些启发式方法来尝试猜测其他文本旁边的文本,但可能会被下标,非水平文本,字体更改,表单字段等轻易欺骗。
除了这些免责声明之外,它对于从简单的PDF文件中快速转储文本非常有用。
答案 1 :(得分:4)
您可能永远无法找到适合您问题的解决方案。 PDF格式可以将文本编码为应用了字体的ASCII值,也可以将其编码为位图。如果创建PDF的工具决定将特殊字符编码为位图,那么您将失去运气(当然,除非您想进入OCR解决方案)。
答案 2 :(得分:3)
我不是Perl用户,但我想你很难找到比pdftotext更好的自由文本提取器。
pdftotext通常可以很好地识别非ASCII字符,是否可以将它们解压缩,但是您用来查看文本文件的应用程序是不是使用了正确的编码?如果windows上的pdftoetxt与我的linux系统上的pdftoetxt相同,那么它默认导出为utf-8。
答案 3 :(得分:3)
有getpdftext.pl; CAM::PDF的一部分。
答案 4 :(得分:3)
好吧,我尝试了2-3个perl模块,比如CAM :: PDF,API2,但问题仍然存在!我正在解析包含主页的pdf文件。 Cam或API2非常好地解析纯文本。但是,他们无法解析代码段[代码段通常采用不同的字体和代码。编码比纯文本]。
答案 5 :(得分:1)
PDF2TXT.py 这就是我使用的,虽然它是Python,它可以完美地工作。
答案 6 :(得分:1)
如果在Windows上访问并下载xpdf预编译的二进制文件: http://www.foolabs.com/xpdf/download.html
然后,如果你需要在perl使用系统中运行它,例如: system(“C:\ Utilities \ xpdfbin-win-3.04 \ bin64 \ pdftotext.exe $ saveName”);
其中$ saveName是PDF文件的完整路径。
希望 为您留下一个文本文件,您可以在perl中打开并解析。
答案 7 :(得分:0)
我尝试了这个模块,它适用于pdf ..
的特殊字符!/usr/bin/perl
use strict;
use warnings;
use PDF::OCR::Thorough;
my $filename = "pdf.pdf";
my $pdf = PDF::OCR::Thorough->new($filename);
my $text = $pdf->get_text();
print "$text";
答案 8 :(得分:-2)
看看PDFBox。它是一个库,但我认为它还附带了一些文本提取工具。