我正在生成多个EPS文件,其中包含几个不一定有效编码的PostScript绘图命令。 this question答案中的第一次更新描述了类似的低效率。
我的每个EPS文件大约为18 MB,生成的PDF文件大约为3 MB。我正在使用epstopdf
生成PDF文件,默认情况下启用某种压缩。
对于如何在不改变质量的情况下进一步减少生成的PDF文件大小(例如光栅化矢量图形),是否有任何建议?
我尝试将坐标的精度从小数点后的8位数降低到3.这将EPS文件大小减少到大约14 MB,但是,直观地说,PDF文件大小略有增加。
更新1: EPS文件包含以下几种示例代码,用于不同的坐标和颜色。
newpath
1 setlinejoin
1 setlinecap
<<
/BBox [322 384.0417 615.0087 651.9958]
/Domain [322 384.0417 615.0087 651.9958]
/ShadingType 6
/ColorSpace [/DeviceRGB]
/DataSource
[
0
350.00000000 651.99583594
336.00000000 645.75890880
336.00000000 645.75890880
322.00000000 639.52198166
339.17140372 627.26533984
339.17140372 627.26533984
356.34280743 615.00869803
370.19224806 621.16169097
370.19224806 621.16169097
384.04168868 627.31468392
367.02084434 639.65525993
367.02084434 639.65525993
0.23047 0.29688 0.75
0.23047 0.29688 0.75
0.41081 0.54141 0.93366
0.41112 0.54178 0.93388
]
>>
gsave
322 615.0087 62.04169 36.98714 rectclip
shfill
grestore
更新2:我已使用pdftocairo
,然后gs -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dDetectDuplicateImages=true -sOutputFile=out.pdf in_.pdf
将PDF文件大小减少了约15%。
答案 0 :(得分:1)
PostScript是一种编程语言而PDF不是,因此通常可以创建比生成的PDF文件更小的PostScript程序。
效率低下&#39;你在EPS程序中提到的,输入数字的精确度与PDF文件的大小完全无关。 PDF中的运算符与PostScript中的运算符名称不同,因此“移动到”#在PostScript中,并不是简单地将其转化为“移动”。在生成的PDF文件中。输出PDF文件中数字的精度与输入中数字的精度无关。
此外,PostScript解释器通常使用固定的精度算术(例如Ghostscript使用24:8),因此输入上的(例如)1.5可能不会在输出上产生1.5,而是可能变为1.49999999。
因此,基本上,结果就是没有人能够知道为什么你的PDF文件没有看到它们那么大。我建议个人减少6:1的尺寸是非常合理的。如果您在某个地方发布一个代表性示例,可能有人可以查看它并且可能能够提供一些建议,但却看不到内容,这是不可能的。
除非您以非常低的分辨率渲染,否则呈现内容很可能增加 PDF文件的大小。
修改强>
提供的示例只是一个着色字典,PDF文件将包含该特定构造的几乎完全相同的数据。它已经像你期望的那样紧凑,我非常怀疑它是占用18MB源的东西,这将是一个巨大的阴影。没有现实的方法可以使它变小,并将其渲染为位图(即使分辨率非常低)实际上会使其变大。
EPS完全可能包含位图预览等内容,当然,在创建PDF时会将其删除。它也可能(取决于创建应用程序)包含存储为注释的原始文档,在创建PDF文件时也会将其删除。没有看到原始的EPS,它实际上不太可能有多大意义。
我担心发布文件的一小部分并不能真正帮助。