WPF打印:无法获得打印机支持的PageMediaSize

时间:2019-03-21 12:25:39

标签: .net wpf printing printdialog printqueue

我正在研究WPF应用程序,并且在打印中遇到了一些问题。 PrintQueue.GetPrintCapabilities()。PageMediaSizeCapability 集合没有打印机支持的所有PageMediaSize。我正在使用hp officejet 7610驱动程序(支持A3 PageMediaSize)。但是PrintQueue.GetPrintCapabilities()。PageMediaSizeCapability集合没有A3 PageMediaSize。因此,打印机以默认/选定的PageMediaSize打印页面。

例如,我有一个页面尺寸为A3(1122.5 * 1587.4)。并且我试图在A3纸上打印页面(1122.5 * 1587.4),但仅打印区域(796.8 * 1123.2)。

但是,我试图像下面那样为PrintTicket设置自定义PageMediaSize。

printDialog.PrintTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA3);

(或)

printDialog.PrintTicket.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA3, 1122.5, 1587.4);

(或)

printDialog.PrintTicket.PageMediaSize = new PageMediaSize(1122.5, 1587.4);

尝试了所有其他与A3相关的PageMediaSize(ISOA3,ISOA3Extra,ISOA3Rotated,OtherMetricA3Plus)。不幸的是,这是行不通的。打印机将忽略我要设置的自定义纸张尺寸。我尝试了几种打印机驱动程序,结果是相同的。

此外,我还尝试了如下所示的PrintQueue.MergeAndValidatePrintTicket,

PrintTicket pt = new PrintTicket();
pt.PageMediaSize = new PageMediaSize(PageMediaSizeName.ISOA3, 1122.5, 1587.4);
pt.PageMediaType = PageMediaType.None;
System.Printing.ValidationResult result = printDialog.PrintQueue.MergeAndValidatePrintTicket(printDialog.PrintQueue.DefaultPrintTicket, pt);
printDialog.PrintQueue.UserPrintTicket = result.ValidatedPrintTicket;
printDialog.PrintQueue.Commit();

不幸的是,这也不起作用。

最后,问题是如何将自定义PageMediaSize设置为PrintTicket(或)如何获取打印机支持的所有PageMediaSize?有人可以建议我们如何达到预期的结果吗?

1 个答案:

答案 0 :(得分:0)

能否请您尝试以下代码以获取有关打印机的信息

printQueue.GetPrintCapabilitiesAsXml() 

此致

Kerthivasan R。