我有一个很大的PDF(〜20mb,160mb。未压缩)。我需要查找并替换其中的文本,大约1000次。这是我尝试过的。
通过SVG
=>输出错误,可能是由于SVG中存在一些几何变换矩阵,导致文本无法很好地呈现
创建〜1000 sed命令
=>时间太长。每个sed命令大约需要20秒,导致数小时的处理
逐行读取并替换
=>由于未压缩的PDF中存在数据流,因此新文件显然已损坏(将二进制文件写为文本行)
我想知道是否有可能逐行读取未压缩的PDF,但直接在其中进行编辑。我该怎么办?
我已经搜索过perl内联编辑,但是它可以一次对整个文件进行更改,而我想编辑一行。
欢迎其他想法;)
根据建议,我使用了CAM :: PDF,这是最有效,最简单的解决方案
2.和3之间没有区别。Sed逐行读取输入文件,并将更改的行写入输出文件。如果您将-i
开关喂给它,则sed
只需打开输入文件,然后取消链接(即是这样rm
做),然后打开具有相同名称的输出文件并写入。而已。不涉及魔术。所以,如果你被Perl损坏的内容,而不是由sed
你做不同的事情比sed
。主要区别在于,您可以使Perl脚本的方式更快,以替换许多字符串。请参阅在带有csv的文本文件上使用sed
主要技巧是您可以编译正则表达式以进行搜索和替换,这可以在线性时间内工作。
my %replace = ( foo => 'bar' );
my $re = join '|', map quotemeta, keys %replace;
$re = qr/($re)/;
while (<>) {
s/$re/$replace{$1}/g;
}
您可以将其与您的原始方法一起使用,但是我建议在Perl脚本中使用它,该脚本允许您保留regexp并替换pdf文件之间的哈希。您也可以尝试将其与结合使用CAM::PDF
。其中包含示例脚本changepagestring.pl
。您还可以查看PDF::API2
哪些将需要更多的工作,但可能会提供更好的结果。但是请记住,PDF格式不适合修改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句