0

我正在使用 PdfSharp 将 WPF 窗口保存到 PDF 中。执行以下代码时出现 System.OutOfMemoryException:-

using (MemoryStream lMemoryStream = new MemoryStream())
{
    Package package = Package.Open(lMemoryStream, FileMode.Create);
    var doc = new System.Windows.Xps.Packaging.XpsDocument(package);
    XpsDocumentWriter writer = System.Windows.Xps.Packaging.XpsDocument.CreateXpsDocumentWriter(doc);

    double dpiScale = 600.0 / 96.0;
    var renderBitmap = new RenderTargetBitmap(Convert.ToInt32(this.Width * dpiScale),
                           Convert.ToInt32(this.Height * dpiScale),
                           600.0,
                           600.0,
                           PixelFormats.Pbgra32);
    renderBitmap.Render(this);
    var visual = new DrawingVisual();
    using (var dc = visual.RenderOpen())
    {
        dc.DrawImage(renderBitmap, new Rect(0, 0, this.Width, this.Height));
    }                

    writer.Write(visual);
    doc.Close();
    package.Close();

    var pdfXpsDoc = PdfSharp.Xps.XpsModel.XpsDocument.Open(lMemoryStream);
    XpsConverter.Convert(pdfXpsDoc, _pdfFileName, 0);
}

在上面的代码片段中,如果我在创建 RenderTargetBitmap 时将 dpiScale 中的 600.0 值更改为 300.0,我不会收到 OutOfMemoryException,但保存的 PDF 的质量不好。

如何处理 PdfSharp XpsDocument?我相信它会导致一些内存泄漏。

4

0 回答 0