10

我想将图像添加到 MigraDoc 文档的标题中,但是在文档生成中硬编码文件系统路径对于一些问题来说有点问题 - 其中最重要的是它让我有点反感,而且,以保持部署简单(r)。

在我看来,如果我可以将图像作为资源嵌入到程序集中,并在 PDF 需要它时将其提取出来,这似乎是理想的,但似乎没有任何直接或内置的方法可以做到这一点。有什么技巧或想法吗?

4

2 回答 2

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");但请务必在之后删除图像或添加检查图像是否已存在以及文件大小是否正确(以防用户替换它)。

于 2013-05-21T14:14:46.943 回答
4

PDFSharp/MigraDoc 1.50 包括另一种方法来做到这一点。从MigraDoc 维基

PDFsharp 1.50 beta 2 添加了一项新功能:MigraDoc 现在接受包含带有前缀“base64:”的 BASE64 编码图像的文件名。在这种情况下,文件名不引用文件,文件名包含位图的所有位,采用 BASE64 编码的 ASCII 字符串。

于 2016-03-02T17:32:58.437 回答