如何从Perl中的PDF文件中提取文本?

时间:2009-07-16 11:39:14

标签: perl pdf text extract

我正在尝试使用Perl从PDF文件中提取文本。我一直在命令行使用pdftotext.exe(即使用Perl system函数)从PDF文件中提取文本,这种方法运行正常。

问题是我们在PDF文件中有像α,β和其他特殊字符的符号,这些符号没有显示在生成的txt文件中。在文本中随机添加的空格也很少。

是否有更好,更可靠的方法从PDF文件中提取文本,使得文本将包含所有符号,如α,β等,文本将与PDF中的文本完全匹配(即没有额外的空格)?

9 个答案:

答案 0 :(得分:20)

这些模块可以实现pdf中的提取文本

PDF::API2

CAM::PDF

CAM::PDF::PageText

来自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,它可以完美地工作。

http://www.unixuser.org/~euske/python/pdfminer/index.html

答案 6 :(得分:1)

詹姆斯希利是对的。在尝试了CAM :: PDF和PDF :: API2之前,我已经取得了一些成功的阅读文本,下载pdftotext对于我的一些实现非常有用。

如果在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。它是一个库,但我认为它还附带了一些文本提取工具。