NPOI尽管已发展到2.0,但对word的支持还不够稳定,对于如何用NPOI在docx中插图网上很少涉及。经过对docx文件中插图的xml分析,对NPOI2.0R源码进行了插图方面的修改,实现了inline和anchor两种方式的插图。
一、docx插图方式与inline和anchor关系
inline:内联,此种插图方式对插入的图片位置不能灵活控制,只能通过段设置,对应word的嵌入型插图。
anchor:锚,此种插图方式对插入的图片位置能灵活控制,对应word的四周型、紧密型、穿越型等。
二、docx文件中插图的xml分析
docx插入图片的所有信息都包含在word文件夹中,文件夹中有document.xml文件、media和_rels文件夹,其中图片数据存储在此文件夹下的media文件夹中,在_rels文件夹中的document.xml.rels文件对插图定义了以"rId"+数字组成的标识与图片关联。document.xml文件则存储着插图等的xml信息。
三、修改NPOI2.0R源码
原NPOI的XWPFRun类中提供了AddPicture方法,为inline插图方式,经测试发现产生的xml不符合docx插图结构,对相关的类进行了修改,由于修改较多,在此不列举。在XWPFRun类中增加了anchor插图方式的AddPicture方法的重载。
四、inline及anchor插图实现代码
inline方式插图代码片段:
gfs = new FileStream("f:\\pic\\1.jpg", FileMo