0

我正在使用 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 被渲染?

4

1 回答 1

0

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

实际上,在调用renderer.RenderDocument();.

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

于 2018-03-15T15:52:53.620 回答