You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让GhostScript仅自动缩放大于A3尺寸的PDF页面?

GhostScript实现超大页面自动缩放到A3的方案

GhostScript支持直接实现你需要的功能,无需提前单独检测页面尺寸,通过自定义PostScript脚本结合命令行参数就能完成逐页判断与缩放,同时保留A3及以下页面的原尺寸。

核心实现思路

利用GhostScript的PostScript处理能力,在每个页面渲染前获取其边界框尺寸,与A3标准尺寸对比:

  • 若页面宽度或高度超过A3,计算最小缩放比例(确保页面完整放入A3),对页面进行缩放并调整输出媒体框为A3;
  • 若页面尺寸≤A3,则保持原尺寸输出。

具体命令与脚本

以下是直接可用的命令,其中嵌入了处理逻辑:

gs -o output.pdf -sDEVICE=pdfwrite \
-c "<</PageSize[842 1191]>> setpagedevice" \
-c "
% 定义A3尺寸(单位:点,1点≈0.3527mm)
/A3W 842 def
/A3H 1191 def

% 页面处理钩子
<<
  /EndPage {
    % 获取当前页面边界框
    gsave
    initgraphics
    /PageBBox currentpagedevice /PageSize get def
    PageBBox 0 get /PageW def
    PageBBox 1 get /PageH def

    % 判断是否需要缩放
    PageW A3W gt or PageH A3H gt {
      % 计算缩放比例(取宽高缩放的较小值)
      A3W PageW div /ScaleW def
      A3H PageH div /ScaleH def
      ScaleW ScaleH lt { ScaleW } { ScaleH } ifelse /Scale def

      % 应用缩放并设置媒体框为A3
      grestore
      <</PageSize[A3W A3H]/MediaBox[0 0 A3W A3H]>> setpagedevice
      Scale Scale scale
      (Scaling page to A3 with factor: ) print Scale ==
    } {
      % 保持原尺寸
      grestore
      (Keeping original page size: ) print PageW print (x) print PageH ==
    } ifelse
    true % 继续处理后续页面
  } bind
>> setpagedevice
" \
-f input.pdf

关键细节说明

  • 尺寸单位:GhostScript默认使用点(point)作为单位,A3的标准尺寸转换为842×1191点;
  • 逐页处理:/EndPage钩子会在每个页面处理时触发,自动适配混合尺寸的文档;
  • 缩放逻辑:取宽度和高度方向缩放比例的最小值,避免页面变形,保证完整放入A3边界;
  • 性能优化:无需提前解析PDF获取尺寸,所有判断与处理在GhostScript的PDF转换流程中一次性完成,避免额外的IO或解析开销。

注意事项

  • 若你的A3尺寸为横向(420×297mm),只需将A3W和A3H的值互换(1191×842);
  • 可根据实际需求调整输出设备(如ps2write用于生成PostScript),核心脚本逻辑通用。

内容的提问来源于stack exchange,提问作者Steffen Urban

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 19:36:03