使用ghostscript缩小PDF会导致图像无法显示

时间:2017-02-09 00:31:56

标签: html css pdf phantomjs ghostscript

我目前正在使用phantomjs渲染特定网页,其中包含两个重叠图像。在生成PDF之后,我将生成的PDF重新缩放到适当的大小 - 目前它已缩小到原始大小的大约三分之一。将幻像转换后的PDF与正在缩小的PDF进行比较时,我可以清楚地看到图像不再对齐(它们在转换后的图像中)

查看问题发生的放大区域(3200%,以显示详细问题)区域。蓝色图像(SVG)覆盖较暗的图像(PNG) - 两者在右侧完美对齐(白色区域是PDF的一部分)) Converted

但是,使用ghostscript缩放此图像时:gs -o /path/to/output.pdf -sDEVICE=pdfwrite -dPDFFitPage -r300x300 -g2676x2676 /path/to/input.pdf(即使缩放 down ,而不是 up 缩放,图像也不再对齐: enter image description here

(两张图片都放在position:absolute; right: 0;,因此两者都很好地对齐。)

什么可能导致这种行为以及如何避免它?

1 个答案:

答案 0 :(得分:0)

行为可能是在PDF消费者中,而不是在Ghostscript中。

首先需要注意的是,当您通过Ghostscript运行PDF文件并通过pdfwrite设备生成PDF文件时,您绝对'调整大小','缩小','合并'或任何其他术语暗示输出PDF文件的内容与输入内容有任何关系。

'概述'here解释了原因,我建议你阅读它。

现在我无法确定没有看到PDF文件(你没有给我们),但是......绝大多数可能的原因是算术中的舍入误差意味着输出PDF文件中的图像不是精确与输入相同的位置(不,没有办法避免这种情况)。

当您'放大'时,您正在改变当前变换矩阵,坐标的算术精度的微小差异乘以“缩放系数”。如果对象覆盖超过1/2的像素,通常像素是“打开”,如果缩放恰到好处,它很容易意味着顶部图像中的像素(假设它是*图像)只是勉强超过1/2像素,而下面的图像只是不到1/2像素。导致你看到不匹配。

即使没有您正在进行的转换,这种问题也可能存在,经过培训的图形设计师会意识到这一点,并以防止问题发生的方式创建内容。要么没有要求精确对齐的图像,要么必须,然后使图像都延伸到您希望它们结束的点,然后在两个图像周围放置一个剪裁矩形。这样,无论剪裁矩形如何缩放,图像将始终在同一点剪裁。