2010-10-14 87 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應用程序的報告。