首页 新闻 会员 周边 捐助

关于printdialog 打印空白的问题

0
悬赏园豆:10 [已关闭问题] 关闭于 2023-02-27 11:40

环境 : .net 6 wpf
我在调用printdialog.print(ui,名称) , 方法打印的时候, 在win7 系统下,必须把要打印的ui先显示到桌面上,再打印. 如果不显示直接打印,就会打印空白. 这个问题在win10上就不会出现

我的ui是一个wpf窗口, 里面是我要打印的内容, win10 下,直接new 这个窗口就可以, 而win7必须多一步 show 方法才行,
这是为什么呢?

百鸟朝凤的主页 百鸟朝凤 | 菜鸟二级 | 园豆:260
提问于:2022-03-20 13:13
< >
分享
所有回答(1)
0

也遇到这个问题了,请问这个问题解决了吗?请不啬赐教!

poisson_notes | 园豆:402 (菜鸟二级) | 2024-05-28 23:53

解决了, 我在打印的时候判断了一下系统是win7还是win10, win7的话就先显示窗口, 打印完毕再自动关闭, win10 则没有这步操作

支持(0) 反对(0) 百鸟朝凤 | 园豆:260 (菜鸟二级) | 2024-05-29 07:58

private OperatingSystem os = Environment.OSVersion; //获取系统版本

hesuanbaogaoyang bf = new hesuanbaogaoyang(result.data, true); //ui界面
if (os.Version.Major < 10)
{
bf.Show();
}
Task.Run(() => { speech.Speak("正在打印请稍等"); });
dialog.PrintVisual(bf.ddy, "报告单");
bf.Close();

支持(0) 反对(0) 百鸟朝凤 | 园豆:260 (菜鸟二级) | 2024-05-29 08:01

@百鸟朝凤: 非常感谢回复!昨天晚上我也狂找了一堆资料,从老外的描述中,win7 系统的话,应该在 PrintVisual 之前应该将要打印的控件要强制渲染一下,代码如下:

            PrintDialog printDlg = new PrintDialog();
            // Force the content to be rendered
            {
                //win7 系统的机器 如果不加这一段的话,会打印出空白页
                this.Measure(new System.Windows.Size(this.LayoutRoot.Width + this.LayoutRoot.Margin.Left, this.LayoutRoot.Height + this.LayoutRoot.Margin.Top));
                this.Arrange(new Rect(new System.Windows.Point(0, 0), this.DesiredSize));
                this.UpdateLayout();
            }
            printDlg.PrintVisual(this, "Print DrugLabel");

我试了一下,win7下现在是可以打印了!

支持(0) 反对(0) poisson_notes | 园豆:402 (菜鸟二级) | 2024-05-29 09:33

@poisson_notes: 嗯,和我的差不多, 都是一个意思, 我是直接调用了页面, 显示下再关闭

支持(0) 反对(0) 百鸟朝凤 | 园豆:260 (菜鸟二级) | 2024-05-29 09:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册