我需要: 在特定的输出打印机进纸器上打印大量带有双面打印的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);
}
问题: 打印队列中由两页组成的一项作业占用了50mb以上的空间,而我有1500多个PDF和1000000页
我的想法: 将PDF转换为PCL或PS,编辑这些文件并以某种方式通过设置(双工和特定进纸器)。然后将已编辑的PCL或PS文件作为RAW数据发送到打印机
问题: 如何将设置传递给PCL或PS?
答案 0 :(得分:0)
由于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的终止符。