MigraDoc 映像 - 何时可以删除映像



我正在使用MigraDoc进行PDF导出,并且应用程序的一部分允许用户将图像(MigraDoc.DocumentObjectModel.Shapes.Image)嵌入到文档中。图像存在于数据库中,我无法升级到处理内存中的FileStream图像的最新MigraDoc BETA。因此,我的解决方案是从数据库中读取图像并将它们存储在我的图像文件夹中的"临时"文件夹中,MigraDoc 将在那里引用图像。一旦PDF渲染,那么我将不再需要图像,并希望摆脱它。

PDF 文档呈现如下:

PdfDocumentRenderer renderer = new PdfDocumentRenderer(true, PdfSharp.Pdf.PdfFontEmbedding.Always);
renderer.Document = this.document;
renderer.RenderDocument();
byte[] pdfContents = null;
using (MemoryStream stream = new MemoryStream())
{
renderer.PdfDocument.Save(stream, true);
pdfContents = stream.ToArray();
}
return pdfContents;

并最终作为 FileContentResult 传递。

我的问题是我似乎无法摆脱在该过程的任何阶段添加到 PDF 文档中的文件......它们似乎是必需的,包括我返回FileContentResult的点。

PdfDocumentRenderer(或其他任何地方)上是否有一个设置可以嵌入图像,而不是依赖于它们在FileContentResult渲染之前就地存在?

调用renderer.PdfDocument.Save后不再需要图像文件。

实际上,在调用renderer.RenderDocument();后,应该不再需要这些图像。

一些背景信息
MigraDoc 的 WPF 版本使用类BitmapSource来打开图像。默认情况下,此类缓存映像,版本 1.32 使用默认选项,因此即使在释放 MigraDoc 映像后,映像文件仍保持锁定状态。
缓存的这种不必要的副作用在 2014 年 11 月得到了修复 - 从那时起,MigraDoc 在使用类BitmapSource打开图像时禁用缓存。
MigraDoc 的 GDI+ 版本从未出现过这种缓存问题。
如果您的公司坚持使用四年前发布的版本,那么您将错过从那时起应用的所有改进和错误修复。
也许 GDI 版本是此锁定问题的解决方案(假设此问题是关于不再需要时保持锁定状态的图像文件)。

最新更新