我使用了CAM::PDF模块从PDF文件中读取文本内容。在一个目录中,我有一个PDF文件列表,所以我使用了下面这样的代码来读取文本内容,它没有给我$text变量中的文本。
my $Filepath = "E:/test/";
opendir (DIR, $Filepath);
while (my $filename = readdir(DIR))
{
next if ($filename =~ m/^\./);
$filename = $Filepath.$filename;
my $pdf = CAM::PDF->new($filename);
my $text = $pdf->getPageText(1);
}但是如果我将文件名直接传递到CAM::PDF中,那么它就可以工作了。就像下面的代码
my $pdf = CAM::PDF->new("E:/test/test.pdf"); print $pdf->numPages(), " pages\n\n"; my $text = $pdf->getPageText(1);
但我的要求是从目录中一个接一个地读取PDF文件。在这方面请帮帮我。
发布于 2014-04-04 00:32:00
如果您的循环不工作,那么您应该添加调试,以查看您是否真的在迭代文件。您遗漏的一件事是对opendir调用进行错误检查。
my $Filepath = "E:/test/";
opendir my $dh, $Filepath or die "Unable to opendir: $!";
while (my $filename = readdir($dh))假设对opendir的调用没有失败并返回一条有用的错误消息,那么添加一条print语句来查看返回的内容。
{
next if $filename =~ /^\./;
print "$filename\n"; # Let's do some debugging.如果手动调用my $pdf = CAM::PDF->new("E:/test/test.pdf");有效,那么错误应该出在上面。
发布于 2018-07-03 01:44:14
我知道这是相当老的,但我也有同样的问题,它实际上是一个bug。查找"Bug #97560 for CAM-PDF: Fail with decoded paths“。
总之,bug说:“它看起来像是将解码的字符串传递给CAM::PDF构造函数,模块不能处理流,因为解码是继承到流中的。”
看起来并不是所有版本的perl都会发生这种情况。在我的例子中,它发生在v5.16.3,但不是v5.10。
因此,我所做的是在将文件名发送到CAM::PDF->new之前手动对其进行编码,如下所示:
Encode::encode("utf8", $filename);这对我很有效!
https://stackoverflow.com/questions/22843377
复制相似问题