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

lnlaulya  于 2023-10-24  发布在  Perl
关注(0)|答案(9)|浏览(230)

我试图使用Perl从PDF文件中提取文本。我一直在使用pdftotext.exe从命令行(即使用Perl system函数)从PDF文件中提取文本,这种方法工作正常。
问题是,我们在PDF文件中有符号,如α,β和其他特殊字符,这些字符不会显示在生成的txt文件中。此外,文本中随机添加了一些额外的空格。
有没有更好、更可靠的方法从PDF文件中提取文本,使文本包含所有符号,如α、β等,并且文本与PDF中的文本完全匹配(即没有额外的空格)?

fcg9iug3

fcg9iug31#

这些模块可以从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文件中快速转储文本非常有用。

dfty9e19

dfty9e192#

我不是Perl用户,但我想你会很难找到一个比pdftotext更好的免费文本提取器。
pdftotext通常识别非ASCII字符很好,有没有可能它正在提取它们,但你用来查看文本文件的应用程序没有使用正确的编码?如果windows上的pdftotext与我Linux系统上的相同,那么它默认为utf-8导出。

xnifntxz

xnifntxz3#

您可能永远不会得到一个合适的解决方案来解决您的问题。PDF格式可以将文本编码为ASCII值并应用字体,也可以将其编码为位图。如果创建PDF的工具决定将特殊字符编码为位图,那么您将不走运(当然,除非您想进入OCR解决方案)。

pjngdqdw

pjngdqdw5#

好吧,我尝试了2-3个Perl模块,如CAM::PDF,API 2,但问题仍然是一样的!我正在解析一个包含主页面的PDF文件。Cam或API 2可以很好地解析纯文本。但是,它们无法解析代码片段[代码片段通常采用与纯文本不同的字体和编码]。

ztyzrc3y

ztyzrc3y6#

James Healy是正确的。在尝试了CAM::PDF和PDF::API 2之后,我已经成功地阅读了前者的文本,下载pdftotext对我的许多实现都很好。
如果在Windows上,请到这里下载xpdf预编译的二进制文件:http://www.foolabs.com/xpdf/download.html
然后,如果您需要在perl中运行此命令,请使用system,例如:system(“C:\Utilities\xpdfbin-win-3.04\bin64\pdftotext.exe $saveName”);
其中$saveName是PDF文件的完整路径。
这 * 希望 * 留给你一个文本文件,你可以在perl中打开和解析。

dm7nw8vv

dm7nw8vv7#

我尝试了这个模块,它对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";
eaf3rand

eaf3rand8#

我在不同的PDF文件上进行了实验,

PDF::API2
CAM::PDF
CAM::PDF::PageText

而且它们都不可靠,我发现从PDF文件中解析文本的最好方法是使用旧poppler的pdftotext命令行实用程序。

pdftotext ~/your_pdf.pdf -

然后从Perl读取stdout并解析它。

- at the end means that pdftotext will output content of PDF file to stdout

我发现pdftotext可靠,能够阅读所有我必须测试的PDF中的文本。

7d7tgy0s

7d7tgy0s9#

看看PDFBox。它是一个库,但我认为它也带有一些工具来做文本提取。

相关问题