在我当前的软件中,我正在创建pdf文件,并使用ghostscript将它们打印出来,如下所示:
...
string[] printParams = new string[] {
"-q",
"-sDEVICE=mswinpr2",
"-sPAPERSIZE=a4",
"-dNOPAUSE",
"-dNoCancel",
"-dBATCH",
"-dDuplex",
string.Format(@"-sOutputFile=""\\spool\{0}""", printerName),
string.Format(@"""{0}""", filename)
...
var p = new Process();
p.StartInfo.FileName = this.ghostScriptExePath;
p.StartInfo.Arguments = string.Join(" ", printParams);
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();
...
到目前为止,它工作正常,并且可以在指定的打印机上打印出来.
我的问题是,在某些情况下,我想从特定纸盒中打印出pdf文档.
可以用ghostscript实现吗?
我知道,我可以在已安装的设备上添加打印机两次,一次是在纸盘1上,一次是在纸盘2,但是要在所有受影响的客户端PC上进行配置会花费很多精力.
谢谢您的帮助!
卡尔
解决方法:
我确定可以解决的一个想法:
由于使用的是Ghostscript,因此可以将PDF栅格化为图像,然后使用.NET框架中已内置的PrintDocument类来打印图像.这样,您可以通过将PageSettings.PaperSource设置为其他纸盘来选择要使用的纸盘.看一下这个例子:How to select different tray for PrintDocument with C#
为了从C#代码中更简单地使用Ghostscript,可以使用Ghostscript.NET,它是Ghostscript库的托管包装.看一下有关如何将PDF光栅化为图像的示例:GhostscriptRasterizer Sample.
也可以通过NuGet获得Ghostscript.NET:http://www.nuget.org/packages/Ghostscript.NET/
如果要使用Ghostscript进行所有操作,可以将PDF转换为Postscript,解析该Postscript文件,通过添加进纸匣选择代码对其进行修改,然后打印Postscript文件.