用Ghostscript从C#程序打印特定托盘的PDF文件

3

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

谢谢您的帮助!

Karl

2个回答

2
“只是一个我确定会起作用的想法:由于您正在使用 Ghostscript,您可以将PDF转换为图像,然后使用.NET框架中已经构建的 PrintDocument类打印图像。这样,您可以通过将 PageSettings.PaperSource设置为不同的托盘来选择要使用的托盘。请参阅此示例:如何使用C#选择不同的PrintDocument托盘。”
在您的 C# 代码中更简单地使用 Ghostscript,您可以使用 Ghostscript 库的托管包装器 Ghostscript.NET。请查看此示例,了解如何将 PDF 栅格化为图像:GhostscriptRasterizer 示例Ghostscript.NET 也可通过 NuGet 获得:http://www.nuget.org/packages/Ghostscript.NET/ 如果您想要完全使用 Ghostscript 完成所有操作,您可以将 PDF 转换为 Postscript,解析该 Postscript 文件,通过添加托盘选择代码修改它们,然后打印 Postscript 文件。

1
如果您正在使用Ghostscript从PDF文件创建PostScript,您无需解析输出PS以添加设备特定选项,ps2write可以为您完成此操作。请参阅ghostpdl/gs/doc/ps2ps2.htm中的PSDocOptions和PSPageOptions。 - KenS

1
基本上不行。mswinprs2设备除了介质尺寸和颜色深度之外,不支持任何大量的配置。您可以让设备弹出打印对话框,以允许您进行交互式设置更改。
或者,您可以添加它,需要添加一个开关来指定您想要的纸盘,然后在createDC创建设备上下文之前修改DEVMODE结构。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接