PDF-打印来自C#-Program,特定托盘上带有Ghostscript

时间:2014-08-13 07:33:43

标签: c# pdf printing ghostscript

在我目前的软件中,我正在创建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上进行配置。

感谢您的帮助!

卡尔

2 个答案:

答案 0 :(得分:2)

只是一个我确定它会起作用的想法:

由于您使用的是 Ghostscript ,因此您可以将PDF光栅化为图像,然后使用 PrintDocument 类打印图像已经构建在.NET框架中。这样,您可以通过将 PageSettings.PaperSource 设置为其他纸盘来选择要使用的纸盘。请看一下这个例子: How to select different tray for PrintDocument with C#

为了从C#代码中更简单地使用Ghostscript,您可以使用 Ghostscript.NET ,这是Ghostscript库的托管包装器。请查看此示例,了解如何将PDF格式化为图像: GhostscriptRasterizer Sample

Ghostscript.NET 也可以通过NuGet获得: http://www.nuget.org/packages/Ghostscript.NET/

如果您想使用Ghostscript完成所有操作,可以将PDF转换为Postscript,解析Postscript文件,通过添加托盘选择代码修改它们,然后打印Postscript文件。

答案 1 :(得分:1)

基本上没有。 mswinprs2设备不支持超出介质大小和颜色深度的任何大量配置。您可以让设备设置打印对话框,以允许您以交互方式更改设置。

或者您可以添加它,您需要添加一个开关来指定所需的纸盘,然后在createDC创建设备上下文之前更改DEVMODE结构。