Ghostscript转换PDF为图片时如何阻止自动旋转?
Ghostscript转换PDF到PNG时禁用自动旋转
问题背景
使用Ghostscript 10.02.0执行以下命令转换PDF到PNG:gs -o ./test.png -dNumRenderingThreads=1 -sDEVICE=png16m -r72 -dLastPage=1 -dFitPage -dDEVICEWIDTHPOINTS=125 -dDEVICEHEIGHTPOINTS=100 -dUseTrimBox -dInterpolateControl=-1 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 ./text.pdf
转换可完成,但当PDF高度大于dDEVICEHEIGHTPOINTS时,Ghostscript会自动旋转图片。确认是-dFitPage导致的,但需要将任意尺寸PDF缩放到指定维度且保留原有方向。已知-dAutoRotatePages=false仅适用于PDF生成场景,不适用于图片转换。
临时 workaround:将目标宽高设为相同值,Ghostscript会保留PDF原有方向适配。
可行解决方案
1. 命令行参数直接禁用旋转(推荐)
放弃-dFitPage,改用PostScript命令强制固定页面方向并按比例缩放:
gs -o ./test.png -dNumRenderingThreads=1 -sDEVICE=png16m -r72 -dLastPage=1 -dUseTrimBox -dInterpolateControl=-1 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dFIXEDMEDIA -dDEVICEWIDTHPOINTS=125 -dDEVICEHEIGHTPOINTS=100 -c "<</PageSize [125 100] /AutoRotatePages /None>> setpagedevice" -f ./text.pdf
关键参数说明:
-dFIXEDMEDIA:锁定目标介质尺寸,不允许自动调整/AutoRotatePages /None:强制禁用页面旋转逻辑- 无需
-dFitPage,Ghostscript会自动按比例将PDF缩放到指定的PageSize内,同时保持原有方向
2. 修改pdf_main.ps(全局修改,不推荐)
若必须修改源码文件:
- 找到
pdf_main.ps中处理FitPage适配的代码段,通常是判断页面与目标介质宽高比差异后触发旋转的逻辑 - 注释或删除触发旋转的分支代码,强制仅执行缩放操作,不改变页面方向
- 注意:此修改会影响所有Ghostscript的PDF处理任务,风险较高,仅在无其他方案时考虑
内容的提问来源于stack exchange,提问作者JamesS
相关产品推荐
相关产品推荐

