我们目前使用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,而不是包括用户控件。
非常感谢您的阅读!并为任何人提供帮助。
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
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
MSDN - 如何:将XAML文件加载到FlowDocumentScrollViewer中 http://msdn.microsoft.com/en-us/库/ ms753299.aspx – Ted 2010-10-14 09:51:13