即使设置了值,打印范围也不起作用
Print range not working even if values are set
我设置了一个简单的打印解决方案,正常打印工作正常(测试了几次),但是当我使用 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 事件处理程序中添加了代码来填充我正在打印的页面。
您需要告诉打印对话框它应该接受用户输入的页面范围。为此,您可以指定 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 语句中。
我设置了一个简单的打印解决方案,正常打印工作正常(测试了几次),但是当我使用 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 事件处理程序中添加了代码来填充我正在打印的页面。
您需要告诉打印对话框它应该接受用户输入的页面范围。为此,您可以指定 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 语句中。