首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl CAM::PDF不接受文件名变量

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

Stack Overflow用户
提问于 2014-04-04 00:17:12
回答 2查看 208关注 0票数 0

我使用了CAM::PDF模块从PDF文件中读取文本内容。在一个目录中,我有一个PDF文件列表,所以我使用了下面这样的代码来读取文本内容,它没有给我$text变量中的文本。

代码语言:javascript
复制
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文件。在这方面请帮帮我。

EN

回答 2

Stack Overflow用户

发布于 2014-04-04 00:32:00

如果您的循环不工作,那么您应该添加调试,以查看您是否真的在迭代文件。您遗漏的一件事是对opendir调用进行错误检查。

代码语言:javascript
复制
my $Filepath = "E:/test/";
opendir my $dh, $Filepath or die "Unable to opendir: $!";
while (my $filename = readdir($dh))

假设对opendir的调用没有失败并返回一条有用的错误消息,那么添加一条print语句来查看返回的内容。

代码语言:javascript
复制
{
    next if $filename =~ /^\./; 
    print "$filename\n"; # Let's do some debugging.

如果手动调用my $pdf = CAM::PDF->new("E:/test/test.pdf");有效,那么错误应该出在上面。

票数 0
EN

Stack Overflow用户

发布于 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之前手动对其进行编码,如下所示:

代码语言:javascript
复制
Encode::encode("utf8", $filename);

这对我很有效!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22843377

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档