MigraDoc图像 - 我什么时候可以删除图像

时间:2018-03-15 14:19:29

标签: c# migradoc filecontentresult

我正在使用MigraDoc进行PDF导出,部分应用程序允许用户将图像(MigraDoc.DocumentObjectModel.Shapes.Image)嵌入到Document中。图像存在于数据库中,我无法升级到处理来自Memory的FileStream图像的最新MigraDoc BETA。因此,我的解决方案是从数据库中读取图像并将它们存储在Images文件夹中的“Temporary”文件夹中,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之后才是原位的?

1 个答案:

答案 0 :(得分:0)

在致电renderer.PdfDocument.Save后,不再需要图像文件。

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

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