打印控制表格

时间:2013-10-11 10:03:33

标签: c# .net wpf

Framework = .NET 4.5
语言= C#

我正在开发一个相对简单的程序,其目标是用.NET Windows应用程序替换IBM Lotus Notes数据库应用程序。然而,我遇到了一些障碍。

在Notes中,我很容易选择要打印的文档,然后使用选定的表单打印出视图中的所有选定文档。我想尝试在我的WPF应用程序中复制此效果。我一直在阅读这个主题,事实上我可以使用视觉打印出单个文档(在这种情况下,网格包含所有表单和用户输入的数据),除了事实之外它看起来并不太糟糕我希望打印输出上的内容略有不同,即DatePicker设置为不显示其选择按钮。

这是我的实际问题。是否有可能创建这样一个“表单”,考虑到数据的位置必须严格地位于页面上的某个点(因此FlowDocument不是最好的主意),同时允许我使用这个单个元素作为主只需单击打印按钮即可打印多个表格(不包括文档选择)?我在哪里可以找到学习这种方法的好资源?

1 个答案:

答案 0 :(得分:0)

为了记录,这一直等到SO允许我回答我自己的问题。我不能说我同意这种“逻辑”。

好吧,我设法或多或少地弄明白了,至少目前如此。我仍然打算用视觉效果进行打印,因为它允许我使用我已经使用过的相同的xaml代码。这并不完美,但我会分享我所拥有的。

首先,我已经有了一系列要打印的对象。这是出于测试目的,因为这将是并且应该是用户定义的集合。然后我将该集合传递给我的print函数,如下所示:

private void Print_Test()
        {
            PrintDialog dlg = new PrintDialog();
            if (dlg.ShowDialog() == false) return;
            int i = 1;

            Size pageSize = new Size(dlg.PrintableAreaWidth, dlg.PrintableAreaHeight); //I found this Size object very important.  Without it I only got an empty page
            ReportPrintForm rf;
            foreach (KeyValuePair<String, Report> kvp in ((App)Application.Current).Reports)
            {
                rf = new ReportPrintForm(kvp.Value);
                rf.Measure(pageSize);
                rf.Arrange(new Rect(0, 0, pageSize.Width, pageSize.Height));
                dlg.PrintVisual(rf, "Job_" + i);
                i++;
            }
        }

现在,我知道这不是一个完美的功能,因为每个表单都是在自己的工作中打印的,但它是解决我使用一个严格创建的“表单”来打印多个对象的问题的起点。这将在没有用户看到的情况下打印出该表单,如果我想为用户演示使用一组样式而对可打印版本使用一种样式,这是很好的。缺点是,至少在目前,我必须手动设置字段(TextBoxes)的内容,而不能依赖于DataContext字段。我不知道为什么,但同样,这只是以后完成我的问题的起点。