2010-10-14 59 views
1

我们目前使用WPF创建多页发票文档,然后通过XPS打印/输出。WPF打印 - 通过Flowdocument,Paginator和FixedDocument的多页发票

我们为实现此目的而创建的路径是创建一个包含标准ListBox等的UserControl,并显示Invoice行,然后将其包含在BlockUIContainer标记中的FlowDocument中。

当此FlowDocument放置在窗口中的FlowDocumentScrollViewer标记中时,它完美地工作,UserControl的数据绑定内容正确显示。但是,当我们尝试在代码中创建相同的FlowDocument时,它将以“'无法创建未知类型'{clr-namespace:FOO} FooUserControl”XamlParseException失败。如果删除UserControl,则可以以编程方式成功创建FlowDocument。

这是XAML的FlowDocument:

<FlowDocument xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:local="clr-namespace:MARS" 
      ColumnWidth="400" FontSize="14" FontFamily="Georgia"> 
<Paragraph> 
    Blah 
</Paragraph> 

<BlockUIContainer> 
    <local:printTestUserControl></local:printTestUserControl> 
</BlockUIContainer> 

这是我们使用的代码来创建它的代码:

FileStream xamlFile = new FileStream("printTestFlowDoc.xaml", FileMode.Open, FileAccess.Read);    
FlowDocument content = (FlowDocument)XamlReader.Load(xamlFile); 
flowDocScrollViewer.Document = content; 
xamlFile.Close(); 

的原因,我们正在创建的的FlowDocument在代码中是使用一个Paginator对象将其分成一系列的FixedDocuments然后打印/导出到XPS,但我们还没有尝试过,但从我读到的东西看来,这似乎是这样的是一种在WPF中实现多页文档打印的可行方法(其中文档在第一页上有一个标题,最后一个总页脚,以及两行之间的x页)。

有关此问题或其他方法的任何建议将非常受欢迎。

这些是我们从目前为止收集到的一些信息的一些链接,但可惜还不够! (我会包括注释的各个环节,如StackOverflow的目前不超过一个环节相信我!)

See the section "Dynamically Creating a FlowDocument, Data Binding and Printing It"斯科特Hanselmann似乎已经为我们做了同样的问题,但添加行

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.SystemIdle, new DispatcherOperationCallback(delegate { return null; }), null); 

没有得到我们的FlowDocument加载,但他只绑定在他的FlowDocument的TextBlocks,而不是包括用户控件。

非常感谢您的阅读!并为任何人提供帮助。

+0

Feng Yuan - 将XAML流文档转换为XPS样式(多页,页面大小,页眉,页边距) http://blogs.msdn.com/b/fyuan/archive/2007/03/10/convert- xaml-flow-document-to-xps-with-style-multiple-page-page-size-header-margin.aspx – Ted 2010-10-14 09:50:24

+1

RoeCode的FlowDocument打印系列的最后部分 http://roecode.wordpress.com/2008/05/28/using-flowdocuments-xaml-to-print-xps-documents-part-6/ – Ted 2010-10-14 09:50:51

+0

MSDN - 如何:将XAML文件加载到FlowDocumentScrollViewer中 http://msdn.microsoft.com/en-us/库/ ms753299.aspx – Ted 2010-10-14 09:51:13

回答

0

对不起,我整理这个问题的速度很慢,但我们刚刚完成了这个项目,现在我正在整理所有这些松散的结果。

事实证明,流程文档/ XPS方法是一个完全错误的方式来处理此任务,事实上,内置的RDLC报告使我们能够以相对直接的方式实现发票文档所需的一切。

这样做的主要好处是,我们能够报告我们业务模型对象的内存实例,而不必使用从数据库中查找的数据,通过从晶体调用的存储过程,前一个系统依靠。 VS中的报告文件编辑器很容易处理,如果在布置复杂的报告时有时会有点恼人。

希望这对于考虑他们的选择的人来说可能有用,因为它涉及到WPF应用程序的报告。