我們目前使用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