打印机设置成PostScript或PCL文件

时间:2018-11-14 08:46:07

标签: c# pdf printing ghostscript postscript

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

1 个答案:

答案 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的终止符。