打印机设置到 PostScript 或 PCL 文件

Printer settings into PostScript or PCL file

我需要: 在特定输出打印机进纸器上双面打印大量 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?

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

Ghostscript 的 ps2write 设备能够将文档范围或页面特定的 PostScript 插入其输出。所以你可以'pass the settings'使用它。

对于 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:[=10=].pdf

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