1

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

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

我正在使用这个简单的 perl 脚本和 CAM::PDF 来获取页面内容并对令牌进行简单的搜索和替换。

$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

显然我错过了一些非常简单的东西。

4

1 回答 1

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/;

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

PS 在模块 CAM::PDF 中,作​​者还提供了两个字符串更改脚本:changepdfstring.plchangepagestring.pl。changepdfstring.pl 更改元数据,changepagestring.pl 正是您所做的。你可以参考他们。

于 2013-04-04T16:44:21.887 回答