使用CAM :: PDF进行搜索和替换

时间:2012-11-13 18:01:04

标签: perl pdf

我正在尝试做一些我认为简单的搜索和替换pdf文件中的标记。

我有这个pdf文件:http://servera.service.com/LABELS.pdf

我正在使用这个带有CAM :: PDF的简单perl脚本来获取页面内容并做一个简单的事情 搜索和替换令牌。

$pdf = CAM::PDF->new('LABELS.pdf');

$page = $pdf->getPageContent(1);

$page =~ s/\\045\\045Carrier_Tracking_Number\\045\\045/ABE1234567890/;

$pdf->setPageContent(1, $page);

$pdf->cleanoutput('after.pdf');

exit;

我得到的是http://servera.service.com/after.pdf

当我转储页面内容时,这就是替换前的内容

http://servera.service.com/before.txt

这就是替换后我所拥有的

http://servera.service.com/after.txt

显然我错过了很简单的事情。

1 个答案:

答案 0 :(得分:0)

在我看来,你没有做错任何事情,代码也按预期运行。 但是,我并没有说这些数字'1234567890',你被迫写入文档,将完全显示它们在PDF上的样子。

与字符'%'的原因相同,您将其替换为'\ 045'而不是通常'%'。 PDF文档以CMap(Adobe内置编码表)编码。 如果你用“\ 115”替换字符串,你会得到一个'M','\ 116'是'N','\ 117'是'O',但我不知道'\'118'或' P'是。

'getPageContent'返回页面的整个布局内容。 我建议你使用'getPageText'而不是'getPageContent'来获得一个真正的字符串。 然后你可以正常替换或处理字符串。

my $textpage = $pdf->getPageText(1);
$textpage =~ s/%%Carrier_Tracking_Number%%/ABD1234567890/;

请记住,一旦作为字符串取出,您将永远不会以原始文档格式将其恢复。

P.S。在CAM :: PDF模块中,作者还提供了两个字符串更改脚本: changepdfstring.pl changepagestring.pl 。 changepdfstring.pl更改元数据,changepagestring.pl正好完成你所做的。你可以参考它们。