pdftk stamp合并PDF时小尺寸叠加层被放大至整页如何解决
pdftk叠加PDF时二维码被拉伸问题解决
运行环境
- FreeBSD-12.3p5
- pdftk 3.3.2_1
问题原因
pdftk的stamp/background命令默认逻辑为:将叠加层PDF的页面等比拉伸至完全匹配底层主PDF的页面尺寸后再完成叠加,这个缩放行为和叠加层内的图片原始像素尺寸、文件单独打开时的视觉显示大小没有关联。
使用ImageMagick直接将87x87像素的PNG转PDF时,若不显式指定PDF的页面尺寸参数,生成的QR.pdf实际页面尺寸远大于87像素对应的物理尺寸——只是二维码内容被放置在大页面的角落,单独打开时视觉上显示为小尺寸。执行stamp操作时,整个QR.pdf页面会被拉伸到主PDF的整页大小,二维码也就同步被放大至整页。
解决方法
生成叠加层QR.pdf时,直接将它的页面尺寸设置为和主文档IN999999.pdf完全一致,把二维码放在目标位置,其余区域保留透明,pdftk检测到两个文件页面尺寸匹配时就不会触发缩放逻辑。
操作步骤如下:
- 先查询主PDF的实际页面尺寸,执行命令:
pdfinfo IN999999.pdf | grep "Page size"
比如输出为Page size: 595 x 842 pts,即对应标准A4尺寸。
- 替换原有ImageMagick转PDF命令,显式指定页面尺寸、二维码放置位置。例如需要把二维码放在页面右下角、距离边缘各10pt时,命令如下:
magick convert -transparent white -page 595x842 -gravity SouthEast -geometry +10+10 QR.png QR.pdf
相关参数说明:
-page 595x842:指定生成PDF的页面尺寸和主文档完全一致,替换为上一步查到的主文档实际尺寸即可-gravity SouthEast:设置定位基准为页面右下角,可根据需求替换为其他定位值:NorthWest对应左上角、NorthEast对应右上角、SouthWest对应左下角、Center对应页面居中-geometry +10+10:设置距离定位基准点的偏移量,两个数值分别对应水平、垂直方向的边距,单位为pt- 执行原有的pdftk合并命令即可:
pdftk IN999999.pdf stamp QR.pdf output QRIN999999.pdf
最终生成的文件中二维码会保持原始87x87像素大小,固定在指定位置,不会出现拉伸变形。
如果需要做像素级精准定位,可按PDF默认72DPI的换算规则计算坐标:1pt对应1像素的物理长度,87像素的二维码对应边长为87pt的正方形,直接按目标位置核算偏移数值即可。
内容的提问来源于stack exchange,提问作者James B. Byrne
相关产品推荐
相关产品推荐

