2009-07-24 16 views
5

Tôi sử dụng Đường dẫn In WPF để xử lý các biểu đồ lớn lớn được tạo trong ứng dụng của chúng tôi. Toàn bộ sơ đồ bao gồm các hình ảnh.Lưu và in XPSDocument thông qua Trình ngắt (dường như) gây ra sự rasterization nội dung

Cái gọi là "DesignerPaginator" phân loại sơ đồ (nó khá đơn giản). Từ thời điểm này, tôi thực hiện ba điều sau đây: - Tôi in Tài liệu bằng PrintDialog.PrintDocument (Người trích dẫn, Tiêu đề) - Tôi cũng tạo Tài liệu XPS với XpsDocumentWriter.Write (Paginator, PrintTicket); mà tôi lưu trên HDD - Từ XPSDocument tôi gán XpsDocumentWriter.GetFixedDocumentSequence() để một DocumentViewer

Tóm lại, đoạn mã sau là rất quan trọng:

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"); 

Kết quả như sau:

XPS trên HDD -> hoàn toàn mờ. Bạn không thể nhận ra bất cứ điều gì. Nó giống như một tệp GIF với Zoom 100x. FixedDocumentSequence từ XPSDocument trong DocumentViewer -> Hoàn hảo. Tập tin XPS có nghĩa là Đầu ra in -> Kinh khủng, mờ, nhưng ít nhất tốt hơn nhiều so với tệp xps

Và bây giờ phần bí ẩn: Nếu tôi in trực tiếp từ DocumentViewer (trong đó FixedDocumentSequence có vẻ hoàn hảo), tôi nhận được cùng một kết quả mờ từ bản in đầu tiên.

Suy nghĩ của tôi về trường hợp này là hệ thống XPS của WPF rasterize nội dung và đặt các công cụ như bitmap chất lượng thấp trong tài liệu xps. Đó là tất cả các vectơ, và mặc dù thực tế này, đầu ra dường như luôn quen thuộc với một bitmap có độ phân giải thấp.

Tôi sẽ đánh giá cao bất kỳ trợ giúp nào. Tôi hết ý tưởng. Tôi đã cố gắng rất nhiều để gỡ lỗi vấn đề này, nhưng nó bằng cách nào đó có vẻ là một cái gì đó đơn giản và tinh tế cùng một lúc.

+0

Tôi cũng đã chiến đấu rasterization như điên. không vui chút nào. –

Trả lời

4

Tôi đã tìm hiểu cách tránh sự cố của mình, nhưng tôi không thể đảm bảo giải pháp cũng áp dụng cho bạn. Trong thực tế, có vẻ như sử dụng hai VisualBrushes lồng nhau chiếu trên Visual của bạn, bạn đang sử dụng kết quả trong đầu ra mờ.

Một VisualBrush chúng tôi sử dụng trong in wpf không thể tránh được: nó là một trong đó được áp dụng thông qua Trình chấm công của chúng tôi để cắt hình ảnh và phân phối nó trên nhiều trang. Tôi cũng có một UserControl được dùng làm "Mẫu". Tôi vẽ một hình chữ nhật với VisualBrush của sơ đồ của chúng tôi vào UserControl, và sau khi hoạt động này, UserControl chính nó là vẽ chính nó như là hình chữ nhật với một VisualBrush lên các trang của các paginator. Vì đường dẫn in của WPF sử dụng XPS để in, bạn cũng có thể tạo XPSDocument, thay đổi loại tệp thành zip, trích xuất và phân tích một trang tài liệu của bạn bằng bất kỳ trình soạn thảo văn bản nào. Điều này sẽ giúp bạn hiểu rõ vấn đề của mình.

Tôi cũng nghi ngờ rằng tài liệu được "rasterized" khi nội dung của VisualBrush không được áp dụng với tỷ lệ chiều cao/chiều rộng 1: 1 ban đầu mà Visual có. Lỗi trong một phép tính thay đổi kích thước dẫn đến tỷ lệ chiều cao/chiều rộng 1: 0,9948 cho VisualBrush được áp dụng và điều này dẫn đến kết quả bị mờ (không bao gồm vấn đề "VisualBrush lồng nhau").

Điều này vẫn chỉ là một sự nghi ngờ. Vấn đề của tôi đã được giải quyết bằng cách loại trừ "thêm" VisualBrush và tôn trọng tỷ lệ khung hình gốc. Cũng có thể giả định rằng một hoặc cả hai vấn đề chỉ xuất hiện kết hợp với một Visual/Effect/Transformation nhất định hoặc thậm chí LinearBrushes.

Ít nhất, tôi đã học được một điều về Đường dẫn in WPF khi nói đến các vấn đề như vậy: Hãy suy nghĩ thực tế rằng công cụ của bạn luôn được chuyển đổi thành xps phía sau cảnh và xps tương tự như wpf, nhưng không hỗ trợ bất cứ điều gì wpf nào. Trong thực tế, Nếu tôi không hiểu sai, XPS là nguồn cảm hứng cho XAML trong WPF.

Tôi cũng rất hoan nghênh mọi câu trả lời thực sự cho vấn đề này. Vấn đề của tôi được giải quyết, nhưng tôi muốn biết tại sao nó lại xảy ra.

+0

Tôi rất muốn tìm hiểu cách gỡ lỗi các tình huống này và không phải sử dụng để thử nghiệm và báo lỗi. (mà chỉ là nghỉ ngơi "Id của bạn giống như một câu trả lời thực sự"). –