2008-10-15 67 views
2

有沒有什麼方法在WPF中打印內存集合或可變大小?在WPF中打印一個集合

我正在使用下面的代碼打印ListView控件。但是當內容大於垂直滾動條接管並剪切內容時。

PrintDialog printDialog = new PrintDialog(); 
       printDialog.ShowDialog(); 

       printDialog.PrintVisual(lvDocumentSummary, "testing printing!"); 

回答

6

要打印多個頁面,您只需使用實現DocumentPaginator的類FixedDocument是更復雜的實現之一,FlowDocument更簡單一些。

FlowDocument fd = new FlowDocument(); 

foreach(object item in items) 
{ 
    fd.Blocks.Add(new Paragraph(new Run(item.ToString()))); 
} 

fd.Print(); 

PrintDialog pd = new PrintDialog(); 
pd.PrintDocument(fd); 
-1

有趣的是,ListView是虛擬化的嗎?如果是這樣,對象不被繪製,那是一種可能性。看看Petzold的Printing example

+1

我已簽出那個例子,但他使用的文件進行打印。我有一個內存集合可以打印! – azamsharp 2008-10-15 15:32:28

+0

Petzold鏈接不再存在 – 2010-02-22 19:11:56

-4

這是我解決這個問題的方法。這有點不穩定,但適合我的情況。

我讀了我的集合並將其轉換爲字符串。整個集合現在駐留在一個StringBuilder對象中。接下來,我在客戶機的文件中看到了文本/字符串,然後用/ p運行記事本進程來打印文件的內容。

它的工作原理和成功打印內容。

最後,有一個計時器在5秒鐘後被調用並刪除該文件。基本上在5秒內請求已經發送到打印機隊列。但更好的解決方案是確保打印作業已經以這種方式處理,您將100%確信作業已經完成。

0

如果你想從WPF打印漂亮的文件,你需要建立一個FixedDocument並打印它,不幸的是它可能非常複雜,這取決於你打印的內容。

有在這裏創建了一個固定文檔一些示例代碼:http://www.ericsink.com/wpf3d/B_Printing.html

2

固定文檔支持數據綁定(除FlowDocument的除外)像任何其他XAML文檔。只需在固定文檔中託管listview並將其顯示在DocumentViewer中(它具有內置的打印支持)。但是,如果你的列表對於一個頁面來說太長,FixedDocument不會自動生成一個新頁面(就像flowdocument一樣)。因此您必須使用代碼動態創建新頁面,因爲這不能在純xaml中完成。