即使设置了值,打印范围也不起作用

时间:2015-03-25 15:38:22

标签: c# printing printdialog

我有一个简单的打印解决方案设置和正常打印工作正常(测试了几次),但是当我使用PrintDialog指定自定义页面范围时,就好像范围是中转的。当我调试时,我检查printDocument对象并确认范围值是正确的,但打印机生成的最终产品与我给出的值相差不多。

这是我的代码:

            printDialog.Document = printdoc;
            printDialog.AllowSomePages = true;

            if (printDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                printdoc.PrinterSettings.FromPage = printDialog.PrinterSettings.FromPage;
                printdoc.PrinterSettings.ToPage = printDialog.PrinterSettings.ToPage;
                printdoc.PrinterSettings.PrintRange = printDialog.PrinterSettings.PrintRange;

                printPreviewDialog.Document = printdoc;
                printPreviewDialog.FindForm().WindowState = FormWindowState.Maximized;
                printPreviewDialog.ShowDialog();
            }

*注意 - printdoc是System.Drawing.Printing.PrintDocument的一个实例。我在PrintDocument的PrintPage事件处理程序中添加了代码,以填充我正在打印的页面。

1 个答案:

答案 0 :(得分:2)

您需要告诉打印对话框它应该接受页面范围的用户输入。为此,您可以指定PrinterSettings.PrintRange

var printDialog = new PrintDialog();
printDialog.AllowSomePages = true; //May not be needed
printDialog.PrinterSettings.PrintRange = PrintRange.SomePages; //Needed
if(printDialog.ShowDialog() == DialogResult.OK)
{
    // ... do the rest here
}

注意:您应该获得的主要内容是您需要设置PrintDialog.AllowSomePages = true(以及From / ToPage)以告知对话框仅打印这些范围。此外,我不确定在关闭对话框后设置AllowSomePages是否会生效,这就是我将代码置于ShowDialog之前的原因。您可以尝试在方便时将其设置在if语句中。