如何在Perl中解析.pdf文件?

如何在Perl中解析.pdf文件?,perl,pdf,Perl,Pdf,如何在Perl中解析.pdf文件? perl是更有效的还是我应该使用其他语言?看看,特别是,如果你想做OCR,请看,我不知道有哪个模块可以解析,也就是说,如果你想从中提取文本。有许多模块可以让您操作它们。试试。我个人使用CAM::PDF my $doc=CAM::PDF->new($fileName) || die "$CAM::PDF::errStr\n"; CAM::PDF>asciify(/$pdfString);` pdf不是为解析而设计的,而是为显示/打印而设计的-因此,

如何在Perl中解析.pdf文件?
perl是更有效的还是我应该使用其他语言?

看看,特别是,如果你想做OCR,请看,我不知道有哪个模块可以解析,也就是说,如果你想从中提取文本。有许多模块可以让您操作它们。试试。

我个人使用CAM::PDF

my $doc=CAM::PDF->new($fileName) || die "$CAM::PDF::errStr\n"; CAM::PDF>asciify(/$pdfString);`

pdf不是为解析而设计的,而是为显示/打印而设计的-因此,任何东西都是尝试和错误的,如果所有东西都是图形,则很可能无法解析。
一个好的指标是您是否可以将pdf中的内容复制并粘贴到编辑器中。如果这样做有效,那么您就是在做生意。

当我想从PDF中提取文本时,我会使用
-xml
输出选项将其馈送到
pdftohtml
(的一部分)。这将生成一个XML文件,我使用它(或除XML::Simple之外的任何其他XML解析器)进行解析

这相当简单。PDF中的每个页面都有一个
元素,其中包含描述所用字体的
元素,以及每行文本的
元素。
元素可能包含用于粗体和斜体文本的
标记(这就是XML::Simple无法正确解析它的原因)


您确实需要使用
标记的
top
left
属性来获得正确的顺序,因为它们不一定是按从上到下的顺序发出的。坐标系在页面的左上角有0,0,向下和向右为正。维度以PostScript点(每英寸72点)表示。

没有好点,@David--另一方面,Perl非常擅长解析文本文件。它可能不是解析PDF的最佳工具。Perl完全可以解析PDF。相关:并且这个代码片段不完整-$pdfString来自哪里,我假设/是一个输入错误?与“CAM::PDF>Ascify”一样,如果在PDF中有一个数据表,XML是否可以轻松地告诉您数据列的开始和结束位置,或者它只是一个大文本../text节点,您仍然需要猜测pdftotext转换文本文档中的列边界是什么?这取决于PDF的生成方式。我希望每个单元格有一个文本节点,但我想我从来没有尝试过这样的文档。我在一个文档上测试过它,在大多数情况下,每个单元格都是一个文本节点。但有时,第一列会与同一文本节点中的下一列合并。幸运的是,这对我来说很容易分开,但我还没有仔细研究,以找到其他问题…但它看起来很有希望…谢谢。