2009-07-24 26 views
5

我使用WPF打印路徑來處理在我們的應用程序中創建的大型大圖。整個圖表由視覺效果組成。保存並通過Paginator打印XPSDocument(似乎)會導致內容的光柵化

所謂的「DesignerPaginator」爲圖表分頁(這很簡單)。 從這一點,我做了以下三件事: - 我用PrintDialog.PrintDocument打印文檔(Paginator,Title) - 我還用XpsDocumentWriter.Write(Paginator,PrintTicket)創建了XPS文檔;我保存在HDD - )從XPSDocument我分配XpsDocumentWriter.GetFixedDocumentSequence(到的DocumentViewer

概括地說,下面的代碼是很重要的:

PrintDialog _pdialog = new PrintDialog(); 
System.Printing.ValidationResult result = this.PrintQueue.MergeAndValidatePrintTicket(this.PrintQueue.UserPrintTicket, this.PrintTicket); 

_pdialog.PrintTicket = result.ValidatedPrintTicket; 
XpsDocument _xpsDocument = new XpsDocument("C:\\test.xps",FileAccess.ReadWrite); 
XpsDocumentWriter xpsdw = XpsDocument.CreateXpsDocumentWriter(_xpsDocument); 
xpsdw.Write(this.Paginator, result.ValidatedPrintTicket); 
documentviewer.Document = _xpsDocument.GetFixedDocumentSequence(); 
_xpsDocument.Close(); 

_pdialog.PrintQueue = this.PrintQueue; 
_pdialog.PrintDocument(this.Paginator, "Model Test"); 

的輸出是下面的:

硬盤上的XPS - >絕對模糊。你無法識別任何東西。它就像一個100倍變焦的GIF文件。 來自DocumentViewer中XPSDocument的FixedDocumentSequence - > Perfect。這應該是什麼XPS文件的意圖是 打印輸出 - >可怕的,模糊的,但至少比xps文件好多了

現在神祕的部分:如果我直接從DocumentViewer打印(其中FixedDocumentSequence看起來很完美),我從第一張照片獲得相同的模糊輸出。

我對這種情況的想法是,WPF的XPS系統柵格化內容並將其作爲低質量位圖放置在xps文檔中。這些都是矢量,儘管如此,輸出對於低分辨率的位圖總是很熟悉。

我將不勝感激任何幫助。我沒有想法。我嘗試了很多方法來調試這個問題,但它似乎在某種程度上似乎是同時又簡單又微妙。

+0

我也一直在瘋狂地對抗光柵化。沒有樂趣。 – 2011-06-12 21:46:26

回答

4

我發現瞭如何避免我的問題,但我無法保證該解決方案也適用於您的問題。 實際上,在Visual中使用兩個嵌套的VisualBrushes似乎是在模糊輸出中使用結果。

我們在wpf打印中使用的一個VisualBrush是無法避免的:它是通過我們的Paginator應用來剪切Visual並將其分發到多個頁面上的VisualBrush。 我也有一個UserControl作爲「模板」。我用我們圖的VisualBrush繪製一個Rectangle到UserControl中,並且在這個操作之後,UserControl本身通過paginator將它自己繪製成帶有VisualBrush的Rectangle到頁面上。 由於WPF的打印路徑使用XPS進行打印,因此您還可以創建XPSDocument,將文件類型更改爲zip,將其解壓縮並使用任何文本編輯器分析文檔的一頁。 這將極大地幫助你理解你的問題。

我還懷疑當VisualBrush的內容沒有應用Visual的原始1:1高度/寬度比率時,文檔被「柵格化」。 調整大小計算中的錯誤導致應用的VisualBrush的1:0.9948高度/寬度比率,並導致模糊的輸出(不包括「嵌套的VisualBrush」問題)。

這仍然只是一個懷疑。我的問題已通過排除「額外」VisualBrush並尊重原始寬高比解決。也有可能假定一個或兩個問題只與某個視覺/效果/變換或者甚至是線性刷新相結合。

至少,我在關於這些問題時瞭解到有關WPF打印路徑的一件事情:想想事實上,您的東西總是會在場景後面轉換爲xps,而xps與wpf類似,但不會支持wpf所做的任何事情。事實上,如果我沒有理解它,XPS就是WPF中XAML的靈感。

我也非常歡迎任何真正的問題。我的問題解決了,但我想知道它爲什麼發生。

+0

我很想知道如何調試這種情況,而不必訴諸試驗和錯誤。 (這只是重申你的「Id像一個真正的答案」)。 – 2011-06-12 22:02:19