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

Posted

技术标签:

【中文标题】即使设置了值,打印范围也不起作用【英文标题】:Print range not working even if values are set 【发布时间】:2015-05-29 09:16:39 【问题描述】:

我设置了一个简单的打印解决方案,并且正常打印工作正常(测试了几次),但是当我使用 PrintDialog 指定自定义页面范围时,就好像该范围是 ingored。当我调试时,我检查了 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 事件处理程序中添加了代码来填充我正在打印的页面。

【问题讨论】:

什么是printdoc?你在哪里调用你的printDialog.Print___ 函数?您遗漏了一些可能很重要的细节。 它是 System.Drawing.Printing.PrintDocument 的一个实例。我在 PrintDocument 的 PrintPage 事件处理程序中添加了代码来填充我正在打印的页面。对不起,我应该把它包含在我的 OP 中。 【参考方案1】:

您需要告诉打印对话框它应该接受用户输入的页面范围。为此,您可以指定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 语句中。

【讨论】:

谢谢。这似乎解决了问题。会投票赞成这个答案,但目前我似乎不能这样做。

以上是关于即使设置了值,打印范围也不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥即使我在项目设置中更改了语言标准,std::lcm() 也不起作用?

即使 contentSize 大于 frame 并且在设置内容大小之前添加了子视图,滚动视图也不起作用

free() 在 c 代码和代码中收集垃圾值即使在释放后将指针设置为 NULL 也不起作用

即使看起来我摆脱了所有可能的问题,更漂亮的扩展也不起作用

即使在安装 .NET 核心 SDK 后,Dotnet 命令也不起作用

Spring Security - 即使凭据正确,身份验证也不起作用