在MigraDoc文档中添加嵌入式资源图片

11

我想在MigraDoc文档的页眉中添加一张图片,但是在文档生成中硬编码文件系统路径会有一些问题 - 其中最小的问题不是让我感到有点恶心,而是为了保持部署更简单。

如果我能将图像作为资源嵌入程序集,并在需要时将其提取出来用于PDF,则对我来说似乎是理想的,但似乎没有任何直接或内置的方法来实现这一点。有什么技巧或想法吗?

2个回答

5

PDFSharp/MigraDoc 1.50新增了另一种方法来实现此功能。根据MigraDoc wiki的介绍:

在PDFSharp 1.50 beta 2中,添加了一个新功能:MigraDoc现在接受包含以“base64:”为前缀的BASE64编码图像的文件名。在这种情况下,文件名不是指向一个文件,而是将所有位图的位以ASCII字符串和BASE64编码的形式包含在文件名中。


这是一个例子:https://tkit.dev/2015/12/13/loading-embedded-resource-images-into-pdfsharpmigradoc-for-non-web-projects-layers/ - flotto

3
不,MigraDoc不允许这样做。有一种方法可以实现,但只适用于使用ASP .NET并且未使用文档预览的情况。请参阅官方论坛中解释详细问题的这些帖子。 您可以通过一种解决方法使用嵌入式资源,即暂时保存它们,并在完成后通过dispose方法和析构函数将其删除。示例:
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.UriSource = new Uri("pack://application:,,/Resources/temp.png");
bi.EndInit();
PngBitmapEncoder pbe = new PngBitmapEncoder();
pbe.Frames.Add(BitmapFrame.Create(bi));
using (FileStream fs = new FileStream("temp.png", FileMode.Create))
{
    pbe.Save(fs);
}

然后,您可以通过MigraDocObject.AddImage("temp.png");使用它。但一定要在之后删除该图像,或者添加一个检查,以确定图像是否已经存在并且文件大小是否正确(以防用户替换了它)。


https://dev59.com/GG435IYBdhLWcg3wigok#35754231 是更好的解决方案。 - flotto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接