2017-05-25 81 views
8

我有一个选项,用户可以选择打印选项,它将打开PrintDialog,用户可以在其中选择已定义的打印机配置文件。使用选定的打印机配置文件/页面大小打印文件

对于此打印机,默认纸张尺寸为A4,但选择此配置文件时,它将变为A5。

我使用下面的代码将打印任务发送到正确的打印机,但由于它总是以A4打印,因此没有选择正确的纸张尺寸。我在这里错过了什么,或者有没有其他方法来实现这一目标?

using (var pd = new PrintDialog()) 
{ 
    if (pd.ShowDialog() == DialogResult.OK) 
     { 
     var info = new ProcessStartInfo(filepath) 
        { 
         Arguments = "\"" + pd.PrinterSettings + "\"", 
         CreateNoWindow = true, 
         WindowStyle = ProcessWindowStyle.Hidden, 
         UseShellExecute = true, 
         Verb = "Print" 
        }; 
     Process.Start(info); 
     } 
    } 
+3

这是过度不可能的任何程序与* *的文件路径将会欣赏那些你传递参数有关。一般来说,任何实现Print动词的程序都会自行决定使用哪种纸张。几乎总是在控制面板中配置的默认选择。 –

+0

看起来很像打印驱动程序的默认配置选项对话框,但您似乎将其作为单独的进程打开。您是否正在尝试制作更改默认打印机设置的程序? 换句话说,我很困惑你到底想要做什么。 S. Hooley的答案演示了从您的应用程序中实际打印页面的常用方法。我相信它可以与PrintDialog一起使用,以允许用户调整打印设置。 TLDR:请详细说明您正在尝试做什么。 – ashbygeek

回答

0

你应该能够指定page settings使用如下代码,它依靠的PrintDocument从System.Drawing.Printing。如果有必要,还可以定义事件处理程序使用PrintDocument类PrintPage事件:

PrintDocument pd = new PrintDocument(); 
//pd.PrintPage += new PrintPageEventHandler(handlePagePrint); 
pd.PrinterSettings.PrinterName = "Printer name goes here"; 
// select the appropriate item from the PaperSizes collection 
pd.DefaultPageSettings.PaperSize = pd.PrinterSettings.PaperSizes[0]; 

if (pd.PrinterSettings.IsValid) 
{ 
    pd.Print(); 
} 
+0

这可能是很好的显示如何与打印机设置对话框。 – ashbygeek