使用NPOI将图像添加到Word docx文件

时间:2015-03-24 11:00:43

标签: c# .net ms-word npoi

我开始使用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);
    }

没有运气 - 两种情况下都是空白文件。

我做错了什么?

2 个答案:

答案 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