直到现在,这块代码一直用于构建带有文本的文档几个月,没有障碍。我现在正在尝试动态添加图像。我花了大约两天的时间盯着代码和研究,而且已经结束了。我怀疑问题是关系没有被创建(更多细节在下面)。也许不是?OpenXML:将图像添加到文档
//set stuff up...
WordprocessingDocument doc = WordprocessingDocument.Open(fsPat, true, new OpenSettings(){
AutoSave = true,
MarkupCompatibilityProcessSettings = new MarkupCompatibilityProcessSettings(MarkupCompatibilityProcessMode.ProcessAllParts,
DocumentFormat.OpenXml.FileFormatVersions.Office2007),
MaxCharactersInPart = long.MaxValue
});
MainDocumentPart mainPart = doc.MainDocumentPart;
.
.Other stuff goes here
.
//now the fun...
Run r2 = new Run();
// Add an ImagePart.
ImagePart ip = mainPart.AddImagePart(ImagePartType.Png);
string imageRelationshipID = mainPart.CreateRelationshipToPart(ip); //
using (Stream imgStream = ip.GetStream())
{
System.Drawing.Bitmap b = new System.Drawing.Bitmap("myfile.png");
b.Save(imgStream, System.Drawing.Imaging.ImageFormat.Png);
}
Drawing drawing = BuildImage(imageRelationshipID, "name"+imageRelationshipID.ToString(), 17, 17);
r2.Append(drawing);
p.Append(r2);
图像部分基本上由http://blog.stuartwhiteford.com/?p=33复制),并且在一个循环中目前正在运行。我也复制了他的BuildImage()函数并按原样使用它。
当我打开生成的docx时,我看到红色的Xs,图像在说“此图像目前无法显示”。
当我打开zip文件时,图像将出现在root/media中,但不是我所期望的root/word/media。我也无法找到任何关系文件中引用的图像。理想情况下,他们将在root/word/_rels/document.xml.rels中。你会注意到我改变了imageRelationshipID的设置,希望解决这个问题。它没有。
请帮忙。谢谢。
你能否详细说明一下?我遇到了完全相同的问题。图像关系没有被创建。 – tr4nc3
@ tr4nc3在我的场景中,我知道我总是希望在特定位置显示3张图像中的一张。所以我欺骗并将它们添加到我的模板文档中的这些位置。然后,我可以删除所有与所需的“图像名称”不匹配的图像,只留下一个。所有3张图像仍然嵌入在媒体文件夹中,因此文件大小稍微大一些,否则就会变大。这只适用于我,因为a)有限的图像选项b)小图像(12x12或其他)c)我使用模板而不是从头构建文档。 – emragins
如果这不符合您的需求,对不起,我将无法提供帮助。我从来没有得到“添加图像”代码来支持上述解决方案。我的项目的长期结果是,我们最终转而构建html并将其转换为pdf。后来,我们最终还是转向了Crystal Reports,这要感谢非技术商人。这是一个完全不同的故事,被告知啤酒。 – emragins