OpenXml Multiple Images

本文关键字:Images Multiple OpenXml | 更新日期: 2023-09-27 18:14:53

我目前正在使用图片内容控件插入图像,但是似乎有一个明显的限制(由控件的性质),只有1个IMAGE。

如何使用OpenXML SDK(2+)在设置位置添加多个图像?

我确实尝试了书签,但这似乎不起作用,只是导致一个破碎的文档。
我已经有相当多的代码来构建一个现有的文档,所以考虑mHtml路由不是一个选项。
最后,我确实尝试了OpenXML SDK生产力工具,但仍然无法看到如何在设置位置插入多个图像。

OpenXml Multiple Images

问题是图片内容控件都有一些指向相同'空白'图像的id。您必须将每个图像的资源id分配给光点。每个内容控件的嵌入属性

这篇文章给你一个简单而有效的方法来做到这一点

打开XML -通过标签名称设置多个图片内容控件,而不会发疯

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using A = DocumentFormat.OpenXml.Drawing;
using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
using PIC = DocumentFormat.OpenXml.Drawing.Pictures;
// Select element containing picture control and get the blip element
Bitmap image = new Bitmap(@"F:insert_me.jpg");
SdtElement controlBlock = _mainDocumentPart.Document.Body
    .Descendants<SdtElement>()
        .Where
        (r => 
            r.SdtProperties.GetFirstChild<Tag>().Val == tagName
        ).SingleOrDefault();
// Find the Blip element of the content control.
A.Blip blip = controlBlock.Descendants<A.Blip>().FirstOrDefault();

// Add image and change embeded id.
ImagePart imagePart = _mainDocumentPart
    .AddImagePart(ImagePartType.Jpeg);
using (MemoryStream stream = new MemoryStream())
{
    image.Save(stream, ImageFormat.Jpeg);
    stream.Position = 0;
    imagePart.FeedData(stream);
}
blip.Embed = _mainDocumentPart.GetIdOfPart(imagePart);