【发布时间】:2015-03-27 00:10:11
【问题描述】:
我有一个很大的 PDF(~20mb,160mb。未压缩)。 我需要在其中的文本中进行查找和替换,大约 1000 次。 这是我尝试过的。
-
通过 SVG
- 转换为 SVG (inkscape)
- 逐行读取 SVG 并在文件中进行替换
- 转换回 PDF
=> 输出错误,可能是由于 SVG 中的一些几何变换矩阵,文本渲染不好
-
创建 ~1000 sed 命令
- 解压缩 PDF
- 使用 sed 命令执行每次替换
- 重新压缩 PDF
=> 太长了。每个 sed 命令大约需要 20 秒,导致处理几个小时
-
逐行读取并替换
- 解压缩 PDF
- 逐行阅读 PDF
- 查找要替换的文本
- 使用 perl 替换
- 将行写入新文件
- 压缩新文件
=> 由于未压缩的 PDF 中存在剩余数据流,新文件显然已损坏(将二进制写入文本行)
我想知道是否可以逐行读取未压缩的 PDF,但直接在其中进行编辑。我怎么能这样做?
我已经搜索过 perl 内联编辑,但它一次执行整个文件中的更改,而我想编辑一行。
非常欢迎其他想法;)
根据建议,我使用了 CAM::PDF,这是最有效和最简单的解决方案
【问题讨论】:
-
在 Perl 中,将整个未压缩的 PDF 以二进制形式读取到内存中,进行尽可能多的更改,编写新版本。
-
好主意。虽然您如何在二进制文件中查找和替换文本?
-
Denis Rouzaud:您可以使用专门用于处理 PDF 文档的库。
-
reinerpost: 你能说出我的名字吗(在 linux 下)?谢谢!