NPOI在docx插图方法
来源:互联网 发布:周晨曦开的淘宝店 编辑:程序博客网 时间:2024/06/09 20:05
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", FileMode.Open, FileAccess.Read);
gp = m_Docx.CreateParagraph();
gr = gp.CreateRun();
gr.AddPicture(gfs, (int)PictureType.JPEG, "1.jpg", 1000000, 1000000);
gfs.Close();
anchor方式四周型插图代码片段:
gfs = new FileStream("f:\\pic\\1.jpg", FileMode.Open, FileAccess.Read);
gp = m_Docx.CreateParagraph();
gr = gp.CreateRun();
CT_Anchor an = new CT_Anchor();
an.distB = (uint)(0);
an.distL = 114300u;
an.distR = 114300U;
an.distT = 0U;
an.relativeHeight = 251658240u;
an.behindDoc = false; //"0"
an.locked = false; //"0"
an.layoutInCell = true; //"1"
an.allowOverlap = true; //"1"
NPOI.OpenXmlFormats.Dml.CT_Point2D simplePos = new NPOI.OpenXmlFormats.Dml.CT_Point2D();
simplePos.x = (long)0;
simplePos.y = (long)0;
CT_EffectExtent effectExtent = new CT_EffectExtent();
effectExtent.b = 0L;
effectExtent.l = 0L;
effectExtent.r = 0L;
effectExtent.t = 0L;
CT_WrapSquare wrapSquare = new CT_WrapSquare();
wrapSquare.wrapText = ST_WrapText.bothSides;
gr.AddPicture(gfs, (int)PictureType.JPEG, "1.jpg", 1000000, 1000000, 4000000, 2000000, wrapSquare, an, simplePos, ST_RelFromH.column,
ST_RelFromV.paragraph, effectExtent);
gfs.Close();
经过调试的例子下载:http://download.csdn.net/detail/gltide/7032725。创建的docx在word2010可以打开。
新的插图例子(更新:2014-6-2):http://download.csdn.net/detail/gltide/7436319。NPOI是tonyqus提供的2.0.9.0源码经过修改编译,创建的docx在word2007可以打开,例子所创建的docx效果图如下。
- NPOI在docx插图方法
- NPOI插图到docx页眉
- NPOI创建docx表
- NPOI创建docx脚注
- NPOI创建DOCX常用操作
- NPOI创建DOCX常用操作
- 在CSDN的博文中插图片的方法
- 插图
- 在office2003中打开office2007文件的补丁(.docx文件,pptx文件打开方法)
- 在office2003中打开office2007文件的补丁(.docx文件,pptx文件打开方法)
- NPOI导出EXCEl通用方法
- C# WebForm 使用NPOI 2 生成简单的word文档(.docx)
- NPOI
- NPOI
- NPOI
- NPOI
- NPOI
- NPOI
- MyEclipse中的项目上显示与SVN上版本是否同步的标记没了,怎么办
- js乒乓球
- javascript二维数组倒置输出方法
- strpbrk函数
- 1022. D进制的A+B (20)
- NPOI在docx插图方法
- 21. 微软面试题:字符串中找最长数字字符串
- Redis缓存
- Decode Ways
- 在eclipse中无法通过AVD Manager创建AVD的替代方法
- stm32的多通道ADC和DMA的设置问题
- 请问媒体:工农代表哪里去了?
- HDU 1561 The more, The Better
- strcasecmp