2009-07-24 2 views
5

Я использую путь печати WPF для обработки больших диаграмм, созданных в нашем приложении. Вся диаграмма состоит из визуальных эффектов.Сохранение и печать XPSDocument через Paginator (похоже) вызывает растеризацию содержимого

Так называемый «DesignerPaginator» разбивает диаграммы на диаграмму (это довольно просто). С этого момента я делаю следующие три вещи: - Я печатаю документ с PrintDialog.PrintDocument (Paginator, Title) - Я также создаю XPS-документ с XpsDocumentWriter.Write (Paginator, PrintTicket); которые я экономлю на 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 на HDD -> абсолютно размытый. Вы ничего не узнаете. Это похоже на GIF-файл с 100-кратным увеличением. FixedDocumentSequence из XPSDocument в DocumentViewer -> Perfect. Это должно быть то, что XPS-файл должен быть . Версия для печати -> Ужасно, размыто, но по крайней мере намного лучше, чем файл xps.

И теперь таинственная часть: если я печатаю непосредственно из DocumentViewer (в котором FixedDocumentSequence кажется идеальным), я получаю тот же размытый вывод из первой печати.

Моя мысль об этом случае заключается в том, что система XPS WPF растеризует контент и помещает его в качестве растрового изображения низкого качества в документе xps. Это все векторы, и, несмотря на это, вывод всегда кажется знакомым для растрового изображения с низким разрешением.

Буду признателен за любую помощь. У меня нет идей. Я много пробовал отлаживать эту проблему, но это как-то кажется простым и деликатным одновременно.

+0

Я тоже борюсь с растеризацией, как сумасшедший. вообще не весело. –

ответ

4

Я узнал, как избежать моей проблемы, но я не могу гарантировать, что решение также применимо к вашему. На самом деле, кажется, что с использованием двух вложенных VisualBrushes, проецируемых на ваш Visual, вы используете результаты в размытом выходе.

Одного VisualBrush, который мы используем в печати wpf, нельзя избежать: это тот, который применяется через наш Paginator для вырезания Визуализации и распространения его на несколько страниц. У меня также был один UserControl, который служил «Шаблон». Я рисую Rectangle с VisualBrush нашей диаграммы в UserControl, и после этой операции сам UserControl вытягивает себя как Rectangle с VisualBrush на страницы с помощью paginator. Поскольку путь печати WPF использует XPS для печати, вы также можете создать XPSDocument, изменить тип файла на zip, извлечь его и проанализировать одну страницу вашего документа с помощью любого текстового редактора. Это поможет вам понять вашу проблему.

Я также подозреваю, что документ «растеризован», когда содержимое VisualBrush не применяется с исходным соотношением высоты и ширины 1: 1, которое имеет вид Visual. Ошибки при вычислении изменения размеров привели к соотношению высоты и ширины 1: 0.9948 для применяемого VisualBrush, что привело к размытому результату (исключая проблему «вложенного VisualBrush»).

Это все еще просто подозрение. Моя проблема была решена путем исключения «лишнего» VisualBrush и соблюдения исходного соотношения сторон. Можно также предположить, что одна или обе проблемы появляются только в сочетании с определенным Visual/Effect/Transformation или даже LinearBrushes.

По крайней мере, я узнал одну вещь о пути печати WPF, когда речь заходит о таких проблемах: подумайте о том, что ваш материал всегда преобразуется в xps за сценой, а xps похож на wpf, но не поддерживайте что-нибудь wpf. На самом деле, если бы я не пропустил этого, XPS стал вдохновением для XAML в WPF.

Я также очень признателен за любые реальные ответы на эту проблему. Моя проблема решена, но я хочу знать, почему это произошло.

+0

Я хотел бы узнать, как отлаживать эти ситуации и не прибегать к пробным ошибкам и ошибкам. (который просто повторяет ваш «Ид как настоящий ответ»). –

Смежные вопросы