0

框架 = .NET 4.5
语言 = C#

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

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

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

4

1 回答 1

0

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

好吧,至少现在,我或多或少地弄清楚了一些事情。我仍将使用视觉效果进行打印,因为它允许我使用我已经使用过的相同 xaml 代码。它并不完美,但我会分享我所拥有的。

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

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++;
            }
        }

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

于 2013-10-11T18:10:40.467 回答