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

PostScript(.ps)文件如何检测输出目标为屏幕(Ghostscript)或硬件打印机?

PostScript识别输出目标的方法

核心思路:检测设备字典属性

PostScript运行环境会维护当前输出设备的属性字典,通过currentdevice操作符可获取该字典,从中读取设备类型、分辨率、设备名称等特征,以此区分屏幕显示和打印机输出场景。

1. 检查设备类型(DeviceType)

部分设备会在字典中提供DeviceType键,直接标识设备类别:

% 检测设备类型并执行对应逻辑
currentdevice /DeviceType known {
    currentdevice /DeviceType get
    dup /Display eq {
        % 屏幕输出逻辑:显示简化内容、适配屏幕颜色
        /Helvetica 12 selectfont
        100 700 moveto (屏幕模式:显示简化版内容) show
    } {
        /Printer eq {
            % 打印机输出逻辑:打印完整细节、高分辨率元素
            /Times-Roman 14 selectfont
            100 700 moveto (打印模式:输出完整内容) show
            100 650 moveto (附加打印专属细节...) show
        } if
    } ifelse
} if

注意:不是所有设备都支持DeviceType,需先用known操作符检查键是否存在,避免执行错误。

2. 通过分辨率(HWResolution)判断

屏幕设备分辨率通常远低于打印机(屏幕多为72/96/144DPI,打印机多为300/600/1200DPI),可读取HWResolution做阈值判断:

% 读取设备分辨率并区分输出目标
currentdevice /HWResolution get aload pop
/resx exch def % 获取X方向分辨率

resx 150 le {
    % 低分辨率判定为屏幕输出
    100 700 moveto (屏幕输出:适配低分辨率显示) show
} {
    % 高分辨率判定为打印机输出
    100 700 moveto (打印机输出:适配高分辨率打印) show
} ifelse

补充:针对高DPI屏幕(如Retina),可适当提高阈值,结合其他属性综合判断。

3. 识别Ghostscript专属屏幕设备

如果仅针对Ghostscript的屏幕渲染场景,它的屏幕设备名称通常为display,可通过DeviceName键检测:

% 检测是否为Ghostscript屏幕设备
currentdevice /DeviceName get (display) eq {
    % Ghostscript屏幕显示专属逻辑
    100 700 moveto (Ghostscript屏幕预览模式) show
} {
    % 打印机或其他输出设备逻辑
    100 700 moveto (正式打印输出模式) show
} ifelse

局限性:仅适用于Ghostscript环境,其他PostScript显示引擎可能使用不同设备名称。

4. 结合页面尺寸(PageSize)辅助判断

屏幕有效显示尺寸通常和标准打印纸张尺寸(如A4)有差异,可结合PageSize进一步验证:

currentdevice /PageSize get aload pop
/pagewidth exch def
pagewidth 612 le { % 612pt是A4纸的宽度,屏幕可能更小
    % 疑似屏幕输出
} {
    % 疑似打印机输出
} ifelse

注意:Ghostscript可模拟纸张尺寸,单独使用可靠性较低,建议和其他方法配合。


内容的提问来源于stack exchange,提问作者Bill Evans at Mariposa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:25:13