如何从 Ghostscript 打印半色调

How to print halftone from Ghostscript

我有一个包含图像和文本的 PostScript 文件。我想将它打印到激光打印机上,以便图像以半色调圆形图案打印。

我正在尝试从命令行打印它。我希望先输出 PDF,然后再打印到激光打印机。

我在 Windows 10 中安装了 HP Laserjet P2015 打印机。

gswin64c.exe -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=output.pdf test.ps -c "<< /HalftoneType 1 /Frequency 37 /Angle 45 /SpotFunction {180 mul cos exch 180 mul cos add 2 div} >> sethalftone"

PDF 文件已生成。但是,图像似乎不是圆形半色调格式。我没有看到图像有任何变化。

This is the original Image

我希望打印输出如下所示:Required output

出于某种原因,输出与原始输出相同。

pdfwrite 不会创建单色输出,所以不会,输出不会是半色调的。 pdfwrite 设备的重点是保持输出质量尽可能接近输入。

无法从 pdfwrite 获得单色输出,除非单色在输入中。

如果您改为使用单色输出设备(例如 tiffg3 或 tiffg4),您应该会看到不同之处,除非输入文件(您未提供)也设置了一个屏幕,在这种情况下,最后一个遇到将生效。也就是说,如果 PostScript 输入文件指定了半色调网屏,则将使用该网屏。

您所要求的是我通常描述为难题的问题,可能比您预期的要难得多。

最好的办法是将 PostScript 直接发送到打印机,因为它支持 PostScript。

问题1;您的 PostScript 文件中可能已经包含半色调,它会覆盖您要使用的半色调。您通常可以通过重新定义 sethalftone 和 setscreen 运算符来防止这种情况发生:

/sethalftone {pop} bind def
/setscreen {pop pop pop} bind def

显然,在您[定义了自己的半色调之后,您就可以这样做了。或者您可以只编辑 PostScript 文件并删除半色调定义,通常不难找到。

问题 2 是打印机制造商有时 'tweak' 解释器始终使用他们首选的半色调并防止您在 PostScript 中覆盖它。查明是否发生这种情况的唯一方法是尝试快速测试;使用默认屏幕打印一个简单的图像,然后设置一个非常粗糙的屏幕,比如 10 lpi 并打印相同的图像。如果没有区别,那么您就知道这不是一个可行的选择。如果有,那么你可以设置你想要的屏幕。

现在,如果打印机不允许您更改半色调,那么唯一的解决方案是使用 Ghostscript 将 PostScript 渲染为图像(这将允许您更改半色调),然后将生成的图像发送到打印机.您将需要使用 1 bpp 设备,tiffg3 或 tiffg4 之类的设备应该可以正常工作。

这里的问题是您需要确保图像适合打印机的介质,因为如果不适合,则打印机可能会稍微缩小图像以使其适合,从而挤压半色调单元。

更微妙的是,打印机中介质的可打印区域可能与介质的尺寸不同。纸张处理可能意味着纸张的某些区域无法打印,纸张进给的可变性可能意味着打印机无论如何都会拒绝打印到边缘。因为如果确实如此,并且在纸张处理中存在 1 毫米的偏差,那么 1 毫米的边缘将 'fall off' 并且在另一边缘将有 1 毫米的白色间隙...