2017-07-25 149 views
1

我有一个C#WinForms应用程序。用户上传.XPS文件并指定一些打印机设置(份数,纸盒等)。 程序需要以这些设置以编程方式打印文档。也就是说,不能进行用户交互来进行打印。以编程方式将XPS文件打印到物理打印机

我可以用System.Printing AddJob方法来接近。 (https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/how-to-programmatically-print-xps-files)。不过,我不能在这里定义特定设置,如纸张来源,打印份数等。

我宁愿使用PrintDocument方法,但我无法弄清楚如何让PrintDocument呈现/打印XPS文件。

我已看过此资源https://msdn.microsoft.com/en-us/library/system.drawing.printing.printdocument.printpage(v=vs.110).aspx,但无法看到我如何让PrintPageEventHandler呈现XPS文档。

有关如何继续的任何想法?帮助将不胜感激!

C#.NET 4.5

UPDATE:

基于下面的答案,我可以发送打印标签时,我添加作业,就像这样:

PrintTicket pt = printQueue.DefaultPrintTicket; 
pt.CopyCount = 2; 
// pt.InputBin = [ InputBin enum option ] 
printQueue.AddJob("name", "file", false, pt); 

我看不到任何简单的方法来设置PrintTicket的InputBin。 InputBin是一个枚举,并没有一个选项可以将其设置为可用仓位的名称。

回答

3

您对AddJob正确,但您需要version that accepts a PrintTicket。您将需要使用用户的设置创建一个新的PrintTicket - 任何设置为null的值将最终使用为该PrintQueue设置的默认值。

+0

谢谢。我没有意识到我可以用这种方式添加PrintTicket。这很容易让我指定副本数量,但看起来像设置“输入斌”(托盘)有点更具挑战性。有关如何设置输入箱的任何建议? – luxdvie

+0

虽然有PrintTicket.InputBin属性,但对输入框的控制是有限的,主要是由于各种制造商以不同的方式实施它。使用XPS时,您通常需要选择一个输入PageMediaSize和PageMediaType,然后让打印机决定从哪个仓中提取。 – Jon

相关问题