Html 使用ghostscript缩小PDF会导致图像未对齐

Html 使用ghostscript缩小PDF会导致图像未对齐,html,css,pdf,phantomjs,ghostscript,Html,Css,Pdf,Phantomjs,Ghostscript,我目前正在使用phantomjs呈现一个特定的网页,其中包含两个重叠图像。生成PDF后,我将重新缩放生成的PDF到适当的大小-目前它正在缩小到原始大小的大约三分之一。当比较phantomjs转换后的PDF和缩小后的PDF时,我可以清楚地看到图像不再对齐(它们在转换后的PDF中) 查看放大(3200%,以详细显示问题)区域,即问题发生的区域。蓝色图像(SVG)覆盖了较暗的图像(PNG)-两者都在右侧完全对齐(白色区域是PDF的一部分)) 但是,当使用ghostscript缩放此图像时:gs-o/

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

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

但是,当使用ghostscript缩放此图像时:
gs-o/path/to/output.pdf-sDEVICE=pdfwrite-dPDFFitPage-r300x300-g2676x2676/path/to/input.pdf
(即使缩小了比例,但没有增大比例,图像也不再对齐:

(两个图像都放置在
位置:绝对;右侧:0;
,因此都在右侧对齐。)


什么会导致这种行为以及如何避免这种行为?

这种行为可能是在PDF使用者中,而不是在Ghostscript中

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

“概述”解释了为什么,我建议你读一下

现在,如果没有看到PDF文件(您没有给我们),我无法绝对肯定地说,但是..极有可能的原因是算术舍入错误意味着输出PDF文件中的图像与输入不在同一位置(不,无法避免)

当你“放大”时,你正在改变当前的变换矩阵,坐标的算术精度的微小差异将乘以“缩放因子”。通常,如果对象覆盖了像素的1/2以上,那么像素是“打开”的,如果缩放效果正好,那么很容易就意味着顶部图像中的像素(假设**是*一幅图像)刚刚超过1/2像素,而下面的图像刚刚低于1/2像素。这导致了您看到的不匹配

即使没有您正在进行的转换,这种问题也可能存在,训练有素的图形设计师会意识到这一点,并以防止问题发生的方式创建内容。要么没有需要精确对齐的图像,要么(如果必须的话)让图像都延伸到您想要的位置m结束,然后在两幅图像周围放置一个剪切矩形。这样,无论剪切矩形如何缩放,图像始终在同一点进行剪切