我想在MigraDoc文档的页眉中添加一张图片,但是在文档生成中硬编码文件系统路径会有一些问题 - 其中最小的问题不是让我感到有点恶心,而是为了保持部署更简单。
如果我能将图像作为资源嵌入程序集,并在需要时将其提取出来用于PDF,则对我来说似乎是理想的,但似乎没有任何直接或内置的方法来实现这一点。有什么技巧或想法吗?
PDFSharp/MigraDoc 1.50新增了另一种方法来实现此功能。根据MigraDoc wiki的介绍:
在PDFSharp 1.50 beta 2中,添加了一个新功能:MigraDoc现在接受包含以“base64:”为前缀的BASE64编码图像的文件名。在这种情况下,文件名不是指向一个文件,而是将所有位图的位以ASCII字符串和BASE64编码的形式包含在文件名中。
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");
使用它。但一定要在之后删除该图像,或者添加一个检查,以确定图像是否已经存在并且文件大小是否正确(以防用户替换了它)。