Я использую 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);
}
В приведенном выше фрагменте, если я изменю значение 600,0 на 300,0 в dpiScale при создании RenderTargetBitmap, я не получу исключение OutOfMemoryException, но качество сохраненного PDF-файла будет плохим.
Как избавиться от PdfSharp XpsDocument? Я считаю, что это вызывает некоторую утечку памяти.
IDispose
и свободные объекты, которые больше не нужны. Я никогда не использовал XPS-расширение PDFsharp и понятия не имею, как превратить ваш фрагмент кода во что-то, что я мог бы протестировать на своем компьютере. И потому что я думаю, что вы на неправильном пути, я тоже не очень склонен проверять это на своем компьютере. Нужен ли вам XpsConverter, если у вас уже есть растровое изображение? PDFsharp может обрабатывать растровые изображения без XpsConverter. - person I liked the old Stack Overflow   schedule 20.12.2017