这是一个神话,pdf->ps->pdf
总是会给你一个更小的文件大小。例如,考虑
(在数学中)
fileName = "test.pdf";
p = DensityPlot[Sin[x] Sin[y], {x, -4, 4}, {y, -3, 3}];
Export[fileName, p];
(在外壳中)
pdf2ps test.pdf && ps2pdf test.ps test1.pdf
test.pdf
是 446kB,而test1.pdf
在我的机器上是 11.5MB!
通常发生的情况是,当您使用 Mathematica 导出 PDF 文件时,它会存储文本(轴刻度线、标签等)、字体和图像,所有这些都会增加。如果您有带有大量刻度线/标签的矢量图形,那么这些可能非常重要。这样做pdf->ps->pdf
会剥离字体数据和文本数据的文件,同时压缩图像,这就是您看到文件大小减小的原因。虽然在小放大倍率下无法观察到,但当您大幅放大时,您会注意到差异。例如,替换p
为
p = Plot[Sin[t], {t, 0, 2 Pi}];
在我的机器上生成一个 37kB 的文件test.pdf
和一个 8kB 的文件。test1.pdf
8kb 文件的质量比原始文件差(放大到 600%+ 显示这一点)。您可以通过执行查看mathematica 存储在PDF 文件中的纯文本信息
Import[fileName,"Plaintext"]
但是,对于更复杂的 PDF 文件,转换为ps
然后再返回pdf
不一定是一个好的选择,并且可能导致文件大小爆炸。
您可以尝试使用 PDF 中的选项Export
,例如"AllowRasterization"
and ImageResolution
,甚至在保存之前栅格化图像,但我想您已经知道了。
这是从mathematica中减小文件大小的一种快速而肮脏的方法
Export[fileName, First@Import@Export[fileName, p]]
文件大小现在只有 12kB!它只有原版的三分之一,仅比从 获得的略大pdf->ps->pdf
,并且质量比 8kB 的要好得多(尽管与原版不完全相同。在 1200% 及以上的放大倍率下可以看到差异) .
发生的情况是,在导入和重新导出时,仅保存存储的图像。它的纯文本部分被丢弃了,在这个小例子中,这恰好很重要。例如DensityPlot
,仅减少到 425kB(仍然下降而不是增加到 11MB)。