如何将pdf文件的内容提取到字符串变量中

时间:2019-01-28 14:03:08

标签: perl

我想知道如何提取一个pdf内容并将其插入数据库中(perl脚本)。

示例:我有一个pdf文件(请参见下面的示例:MyPdfFile),我想从该文件中提取商品代码项(A和B),数量(3和2)以及价格(10和20),以及将它们插入数据库(表:ORDERS)。

MyPdfFile

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

简短地进行扫描,我发现没有现有的Perl模块能够以最小的麻烦完全满足您的要求。但是,在开源平台上,Poppler带来了实用程序pdftotext。没有什么能阻止Perl通过

调用pdftotext二进制文件
my $output_of_pdftotext = `pdftotext $pdf_file`;

my @output_of_pdftotext = `pdftotext $pdf_file`;

如果您不打算泛化您的解决方案,而只需要解决您当前的问题(我认为这是您目前的方向,就您使用的Perl而言,它在这种用法上很出色),那么我的实用建议可能是您安装了Poppler的pdftotext实用程序,在PDF上手动尝试了一下,然后查看了输出结果。然后,考虑到Perl的最小流利性,您可以让Perl脚本模式匹配输出并根据需要重新格式化。

字符编码

接着,OP问:

  

[T] o在stdout poppler上提取pdf的内容效果很好,但是我对显示包含重音符号的某些单词有一个小问题,例如:标准输出中的désignation(pdf)=DÃsignation?

utf-8字符编码使用两个字节C3 A9(十六进制)对“é”进行编码。 iso-8859-1编码使用相同的两个字节编码“Ô。您的“设计”显然编码为utf-8,这是正常的,因此您的标准输出是正确的。但是,显然,您的终端要显示iso-8859-1。如果是这样,则您的终端会误解标准输出。

您可以告诉pdftotext使用iso-8859-1(我将其留给您作为练习来阅读手册页并弄清楚如何做)。但是,我建议您改为将终端设置为显示utf-8。

如何将终端设置为显示utf-8?这取决于您使用的终端。我不知道你的终端。在我的终端上,更改编码很容易。可能需要花几分钟的时间来探索和试验终端的首选项和设置,才能告诉您如何更改为utf-8。