我想在MigraDoc文档的标题中添加一个图像,但是在文档生成中硬编码文件系统路径对于一些问题来说有点问题 - 其中最重要的是它让我有点不安,还要保持部署简单(r)。
如果我可以将图像作为资源嵌入到程序集中,并且只是在需要PDF时提取它,那么在我看来这是理想的,但似乎没有任何简单或内置的方式做这个。任何技巧或想法?
答案 0 :(得分:4)
不,MigraDoc不允许这样做。有一个hack,但它只有在你使用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");
使用它但是请务必在之后删除图像,或者添加一个检查图像是否已经存在以及文件大小是否正确(如果用户更换了它)。
答案 1 :(得分:2)
PDFSharp / MigraDoc 1.50包含另一种方法。来自MigraDoc wiki:
使用PDFsharp 1.50 beta 2,添加了一项新功能:MigraDoc现在接受包含带有前缀“base64:”的BASE64编码图像的文件名。在这种情况下,文件名不引用文件,文件名包含具有BASE64编码的ASCII字符串中位图的所有位。