【问题标题】:PDF-Print from C#-Program with Ghostscript on specific tray在特定托盘上使用 Ghostscript 从 C#-Program 打印 PDF
【发布时间】:2014-10-06 11:31:10
【问题描述】:

在我当前的软件中,我正在创建 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 上进行配置需要付出很多努力。

感谢您的帮助!

卡尔

【问题讨论】:

    标签: c# pdf printing ghostscript


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      由于您使用的是 Ghostscript,因此您可以将 PDF 栅格化为图像,然后使用 .NET 框架中已构建的 PrintDocument 类打印图像。这样,您可以通过将 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 文件。

      【讨论】:

      • 如果您使用 Ghostscript 从 PDF 文件创建 PostScript,则无需解析输出 PS 即可添加特定于设备的选项,ps2write 可以为您完成。请参阅 ghostpdl/gs/doc/ps2ps2.htm 中的 PSDocOptions 和 PSPageOptions
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多