您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > Docx4J知识积累
Docx4J概述:Docx4j是Java操作office2007+中的Word、Excel、PPT的开源项目,其主要针对WordXML同时也可以处理Excel和PPT,比POI要强大很多.Docx4J基于开源协议ASLv2。ASL是一个广泛适用于社区开源软件并被开源业界所认可的协议,该协议更有益于商业化产品的开发和再发行。遵循ASL发行的代码和其它许可协议可以整合成为一个闭源的商业产品,然后被其它开发人员再次发行。这不像开源许可协议。类GPL许可协议(有些像GPL),通常情况下用于确保其它类似开发成员再发行已经被发布并修改的代码及其衍生代码的开源和可发布性。Docx4J能做什么:1.打开已存在docx(从文件系统、SMB/CIFS、使用VFS的WebDAV),pptx,xlsx2.创建新的docx、pptx、xlsx3.编程式地操作上面打开的文档Docx4J特殊的功能支持:1.模版替换;CustomXML绑定2.生产/消费Word2007的xmlPackage(pkg)格式3.作为docx保存docx到文件系统(zipped)或者保存到JCR(unzipped)4.应用转换,包括常见过滤器5.作为HTML或者PDF导出6.比较文档、段落或者sdt(内容控件)之间的差异7.字体支持(字体替换及使用任何文档中嵌入的字体)一些有用的链接:Docx4J::docx4j,pptx4j,xlsx4j,生成docx文件(第一部分),生成docx文件(第二部分),使用docx4j编程式地创建复杂的Word(.docx)文档,向Docx4j生成的word文档添加图片和布局--第一部分,向Docx4j生成的word文档中添加布局--第二部分docx4j--使用Java处理word2007(.docx)文档Docx4J的使用一打开文件/模板Docx4J中,在内存中操作的word文档是“WordprocessingMLPackage”类型的对象(本文以下简称包)。在编辑一个word文档前,开发者需要选择:创建一个新的空白包,并逐一将需要的内容填充进去,或者打开一个已有的文档,并在里面添加/替换新的内容。前者思路比较简单,比较适合简单文档的创建。但由于添加每条新内容时,都需要手动进行设置其各项参数(比如表格的行宽、列宽、边框等),且添加修改复杂控件(公式、页眉页脚)的过程都比较繁琐,所以在创建格式复杂的文档时不是很建议。后者需要事先制作一个模板文档,添加不同的占位符和各种模板信息,在准备上比前者复杂。但也具有很多优点:可以简化细节参数的调整(不需要手动调整表格、段落的具体细节参数)从而将精力集中到文档内容上;复杂的文档部分(如公式、复选框等)可以直接从模板中读取,只需要在其基础上修改文字等内容部分,而避开了繁琐的创建操作等。在创建格式复杂的文档时,这个方法相比前者可以精简大量代码。(本文之后将主要基于该方法进行说明)二保存文件当结束对包的编辑时,开发者可以选择多种方式进行保存。三常用类型Docx4J支持所有的docx内容格式,其中比较常见的有如下几种:1.Text:基本的文字内容2.R:文字格式信息3.P:段落,可以单独使用,也可以添加到单元格(Tc)等作为内容以下代码创建了新文本,并将其填到指定的单元格中1./**2.*功能描述:填充单元格内容3.*@paramtc单元格对象4.*@paramdata内容5.*@paramfontFamily字体6.*@paramfontSize字号7.*@paramisBlod是否加粗8.*@paramjcEnumeration对齐方式9.*@authormyclover10.*/11.privatestaticvoidfillCellData(Tctc,Stringdata,StringfontFamily,StringfontSize,booleanisBlod,JcEnumerationjcEnumeration){12.ObjectFactoryfactory=Context.getWmlObjectFactory();13.org.docx4j.wml.Pp=(P)XmlUtils.unwrap(tc.getContent().get(0));14.//设置表格内容的对齐方式15.setCellContentStyle(p,jcEnumeration);16.org.docx4j.wml.Textt=factory.createText();17.t.setValue(data);18.org.docx4j.wml.Rrun=factory.createR();19.//设置表格内容字体样式20.run.setRPr(getRPr(fontFamily,fontSize,isBlod));21.TcPrtcpr=tc.getTcPr();22.if(tcpr==null){23.tcpr=factory.createTcPr();24.}25.//设置内容垂直居中26.CTVerticalJcvalign=factory.createCTVerticalJc();27.valign.setVal(STVerticalJc.CENTER);28.tcpr.setVAlign(valign);29.run.getContent().add(t);30.p.getContent().add(run);31.}32.33./**34.*功能描述:填充单元格内容,小五号,宋体,内容居中35.*@paramtc单元格对象36.*@paramdata数据37.*@paramisBlod是否加粗38.*@authormyclover39.*/40.publicstaticvoidfillCellData(Tctc,Stringdata,booleanisBlod){41.fillCellData(tc,data,宋体,18,isBlod,JcEnumeration.CENTER);42.}4.Tbl:表格,每个表格含有一行或多行(Tr),每行有一个或者多个单元格(Tc)Tc是表格用于存储信息的基本单位以下代码创建了一个“rows行、cols列、行宽为widths“的空表格1.publicstaticTblcreateTable(introws,intcols,int[]widths){2.ObjectFactoryfactory=Context.getWmlObjectFactory();3.Tbltbl=factory.createTbl();4.//w:tblPr5.StringBuffertblSb=newStringBuffer();6.tblSb.append(w:tblPr).append(Namespaces.W_NAMESPACE_DECLARATION).append();7.tblSb.append(w:tblStylew:val=\TableGrid\/);8.tblSb.append(w:tblWw:w=\0\w:type=\auto\/);9.//上边框双线10.tblSb.append(w:tblBordersw:topw:val=\double\w:sz=\4\w:space=\0\w:color=\auto\/);11.//左边无边框12.tblSb.append(w:leftw:val=\none\w:sz=\0\w:space=\0\w:color=\auto\/);13.//下边框双线14.tblSb.append(w:bottomw:val=\double\w:sz=\4\w:space=\0\w:color=\auto\/);15.//右边无边框16.tblSb.append(w:rightw:val=\none\w:sz=\0\w:space=\0\w:color=\auto\/);17.tblSb.append(/w:tblBorders);18.tblSb.append(w:tblLookw:val=\04A0\/);19.tblSb.append(/w:tblPr);20.TblPrtblPr=null;21.try{22.tblPr=(TblPr)XmlUtils.unmarshalString(tblSb.toString());23.}catch(JAXBExceptione){24.e.printStackTrace();25.}26.tbl.setTblPr(tblPr);27.if(tblPr!=null){28.Jcjc=factory.createJc();29.//单元格居中对齐30.jc.setVal(JcEnumeration.CENTER);31.tblPr.setJc(jc);32.CTTblLayoutTypetbll=factory.createCTTblLayoutType();33.//固定列宽34.tbll.setType(STTblLayoutType.FIXED);35.tblPr.setTblLayout(tbll);36.}37.//w:tblGridw:gridColw:w=4788/38.TblGridtblGrid=factory.createTblGrid();39.tbl.setTblGrid(tblGrid);40.//Addrequiredw:gridColw:w=4788/41.for(inti=1;i=cols;i++){42.TblGridColgridCol=factory.createTblGridCol();43.gridCol.setW(BigInteger.valueOf(widths[i-1]));44.tblGrid.getGridCol().add(gridCol);45.}46.//Nowtherows47.for(intj=1;j=rows;j++){48.Trtr=factory.createTr();49.tbl.getContent().add(tr);50.//Thecells51.for(inti=1;i=cols;i++){52.Tctc=factory.createTc();53.tr.getContent().add(tc);54.TcPrtcPr=factory.createTcPr();55.tc.setTcPr(tcPr);56.//w:tcWw:w=4788w:type=dxa/57.TblWidthcellWidth=factory.createTblWidth();58.tcPr.setTcW(cellWidth);59.cellWidth.setType(dxa);60.cellWidth.setW(BigInteger.valueOf(widths[i-1]));61.tc.getContent().add(factory.createP());62.}63.64.}65.returntbl;66.}四指定格式创建文档1.修改文档格式页边距67./**68.*功能描述:设置页边距69.*@paramwordPackage文档处理包对象70.*@paramtop上边距71.*@parambottom下边距72.*@paramleft左边距73.*@paramright右边距74.*@authormyclover75.*/76.publicstaticvoidsetMarginSpace(WordprocessingMLPackagewordPackage,Stringtop,Stringbottom,Stringleft,Stringright){77.ObjectFactoryfactory=Context.getWmlObjectFactory();78.PgMarpg=facto
本文标题:Docx4J知识积累
链接地址:https://www.777doc.com/doc-4375964 .html