添加图片到Word DOCX与NPOI文件(Add image to Word docx file

2019-10-22 08:09发布

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

没有运气 - 在这两种情况下的空白文档。

我究竟做错了什么?

Answer 1:

最后,我有.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));


Answer 2:

请确保您有最新的DLL(至少2.1.1版本 - 2014年6月发布),因为被称为插入图片插入到Word的docx问题/有限的支持。 2.1.1版本正式支持插入图片插入到Word DOCX。 请参见发行说明新增功能https://npoi.codeplex.com/releases/view/115353



文章来源: Add image to Word docx file with NPOI