如何将 PDF 转换为 ASCII Postscript 以便可以搜索/替换其中包含的文本?

如何将 PDF 转换为 ASCII Postscript 以便可以搜索/替换其中包含的文本?

根据《PostScript 语言参考,“PostScript 语言有三种编码:ASCII、二进制标记和二进制对象序列”。

我们已经使用 PrinceXML 从 HTML/CSS 生成 PDF 文件一段时间了。最近,在与另一家公司合作时出现了一个新需求,需要将我们的 PDF 文件内容转换为 Postscript。当使用 pdf2ps、pdftops、a2ping 或其他工具通过命令行将 PDF 转换为 PS 时,生成的 PS 文件似乎具有二进制编码之一,因为无法搜索文本。

我们在印刷前几天交付 PS 文件,事先不知道印刷日期,但根据要求,需要打印印刷日期。因此,我们需要插入一个日期占位符 (##.##.####),印刷时会自动替换该占位符。

如果我们在 HTML/CSS 表示中插入该占位符,则无法在 postscript 文件的内容中搜索它,因此无法在打印之前将其替换为当前日期。

是否有人知道如何将 PDF 转换为 ASCII PostScript,以便可以搜索和替换其中包含的文本?

答案1

我对 pd2fps 没什么好感。

使用与 poppler 捆绑在一起的 pdftops 版本 0.12.4,我可以在 PS 代码中找到文本,但一次只能找到一个单词(每个单词都用括号括起来)。

例如下载

wget ctan.org/tex-archive/macros/latex/contrib/lipsum/lipsum.pdf
pdftops lipsum.pdf
sed 's;2011/;2012/;' lipsum.ps > lipsum2.ps

这会将年份(位于文件开头)从 2011 更改为 2012,但请注意,因为您不能总是简单地更改文本,根据 PS 代码的结构,可能没有足够的空间来替换文本。尝试将前面的示例用 2013 代替 2012,您就会明白。

我不懂 postscript,但我怀疑某些转换可能会导致部分二进制和部分文本文件,如果是这样,请尝试使用 sed,它将保留非文本字节。

答案2

另一个解决方案是修改原始 pdf,使日期以表格形式显示,然后使用 flpsed 进行填充!请在此处查看:http://freshmeat.net/projects/flpsed

相关内容