2015-03-05 3 views
1

Здравствуйте, Мы пытаемся создать собственную систему шаблонов, такую ​​как элементы заголовка и нижнего колонтитула WPF, с холстом для 2D-чертежей для экспорта в PDF. Проблема в том, что XpsWriter занимает около 7 секунд для написания документа XPS и еще 3 секунды для преобразования в PDF с помощью PDFSharp. Нам нужно это сделать, поскольку пользователь ждет PDF. Сначала я подозревал его в связи с количеством FrameworkElements в нем, но их всего 5000. Элементы структуры - это в основном данные PATH с заливками, штрихами и кистями.WPF to XPS Very Slow

Canvas ComplexCanvas = new Canvas(); 
ComplexCanvas.Children.Add(5000Elements); 

     System.Windows.Documents.FixedDocument fixedDoc = new System.Windows.Documents.FixedDocument(); 
     System.Windows.Documents.PageContent pageContent = new System.Windows.Documents.PageContent(); 
     System.Windows.Documents.FixedPage fixedPage = new System.Windows.Documents.FixedPage(); 

     //Create first page of document 
     fixedPage.Children.Add(ComplexCanvas); 
     fixedPage.Width = PageWidth; 
     fixedPage.Height = PageHeight; 
     ((System.Windows.Markup.IAddChild)pageContent).AddChild(fixedPage); 


     fixedDoc.Pages.Add(pageContent); 


     System.Windows.Xps.Packaging.XpsDocument xpsd = new XpsDocument(Path, System.IO.FileAccess.Write); 
     System.Windows.Xps.XpsDocumentWriter xw = XpsDocument.CreateXpsDocumentWriter(xpsd); 
     xw.Write(fixedDoc); 
     xpsd.Close(); 

Кто-нибудь знает способ ускорить это? Возможно, какой-то тип Visual Object или «Сгладить» Canvas каким-то образом или любые идеи. Когда он работает, PDF составляет более 5 МБ.

Хотелось бы, чтобы держать его VECTOR как можно больше

+0

Я только что обнаружил, что использование прозрачных кистей в некоторых случаях приводило к сбою PDFSharp. Вместо этого я использовал пустую визуальную кисть. Это само по себе вызывает дополнительные 5 секунд –

+0

Получается, что SolidColorBrush («Цвет») использует больше ресурсов, чем «Brush.Color». Использование Brush.Color потребовало дополнительных 5 секунд с конвертацией в XPS –

ответ

0

Есть несколько способов ускорить преобразование из WPF в XPS в формате PDF: -

  1. Мораторий любые ручки или кисти, как это будет ускорить рендеринг: -

    SolidColorBrush brush = new SolidColorBrush(Colors.PaleGreen); 
        brush.Opacity = .25d; 
        brush.Freeze(); 
        Pen paleGreenPen = new Pen(brush, 1); 
        paleGreenPen.Freeze(); 
    
        Pen linePen = new Pen(Brushes.Red, 1); 
        linePen.Freeze(); 
    
  2. Рендер в фоновом режиме (создать фоновый поток пользовательского интерфейса).

  3. Не сохраняйте промежуточный документ XPS на диск, но используйте MemoryStream.
+0

Как вы замораживаете кисть? – ascriven

+0

@ascriven См. Мой обновленный ответ. –

+0

Благодарим за последующие действия – ascriven