C# 将打印机设置转换为PostScript或PCL文件

C# 将打印机设置转换为PostScript或PCL文件,c#,pdf,printing,ghostscript,postscript,C#,Pdf,Printing,Ghostscript,Postscript,我需要: 在特定的输出打印机进纸器上使用双面打印打印大量PDF 我有: 使用带有“mswinpr2”设备的重影脚本打印 using (GhostscriptProcessor processor = new GhostscriptProcessor(new GhostscriptVersionInfo("gsdll32.dll"))) { List<string> switches = new List<string>(); switches.Add("-

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

我有: 使用带有“mswinpr2”设备的重影脚本打印

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,包含1000页

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

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

由于PDF文件不能包含特定于设备的信息,您显然不需要从输入中选择这些信息,这使生活更简单

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

对于PCL,您可能需要编写一些特定于设备的PJL,并将其插入PCL输出。然而,PCL远没有PostScriptp那么统一,这将取决于您是否需要在文件中添加前缀

[编辑]

您不使用-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

请注意,除非您首先设置了-c,否则您不需要命令行中的-f。-f开关用作-c的终止符。

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