首页 文章

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

提问于
浏览
18

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

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

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

9 回答

  • 3

    这些模块可以实现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文件中快速转储文本很有用 .

  • 20

    您可能永远无法为您的问题找到合适的解决方案 . PDF格式可以将文本编码为应用了字体的ASCII值,也可以将其编码为位图 . 如果创建PDF的工具决定将特殊字符编码为位图,那么您将失去运气(当然,除非您想进入OCR解决方案) .

  • 3

    我不是Perl用户,但我想你很难找到比pdftotext更好的自由文本提取器 .

    pdftotext通常可以很好地识别非ASCII字符,是否可以将它们解压缩,但是您用来查看文本文件的应用程序是不是使用了正确的编码?如果windows上的pdftoetxt与我的linux系统上的pdftoetxt相同,那么它默认导出为utf-8 .

  • 1

    getpdftext.pl; CAM::PDF的一部分 .

  • 4

    好吧,我尝试了2-3个perl模块,比如CAM :: PDF,API2,但问题仍然存在!我正在解析包含主页的pdf文件 . Cam或API2非常好地解析纯文本 . 但是,它们无法解析代码段[代码段通常采用与纯文本不同的字体和编码] .

  • 3

    PDF2TXT.py这是我使用的,虽然它是Python,它可以完美地工作 .

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

  • 0

    詹姆斯希利是对的 . 在尝试了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中解析 .

  • 1

    我试过这个模块,它适用于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";
    
  • -2

    看看PDFBox . 它是一个库,但我认为它还附带了一些文本提取工具 .

相关问题