我正在尝试做一些我认为简单的搜索和替换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
显然我错过了很简单的事情。
答案 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正好完成你所做的。你可以参考它们。