首页 > 解决方案 > Ghostscript mswinpr2 打印单色,除非 BitsPerPixel=24 创建非常大的假脱机文件

问题描述

2018 年 7 月 6 日

嗨,肯,感谢您提供的所有信息!很抱歉花了一段时间才回复您,但根据您的建议,我们离开并做了一些工作。我们现在在 100dpi 时降到了大约 10.4MB。
我们在这种低分辨率下的问题是字体和条形码的完整性。

到目前为止,我们管理大量假脱机文件大小的唯一方法是通过命令行使用 Adob​​e 的 AcroRd32.exe。这提供了大约 2.5MB 的惊人大小。分辨率似乎很好,关键是条形码和字体也很好。然而,使用这种方法进行大量打印并不理想。

您知道为什么以这种方式打印会产生如此小的假脱机文件吗?我们遇到了一些颜色问题,但分辨率似乎非常好。

是什么让 AcroRd32.exe 与我们迄今为止尝试过的所有其他程序不同?您的建议将不胜感激。

谢谢你。丽兹尔


我需要通过 ghostscript 打印一个图像重的 pdf 目录。如果我不降低分辨率,假脱机文件会变得非常大。最终,我们需要通过 VPN 连接打印 pdf 文件,这意味着文件大小需要保持在 5MB 左右或更低。我们对大约 300 dpi 的分辨率感到满意。

此命令创建一个 1.74 MB 的文件:

C:\Users\admin>"c:\Program Files\gs\gs9.23\bin\gswin64c.exe" -dNOPAUSE -dQUIET -dBATCH -c "mark /OutputFile (%printer%Pro C5100Sseries E-22B PS 1.1) /UserSettings <> (mswinpr2) finddevice putdeviceprops setdevice" -f "myCatalogue.pdf"

此命令创建一个 84.7MB 的文件:

c:\Program Files\gs\gs9.23\bin\gswin64c.exe" -dNOPAUSE -dQUIET -dBATCH -c "mark /BitsPerPixel 24 /OutputFile (%printer%Pro C5100Sseries E-22B PS 1.1) /UserSettings <> ( mswinpr2) finddevice putdeviceprops setdevice" -f "myCatalogue.pdf"

如果我没有指定 /BitsPerPixel 24,pdf 将以单色打印。但是,这会将文件大小推高到 84.7MB。

在网上找到了这个解释: 一些 Windows 设备驱动程序错误地返回一个低值,导致 BitsPerPixel 可以强制我们映射到单色,甚至在全彩色设备上抖动,使得 -dBitsPerPixel=24 是强制性的。

是否有其他人遇到过此问题或有关通过 VPN 批量打印文件大小不超过 5MB 的 pdf 文件的替代方法的任何建议?

标签: ghostscript

解决方案


mswinpr2 的工作方式是将输入文件渲染为位图,然后将位图 blit 到 Windows 设备上下文,然后告诉设备上下文打印它。这会调用打印管道,该管道使用 Windows 打印机驱动程序来创建适合打印机读取的文件。

根据打印机的不同,这可能是 PCL、PostScript、XPS、GDI 或打印机制造商专有的某些其他语言(例如 Zebra 打印机的 ZPL)。

以这种方式工作的优势在于它利用了 Windows 对特定打印机类型的广泛支持。否则,Ghostscript 将不得不为每台不同的打印机配备一个驱动程序,而这在很久以前就成了一项不可能完成的任务。

缺点当然是打印的是一个巨大的位图。所以它很大。

如果您考虑 300 dpi A4 页面,每个分量 RGB 8 位,那么图像将是:

以英寸为单位的宽度 * 分辨率 (dpi) * 每个样本的位数 (24)

8.27 * 300 * 3 = 每扫描线 7443 字节

然后有:

以英寸为单位的高度 * 分辨率 (dpi) 页面上的扫描线 11.69 * 300 = 3507

所以我们将扫描线大小*扫描线数乘以得到图像大小:

7443 * 3507 = 26,102,601 字节或略低于 25 MB

因此,您的 5 MB 图像目标需要您压缩文件并获得至少 5:1 的压缩比。因此,一种解决方案是尝试压缩文件并在另一端解压缩。

现在,关于这个设备的一件事是它的属性是由打印机控制的。Ghostscript 设备查询打印机并根据打印机的分辨率自行调整。我怀疑您的打印机实际上设置为以 600 dpi 渲染,这就是为什么您的假脱机文件比建议的 300 dpi 分辨率大 4 倍的原因。

该设备也不支持降低颜色质量,除了单色(我怀疑你的 1.74MB 文件就是这样)。因此,您的选择是单色、每个分量 1 位 CMYK 或 24 位 RGB。

您可以在 Ghostscript 网站上找到有关 Ghostscript 设备的文档,并在此处找到此设备的详细信息

您唯一能做的(我还没有尝试过)就是设置 MaxResolution 参数。但正如我上面所展示的,这只会让你达到 25Mb。如果您想要低于此值,则必须进一步降低分辨率。进一步下降 5 倍意味着将分辨率降低一半以上。

看起来你会看到大约 135 dpi。


推荐阅读