【发布时间】:2017-06-27 04:47:44
【问题描述】:
我们有一些我很难理解的遗留代码 - 原作者已经不在了。
显然,对于某些文件,Ghostscript PS 到 PDF 的转换非常慢,但将对象定义如下所示可以极大地加快速度(我们将 8 小时以上的时间缩短到 8.5 分钟来处理约 20,000 页的文件,而 Adobe Distiller 需要约 20 分钟在带有默认选项的原始文件上)。
原始文件提取(使用 PReS 创建):
/@GP
{
save exch mark exch
execform
cleartomark restore
} bd
...
gsave 0.62 0.62 scale @TestGraphic @GP grestore
@TestGraphic 是 EPS 图像。这似乎并不重要,因为其他程序使用具有类似问题的不同非 EPS 图像。
修改后的文件:
[/_objdef {new_graphic} /BBox [0 0 595 842] /BP pdfmark
@TestGraphic @GP
[/EP pdfmark
...
gsave 0.62 0.62 scale
[ {new_graphic} /SP pdfmark
grestore
我们在 Unix 和 Windows 上看到了各种 gs 版本的类似行为。计时是使用相当标准的选项进行的:
"c:\Program Files (x86)\gs\gs9.21\bin\gswin32c" \
-dNOPAUSE -dBATCH -sDEVICE=pdfwrite -o test.pdf test.ps
我对诊断速度慢的原因不太感兴趣(从文件中删除敏感数据需要很长时间,但如果确实需要,我可以尝试),而是反对定义和 pdfmark 命令提供的好处。
原始脚本引用了http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/postscript/pdfs/5113.Forms.pdf,旨在在某些打印机 RIP 和 Distiller 上启用 execform 缓存(它们都在处理大型全彩色图像),但是 Ghostscript 不支持 execform 缓存,因此采用了这种替代 pdfmark 技术,没有说明原因。
编辑:添加了删除数据的表单定义要点:
https://gist.github.com/anonymous/676924d451188276053b9b472279e382
【问题讨论】:
标签: pdf pdf-generation ghostscript postscript