2013-10-11 65 views
0

框架= .NET 4.5
语言= C#打印控制表格

我工作在一个相对简单的程序,其目标是替代使用.NET Windows应用程序的IBM Lotus Notes数据库应用程序。然而,我遇到了一些麻烦。

在笔记中,我很容易选择要打印的文档,然后使用选定的表格将所有选定的文档从视图中打印出来。我想尝试在我的WPF应用程序中复制这种效果。我一直在阅读这个主题,实际上我可以用一个可视化的文档打印出一个单独的文档(在这种情况下,一个网格可以保存所有的表单和用户输入的数据),除了事实以外,它看起来不错我宁愿在打印输出上看起来稍有不同,例如DatePicker设置为不显示其选择按钮。

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

+0

我已经完成了自己对这个问题的回答,但是我必须等几个小时才能发布。我今晚一定要这么做。 – Greg

回答

0

为了记录,这一直在等待,直到我允许我回答我自己的问题。我不能说我同意这个'逻辑'。

好吧,我设法或多或少的想出了一些东西,至少现在。我仍然打印使用视觉效果,因为它允许我使用我已经使用过的相同的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++; 
      } 
     } 

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