打印机设置到 PostScript 或 PCL 文件

Posted

技术标签:

【中文标题】打印机设置到 PostScript 或 PCL 文件【英文标题】:Printer settings into PostScript or PCL file 【发布时间】:2018-11-14 08:46:07 【问题描述】:

我需要: 在特定输出打印机进纸器上打印大量双面 PDF 文件

我有: 使用带有“mswinpr2”设备的 ghostscript 打印

using (GhostscriptProcessor processor = new GhostscriptProcessor(new GhostscriptVersionInfo("gsdll32.dll")))

    List<string> switches = new List<string>();
    switches.Add("-dPrinted");
    switches.Add("-dBATCH");
    switches.Add("-dNOPAUSE");
    switches.Add("-dNumCopies=1");
    switches.Add("-dPDFFitPage");
    switches.Add("-dFIXEDMEDIA");
    switches.Add("-dNoCancel");
    switches.Add("-sFONTPATH = C:\\Windows\\Fonts");
    switches.Add("-sDEVICE=mswinpr2");
    switches.Add($"-sOutputFile=%printer%settings.PrinterName");
    switches.Add("D:\\11.pdf");
    processor.StartProcessing(switches.ToArray(), null);

问题: 由 2 页组成的打印队列中的一项作业需要超过 50mb,而我有超过 1500 个 PDF 和 1 000 000 页

我想做什么: 将 PDF 转换为 PCL 或 PS,编辑这些文件并以某种方式传递设置(双面和特定进纸器)。然后将编辑后的 ​​PCL 或 PS 文件作为 RAW 数据发送到打印机

问题: 如何将设置传递给 PCL 或 PS?

【问题讨论】:

【参考方案1】:

由于 PDF 文件不能包含特定于设备的信息,您显然不需要从输入中挑选此类信息,这让生活变得更简单。

Ghostscript 的 ps2write 设备能够将文档范围或特定页面的 PostScript 插入到其输出中。因此,您可以使用它“传递设置”。

对于 PCL,您(可能)需要编写一些特定于设备的 PJL 并将其插入 PCL 输出。但是,PCL 远没有 PostScritp 那样统一,您需要自己确定文件的前缀是什么。

[编辑]

你不要使用-sPSDocOptions,PSDocOptions是一个蒸馏器参数,所以你需要:

gswin64c.exe -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=D:\out.ps -c "<</PSDocOptions (<</Duplex true /NumCopies 10>> setpagedevice)>> setdistillerparams" -f D:\0.pdf

请注意,您不需要 -f(就像您在命令行中使用的那样)除非您首先设置了 -c。 -f 开关用作 -c 的终止符。

【讨论】:

感谢您的回答。我在哪里可以找到有关如何将 PostScript 插入其输出的文档?在 ghostscript.com 我刚刚找到 /PSDocOptions 和 /PSPageOptions 但不知道如何使用它们。 它们是蒸馏器参数(文档是这样说的),因此您将它们放入字典并调用 setdistillerparams。您也可以在命令行上使用 -sPSDocOptions 和 -sPSJobOptions,但您需要使用 "" 来满足 PostScript 中的空格。 我正在尝试使用以下参数将 PS 文件作为 RAW 数据发送:switch.Add (@"-sPSDocOptions=""> setdistillerparams" "");但它仍然是片面的。我是否正确使用了脚本? Switch.Add 与 Ghostscript 没有任何关系。我无法告诉您为什么您的打印机不使用该命令进入双工模式,也许它使用了非标准代码来这样做。 肯,感谢您的回复。现在我测试通过 gswin64 将 PDF 转换为 PS。我尝试了不同的方法: 1) gswin64c.exe -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=D:\out.ps -sPSDocOptions="> setdistillerparams" -f D: \0.pdf 2)gswin64c.exe -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=ps2write -sOutputFile=D:\out.ps -c "> setpagedevice" -f D:\ 0.pdf 但是当我用记事本打开它时,当我手动添加它们时找不到字符串“/Duplex true”或“/NumCopies 10”:%%BeginPageSetup > setpagedevice 它可以工作。帮助!

以上是关于打印机设置到 PostScript 或 PCL 文件的主要内容,如果未能解决你的问题,请参考以下文章

PostScript/PCL - 获取文档页面信息:页面大小、黑白/颜色

pcl与ps区别

打印类型PCL啥意思

佳能打印机intdrv和drivers的区别

打印机PCL5/PCL5E和PCL6有啥区别?

彩色激光打印机(PCL6 驱动程序)打印灰色图形或图像偏色的现象