我开始使用NPOI创建Word文档,并且我尝试将简单图像添加到文档中,但它只是没有显示出来。 (我可以让文字显示得很好)。
这是我的代码:
var wDoc = new XWPFDocument();
var bytes = File.ReadAllBytes(Settings.Configuration.WebsiteRootPath + "images/logo-large.png");
wDoc.AddPictureData(bytes, (int)PictureType.JPEG);
我也试过这个:
var wDoc = new XWPFDocument();
using (Stream s = File.OpenRead(Settings.Configuration.WebsiteRootPath + "images/logo-large.png"))
{
wDoc.CreateParagraph().CreateRun().AddPicture(s, (int)PictureType.JPEG, "logo-large.png", 200, 200);
}
没有运气 - 两种情况下都是空白文件。
我做错了什么?
答案 0 :(得分:2)
最后,我有.netCore的解决方法。 问题出在生成的document.xml中。以下代码:
var p0 = doc.Paragraphs[0];
var r0 = p0.CreateRun();
r0.AddPicture(image, 6,"logo.png",Units.ToEMU(width),Units.ToEMU(height));
生成xml节点:
<wp:docPr name="Drawing 0" descr="logo.png"/>
缺少属性ID。将此节点更改为:
时<wp:docPr name="Drawing 0" id="0" descr="logo.png"/>
一切都应该有效。即使您的文档中已有图像并且仅用于第一条记录,也会发生这种情况。我找不到修复它的原因和方法(可能是导出部分中的内容),但是如果你将这个id更改为其他值,它将起作用:
var p0 = doc.Paragraphs[0];
var r0 = p0.CreateRun();
r0.AddPicture(image, 6, "logo.png", Units.ToEMU(width), Units.ToEMU(height));
var docPr = ((NPOI.OpenXmlFormats.Dml.WordProcessing.CT_Drawing)r0.GetCTR().Items[0]).inline[0].docPr;
docPr.id = 1000;
仅对文件中的第一张图片有此要求。如果你有更多的图像,代码也应该工作:
var p0 = doc.Paragraphs[0];
var r0 = p0.CreateRun();
r0.AddPicture(image, 6, "logo.png", Units.ToEMU(width), Units.ToEMU(height));
var docPr = ((NPOI.OpenXmlFormats.Dml.WordProcessing.CT_Drawing)r0.GetCTR().Items[0]) .inline[0].docPr;
docPr.id = 1000;
var p1 = doc.Paragraphs[1];
var r1 = p1.CreateRun();
r1.AddPicture(image2, 6, "cat.png", Units.ToEMU(width2), Units.ToEMU(height2));
答案 1 :(得分:1)
确保您拥有最新的dll(至少版本2.1.1 - 2014年6月发布),因为已知问题/有限支持将图片插入Word docx。 2.1.1版正式支持将图片插入Word docx。请参阅发行说明中的新功能 https://npoi.codeplex.com/releases/view/115353