您好我们正在尝试创建一个基于WPF Header和Footer元素的自定义模板系统,并使用用于2D工程图的画布导出为PDF。问题是XpsWriter需要大约7秒来编写XPS文档,而另外3秒需要用PDFSharp转换为pdf。我们需要在用户等待PDF时将其关闭。我首先怀疑它是由于FrameworkElements的数量,但只有5000.框架元素主要是填充,笔画和画笔的PATH数据。
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,或者" Flatten" Canvas不知何故或任何想法。当它工作时,PDF超过5MB。
希望尽可能保持VECTOR
答案 0 :(得分:0)
有几种方法可以加快从WPF到XPS到PDF的转换: -
冻结任何笔或画笔,因为这会加快渲染速度: -
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();
在后台渲染(创建后台UI线程)。