将嵌入资源图像添加到 MigraDoc 文档

发布于 2024-10-24 04:47:38 字数 186 浏览 3 评论 0原文

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

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

I'd like to add an image to the header of a MigraDoc document, but hardcoding a filesystem path in the document generation is slightly problematic for a number of issues - not the least of which is that it makes me a little queasy, but also, to keep deployment simple(r).

It would seem to me ideal if I could embed the image as a resource in the assembly, and just extract it when it was needed for the PDF, but there doesn't seem ot be any straightforward or built-in way to do this. Any tricks or ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

帥小哥 2024-10-31 04:47:38

PDFSharp/MigraDoc 1.50 包含另一种方法来执行此操作。来自 MigraDoc wiki

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

PDFSharp/MigraDoc 1.50 includes another way to do this. From the MigraDoc wiki:

With PDFsharp 1.50 beta 2, a new feature was added: MigraDoc now accepts filenames that contain BASE64-encoded images with the prefix "base64:". In this case, the filename does not refer to a file, the filename contains all the bits of the bitmap in an ASCII string with the BASE64 encoding.

〆凄凉。 2024-10-31 04:47:38

不可以,MigraDoc 不允许这样做。有一个 hack,但它仅在您使用 ASP .NET 并且不使用文档预览时才有效。请参阅官方论坛中的这些帖子,其中详细解释了该问题:

您可以通过解决方法使用嵌入资源,即暂时保存它们并通过以下方式删除它们完成后的处理方法和析构函数。示例:

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"); 使用它,但请务必随后删除图像或添加检查图像是否已存在以及是否具有正确的文件大小(如果用户更换它)。

No, MigraDoc does not allow this. There is a hack, but it works only if you use ASP .NET and you are not using the document preview. See these threads in the official forum which explain the problem in detail:

You can use the embedded resources via a workaround, i.e. save them temporarily and delete them via the dispose method and the destructor after you are finished. Example:

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);
}

Then you can use it via MigraDocObject.AddImage("temp.png"); But be sure to delete the image afterwards or add a check if the image already exists and if it has the correct file size (in case the user replaced it).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文