Perl CAM :: PDF不接受文件名变量

时间:2014-04-03 16:17:12

标签: perl pdf

我使用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文件。 请帮助我。

2 个答案:

答案 0 :(得分:0)

如果您的循环不起作用,那么您应该添加调试以查看您是否实际迭代了这些文件。您遗失的一件事是错误检查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");的手动呼叫有效,则错误应该在上面。

答案 1 :(得分:0)

我知道这已经很老了,但是我遇到了同样的问题,实际上是一个错误。查找“ CAM-PDF的错误#97560:解码路径失败”。

总而言之,该错误说:“看起来像将解码后的字符串传递给CAM :: PDF构造函数,该模块无法处理该流,因为解码继承到了 流。”

看起来并非所有版本的perl都这样。就我而言,这是在v5.16.3上发生的,但不是在v5.10上发生的。

所以我要做的是手动编码文件名,然后将其发送到CAM :: PDF-> new,如下所示:

Encode::encode("utf8", $filename);

那对我有用!