打印机设置到 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 文件的主要内容,如果未能解决你的问题,请参考以下文章