I '
Интересно, что при использовании VisualsToXpsDocument для пакетной записи я могу создать контент для 186 страниц за то время, которое требуется инфраструктуре печати для обработки 21 страницы. Здесь что-то действительно не так.
Чтобы убедиться, что это не просто проблема сложности некоторых элементов управления в приложении, я создал автономное демонстрационное приложение, которое содержит только сетку данных, заполненную 4000 строками статических данных. и около 8 столбцов. Нет проблем с производительностью с самой сеткой данных, только с печатью. Вот наиболее распространенный подход, который я использовал, который дает плохие результаты.
this.writer
= PrintQueue.CreateXpsDocumentWriter(this.SelectedPrinter.PrintQueue);
PrintingDocumentPaginator paginator
= new PrintingDocumentPaginator(this.PrintConfiguration,
contentSize, pageSize, contentRect, this.printSource, false);
this.writer.WritingProgressChanged += this.OnPrintingProgressChanged;
this.writer.WritingCompleted += this.OnPrintingCompleted;
this.writer.WritingCancelled += this.OnPrintingCanceled;
this.writer.WriteAsync(paginator,
this.PrintConfiguration.PrintTicket, paginator.PageCount);
В качестве альтернативы, если я использую следующий код, вызов EndBatchWrite () будет выполнен очень быстро, а остальная часть процесса печати займет гораздо больше времени.
this.writer
= PrintQueue.CreateXpsDocumentWriter(this.SelectedPrinter.PrintQueue);
PrintingDocumentPaginator paginator
= new PrintingDocumentPaginator(this.PrintConfiguration,
contentSize, pageSize, contentRect,
this.printSource, this.useVectorData);
this.writer.WritingProgressChanged += this.OnPrintingProgressChanged;
this.writer.WritingCompleted += this.OnPrintingCompleted;
this.writer.WritingCancelled += this.OnPrintingCanceled;
VisualsToXpsDocument sdf
= (VisualsToXpsDocument)this.writer.CreateVisualsCollator();
for (int i = 0; i < paginator.PageCount; i++)
{
sdf.WriteAsync(paginator.GetPageVisual(i));
}
sdf.EndBatchWrite();
Так что я здесь делаю не так? Я отправляю на принтер неправильные данные? Есть какой-то секрет, который я не вижу?
РЕДАКТИРОВАТЬ - Это относится как к физическим принтерам, так и к файловым принтерам, например, к принтеру XPS, PDF и т. Д.
Ура,
Сэм.