(⼀)JAVA基于OPENXML的word⽂档插⼊、合并、替换操作系列之基础篇(⼀)JAVA基于OPENXML的word⽂档插⼊、合并、替换操作系列之基础篇
前⾔
Hello CSDN World!本⼈其实有记笔记的习惯,但却没有写博客的习惯,⼆者的区别是笔记是给⾃⼰看的, 博客是给各个看官看的,笔记只要⾃⼰看得懂就OK了, 不巧的是,这TND是我正⼉⼋经第⼀篇博客(博客式笔记),所以开头先来对个暗号 ,组织内如有兄弟看不懂可以拍醒我, 不,有姑娘看不懂可以拍醒我, 兄弟可以略过,此处需要⼀个表情,你懂得…
什么是Open Xml?
以下是⽹上拷贝的⼀段话,我就不码字了,需要更详细了解的,请百度之:
“Open XML标准的简单介绍:Ecma Office Open XML(“Open XML”)是针对字处理⽂档、演⽰⽂稿和电⼦表格的国际化开放标准,可免费供多个应⽤程序在多个平台上实现。Microsoft Office(2007、2003、XP、2000)、OpenOffice Novell Edition、开源项⽬ Gnumeric、Neo-Office 2.1 和 PalmOS (Dataviz) 已经⽀持 Open XML。Corel 已经宣布在 WordPerfect 2007 中提供 Open XML ⽀持,全球的开发⼈员正在使⽤ OpenXML 构建解决⽅案。
Open XML 的标准化⼯作是由 Ecma International 通过其技术委员会 45 (TC45) 执⾏的,来⾃ Apple、Barclays Capital、BP、The British Library、Essilor、Intel、Microsoft、NextPage、Novell、Statoil、Toshiba 和 United States Library of Congress 的代表参与了该项⼯作。该标准旨在提供现有 ISO 标准所⽆法提供的独特好处,其中包括能够实现从现有⼆进制格式向基于 XML 的格式的⾼保真移植。”
Open XML SDK
Open XML SDK特指微软Office的开放XML,且提供了⼀套操作的SDK组件, 我们可以利⽤它对Word、Excel、Powerpoint做很多的操作,但这东西是基于.NET的,我们可以通过它了解⼀些基于openxml对⽂档的骚操作。
官⽅⽂档:
这系列笔记要做点什么?
在我们⽇常的做项⽬写bug过程中,难免会遇上⼀些对于word⽂档的操作,通过JAVA动态操作WORD中的内容,将⼀些富⽂本转换成word⽂档等,⽐如做⼀份合同,要动态的填⼊某些⾦额、合同双⽅名称等值然后打印出来、OA类系统中公⽂处理、⽂档合成等、 我就是在如此恶劣需求环境下,纵览某
度、某歌、借鉴了组织各位⼤佬的奇思妙(yin)想,总结出了本系列内容,⽬标就是为了实现以上各种场景的应⽤。
涉及技术点
本系列笔记涉及技术知识点⼤概包括以下⼏个,当然还有正则表达式、JAVA基础知识之类的我就不提了
Apache POI: ⼀组开源的Java API,⽤于对Microsoft Office(Excel、WORD、PowerPoint、Visio等)格式档案读和写的功能,JAVA ⼈没有不知道的, 如果我没记错,这家伙底层应该就是基于OpenXml的。
Docx4j: 这货也是⼀个⽤于创建和操作Microsoft Open XML (Word docx, Powerpoint pptx, 和 Excel xlsx)⽂件的Java类库, 但它似乎只能操作 WordprocessingML,也就是只能处理word,有没有excel4j,鄙⼈就不清楚了,暂时没⽤到。
Jsoup:jsoup是⼀款Java的HTML解析神器,主要⽤来对HTML解析和操作。
Dom4j:Dom4j是⼀个易⽤的、开源的库,⽤于XML,XPath和XSLT。它应⽤于Java平台,采⽤了Java集合框架并完全⽀持
DOM,SAX和JAXP。
XPATH:XPath 是⼀门在 XML ⽂档中查信息的语⾔,可⽤来在 XML ⽂档中对元素和属性进⾏快速查和遍历,这货从某种⾓度可以理解为 xml 中的 正则,个⼈理解。
关于word、openxml基础知识补充
⼀个word⽂档的真实⾯⽬
⼀个word⽂档其实就是⼀个有着特定格式的压缩包, ⼀个docx的word⽂档,将后缀名改成zip,然后⽤解压软件打开,你将得到⼀个如下的⼀批⼦⽂件,以此也验证了word⽂档主要内容就是 zip + xml(openxml) 的集合体。
截图中的结构,本笔记不做详细介绍,有兴趣⾃⼰去撩度娘,我只能提醒你,l、 media、 ls这三个东西是本系列笔记中的重点,后续内容我们将会⽤到它。
关于word⽂档WordprocessingML的表达⽅式
word⽂档最终以xml⽂档表⽰时(上图中的l),将会以以下结构呈现,对于本系列笔记,了解⼀下常见的标签即可,如果你有更⾼的要求,我也仅能送你两个关键词openxml标签、WordprocessingML了。
<p><!--表⽰⼀个段落-->
<val ><!--表⽰⼀个值-->
<r><!--表⽰⼀个样式串,指明它包括的⽂本的显⽰样式,表⽰⼀个特定的⽂本格式-->
<t><!--表⽰真正的⽂本内容-->
<rPr><!--是<w:r>标签内的标签,对Run⽂本属性进⾏修饰-->
<pPr><!--是<w:p>标签内的标签,对Paragraph⽂本属性进⾏修饰-->
<rFronts><!--字体-->
<hdr><!--页眉-->
<ftr><!--页脚-->
<drawing ><!--图⽚-->
<extent><!--绘图对象⼤⼩-->
<effectExtent ><!--嵌⼊图形的效果-->
<inline ><!--内嵌绘图对象,dist(T,B,L,R)距离⽂本上下左右的距离-->
<noProof ><!--不检查拼写和语法错误-->
<docPr><!--表⽰⽂档属性-->
<rsidR><!--指定唯⼀⼀个标识符,⽤来跟踪编辑在修订时表⾏标识,所有段落和段落中的内容都应该拥有相同的属性值,如果出现差异,那么表⽰这个段落在后⾯的编辑中被修改。-->
<r><!--表⽰关系,段落中以相连续的中⽂或英⽂字符字符串,作为开始和结束。⽬的就是要把⼀个段落中的中英⽂字符区分开来。 -->
<ind><!--w:pPr元素的⼦元素,跟w:pStyle并列,ind代表缩进情况:有⼏个属性值:①firstLine(⾸⾏缩进)②left(左缩进)③当left和firstLine同时出现时代表下⾯的元素有两种属性⾸⾏和下⾯其他⾏都是有属性的④hanging(悬挂)-->
<hint><!--字体的类型,w:rFonts的⼦元素,属性值eastAsia表⾯上的意思是“东亚”,指代“中⽇韩CJK”类型。-->
<bCs><!--复合字体的加粗-->
<bookmarkStart><!--书签开始-->
<bookmarkEnd><!--书签结束-->
<lastRenderedPageBreak ><!--页⾯进⾏分页的标记,是w:r的⼀个属性,表⽰此段字符串是⼀页中的最后⼀个字符串。-->
<smartTag ><!--智能标记-->
<attr ><!--⾃定义XML属性-->
< b val=”on”><!--表⽰该格式串种的⽂本为粗体-->
<jc val="right"/><!--表⽰对齐⽅式-->
<sz val="40"/><!--表⽰字号⼤⼩-->
<szCs val="40"/><!---->
<t space="preserve"><!--保持空格,如果没有这内容的话,⽂本的前后空格将会被Word忽略-->
<spacing line="600"lineRule="auto"/><!--设置⾏距,要进⾏运算,要⽤数字除以240,如此处为600/240=2.5倍⾏距-->
<jc val="center"/><!-- 这句话表⽰段落对齐⽅式 -->
<jc val="center"/><!-- 这句话表⽰段落对齐⽅式 -->
<!-- 设置了页的宽,⾼,和页的各边距。各项的值均是英⼨乘1440得出 -->
<body>
<sectPr>
<pgSz w="12240"h="15840"/>
<pgMar top="1440"right="1800"bottom="1440"left="1800"header="720"footer="720"gutter="0"/>
</sectPr>
</body>
<!--页眉和页脚-->
<sectPr rsidR="002C452C">
<hdr type="odd">
<p>
<pPr>
<pStyle val="Header"/>
</pPr>
<r>
<t>这是页眉</t>
</r>
</p>
</hdr>
<ftr type="odd">
<p>
<pPr>
<pStyle val="Footer"/>
</pPr>
<r>
<t>这是页脚</t>
</r>
</p>
</ftr>
</sectPr>
<!--表⽰⽂档的视图是“print”,视图⽐例100%-->
<docPr>
<view val="print"/><zoom percent="100"/>
</docPr>
以下是⼀个完整的⽂档结构⽰例,该⽂档中还包含了图⽚,相信点击进来这篇笔记的你,⼀定扫⼀眼,⼀切皆在你的掌握之中了吧。
<xml-fragment w="/wordprocessingml/2006/main"m="/officeDocument/ 2006/math"w14="schemas.microsoft/office/word/2010/wordml"r="/officeDocument/2006/relatio nships"wp="/drawingml/2006/wordprocessingDrawing"a="/drawingml/ 2006/main"wp14="schemas.microsoft/office/word/2010/wordprocessingDrawing"w15="schemas.microsoft/office/word/2 012/wordml"mc="/markup-compatibility/2006"sl="/schemaLibrary/200 6/main"wne="schemas.microsoft/office/word/2006/wordml"c="/drawingml/2006/chart"cd r="/drawingml/2006/chartDrawing"c14="schemas.microsoft/office/drawing/2007/8/2/chart"dgm ="/drawingml/2006/diagram"pic="/drawingml/2006/picture"xdr="
/drawingml/2006/spreadsheetDrawing"dsp="schemas.microsoft/office/drawing/2008/diagram"v="urn: schemas-microsoft-com:vml"o="urn:schemas-microsoft-com:office:office"xvml="urn:schemas-microsoft-com:office:excel"w10="urn:sc hemas-microsoft-com:office:word"pvml="urn:schemas-microsoft-com:office:powerpoint"cppr="schemas.microsoft/office/2006/cove rPageProps"odx="/xpaths"odc="/conditions"odq="/questions"oda=" /answers"odi="/components"odgm="/SmartArt/DataHierarchy"b="sch /officeDocument/2006/bibliography"wps="schemas.microsoft/office/word/2010/wordprocessingShape"w 16se="schemas.microsoft/office/word/2015/wordml/symex"w16cid="schemas.microsoft/office/word/2016/wordml/cid"wet p="schemas.microsoft/office/webextensions/taskpanes/2010/11"we="schemas.microsoft/office/webextensions/webextension/2 010/11"comp="/drawingml/2006/compatibility"lc="/drawingml/2006/loc kedCanvas"><!-- Created by docx4j 8.0.0 (Apache licensed) using ORACLE_JRE JAXB in Oracle Java 1.8.0_221 on Mac OS X --> <p>
<pPr>
<spacing after="450"/>
<ind left="120"/>
<jc val="left"/>
</pPr>
<r>
<rPr>
<rFonts ascii="Times New Roman"hAnsi="Times New Roman"/>
< b val="false"/>
<i val="false"/>
<color val="333333"/>
<sz val="27"/>
</rPr>
<t> 江西余⼲县信瑞联圩发现3处泡泉,最⼤泡泉直径已有两⽶左右,时刻威胁着⼤堤的安全。险情就
是命令,73集团军某旅⽴即派出了200名官兵紧急处置。由于泡泉点在⽔下,官兵们成⽴了⼀⽀党员突击队,队长袁魏魏带领25位“95后”党员跳⼊齐肩的⽔中封堵管涌。</t> </r>
</p>
<p>
<pPr>
<spacing after="450"/>
<ind left="120"/>
<jc val="center"/>
</pPr>
<r>
<drawing>
<inline distT="0"distB="0"distL="0"distR="0">
<extent cx="8466666"cy="5872268"/>
<effectExtent l="0"t="0"r="0"b="0"/>
<docPr id="0"name=""descr=""/>
<cNvGraphicFramePr>
<graphicFrameLocks noChangeAspect="true"/>
</cNvGraphicFramePr>
<graphic>
<graphicData uri="/drawingml/2006/picture">
<pic>
<nvPicPr>
<cNvPr id="1"name=""/>
<cNvPicPr/>
</nvPicPr>
<blipFill>
<blip embed="rId4"/>
<stretch>
<fillRect/>
</stretch>
</blipFill>
<spPr>
<xfrm>
<off x="0"y="0"/>
<ext cx="8466666"cy="5872268"/>
</xfrm>
<prstGeom prst="rect">
<avLst/>
</prstGeom>
</spPr>
</pic>
</graphicData>
</graphic>
</inline>
</drawing>
</r>
</p>
<p>
<pPr>
<spacing after="450"/>
<ind left="120"/>
<jc val="left"/>
</pPr>
<r>
<rPr>
<rFonts ascii="Times New Roman"hAnsi="Times New Roman"/>
< b val="false"/>
<i val="false"/>
<color val="333333"/>
<sz val="27"/>
</rPr>
<t> 党员突击队中还有⼀位来⾃九江都昌的“95后”党员刘浪,⽔塘的另⼀⾯就是他的家乡。在此次洪灾中,他的家⾥也受了灾,家⼈已被当地党员⼲部转移到安全地带。</t>
</r>
</p>
<p>
<pPr>
<spacing after="450"/>
<ind left="120"/>
<jc val="left"/>
</pPr>
<r>
<rPr>
<rFonts ascii="Times New Roman"hAnsi="Times New Roman"/>
< b val="false"/>
<i val="false"/>
xml标签大全<color val="333333"/>
<sz val="27"/>
</rPr>
<t> 经过6个⼩时的连续奋战,信瑞联圩的险情被控制住,⽬前当地⼯作⼈员继续巡查。</t>
</r>
</p>
<p>
<pPr>
<spacing after="450"/>
<ind left="120"/>
<jc val="left"/>
</pPr>
<r>
<rPr>
<rFonts ascii="Times New Roman"hAnsi="Times New Roman"/>
< b val="false"/>
<i val="false"/>
<color val="333333"/>
<sz val="27"/>
</rPr>
<t> 在湖南岳阳1068公⾥的环洞庭湖堤坝和163公⾥的长江⼲堤上,1300多个防汛连,超过11万名党员⽇夜坚守,守护家园。⼤事难事见担当,危难时刻显本⾊。⽆数共产党员向险⽽⾏,全⼒守护⼈民众⽣命财产安全。</t>
</r>
</p>
<p>
<pPr>
<spacing after="450"/>
<ind left="120"/>
<jc val="center"/>
</pPr>
<r>
<drawing>
<inline distT="0"distB="0"distL="0"distR="0">
<extent cx="8466666"cy="4496254"/>
<effectExtent l="0"t="0"r="0"b="0"/>
<docPr id="0"name=""descr=""/>
<cNvGraphicFramePr>
<graphicFrameLocks noChangeAspect="true"/>
</cNvGraphicFramePr>
<graphic>
<graphicData uri="/drawingml/2006/picture">
<pic>
<nvPicPr>
<cNvPr id="1"name=""/>
<cNvPicPr/>
</nvPicPr>
<blipFill>
<blip embed="rId5"/>
<stretch>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论