Docx4J知识积累(16页).doc





《Docx4J知识积累(16页).doc》由会员分享,可在线阅读,更多相关《Docx4J知识积累(16页).doc(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-Docx4J知识积累-第 16 页Docx4J概述: Docx4j是Java操作office2007+中的Word、Excel、PPT的开源项目,其主要针对WordXML同时也可以处理Excel和PPT,比POI要强大很多.Docx4J基于开源协议ASLv2。ASL是一个广泛适用于社区开源软件并被开源业界所认可的协议,该协议更有益于商业化产品的开发和再发行。遵循ASL发行的代码和其它许可协议可以整合成为一个闭源的商业产品,然后被其它开发人员再次发行。这不像开源许可协议。类GPL许可协议(有些像GPL),通常情况下用于确保其它类似开发成员再发行已经被发布并修改的代码及其衍生代码的开源和可发布性
2、。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. 字体支持(字体替换及使用任何文档中嵌入的字体)一些有用
3、的链接:Docx4J: Sample codes:docx4j, pptx4j, xlsx4j, 生成docx文件(第一部分),生成docx文件(第二部分),使用docx4j编程式地创建复杂的Word(.docx)文档,向Docx4j生成的word文档添加图片和布局-第一部分,向Docx4j生成的word文档中添加布局-第二部分 docx4j - 使用Java处理word2007(.docx)文档Docx4J的使用一 打开文件/模板Docx4J中,在内存中操作的word文档是“WordprocessingMLPackage”类型的对象(本文以下简称包)。在编辑一个word文档前,开发者需要选择
4、:创建一个新的空白包,并逐一将需要的内容填充进去,或者打开一个已有的文档,并在里面添加/替换新的内容。前者思路比较简单,比较适合简单文档的创建。但由于添加每条新内容时,都需要手动进行设置其各项参数(比如表格的行宽、列宽、边框等),且添加修改复杂控件(公式、页眉页脚)的过程都比较繁琐,所以在创建格式复杂的文档时不是很建议。后者需要事先制作一个模板文档,添加不同的占位符和各种模板信息,在准备上比前者复杂。但也具有很多优点:可以简化细节参数的调整(不需要手动调整表格、段落的具体细节参数)从而将精力集中到文档内容上;复杂的文档部分(如公式、复选框等)可以直接从模板中读取,只需要在其基础上修改文字等内容
5、部分,而避开了繁琐的创建操作等。在创建格式复杂的文档时,这个方法相比前者可以精简大量代码。(本文之后将主要基于该方法进行说明)二 保存文件当结束对包的编辑时,开发者可以选择多种方式进行保存。三 常用类型Docx4J支持所有的docx内容格式,其中比较常见的有如下几种:1. Text:基本的文字内容2. R:文字格式信息 3. P:段落,可以单独使用,也可以添加到单元格(Tc)等作为内容以下代码创建了新文本,并将其填到指定的单元格中1. *功能描述:填充单元格内容2. *paramtc单元格对象3. *paramdata内容4. *paramfontFamily字体5. *paramfontSi
6、ze字号6. *paramisBlod是否加粗7. *paramjcEnumeration对齐方式8. *authormyclover9. privatestaticvoidfillCellData(Tctc,Stringdata,StringfontFamily,StringfontSize,booleanisBlod,JcEnumerationjcEnumeration)10. ObjectFactoryfactory=Context.getWmlObjectFactory();11. org.docx4j.wml.Pp=(P)XmlUtils.unwrap(tc.getContent()
7、.get(0);12. /设置表格内容的对齐方式13. setCellContentStyle(p,jcEnumeration);14. org.docx4j.wml.Textt=factory.createText();15. t.setValue(data);16. org.docx4j.wml.Rrun=factory.createR();17. /设置表格内容字体样式18. run.setRPr(getRPr(fontFamily,fontSize,isBlod);19. TcPrtcpr=tc.getTcPr();20. if(tcpr=null)21. tcpr=factory.c
8、reateTcPr();22. /设置内容垂直居中23. CTVerticalJcvalign=factory.createCTVerticalJc();24. valign.setVal(STVerticalJc.CENTER);25. tcpr.setVAlign(valign);26. run.getContent().add(t);27. p.getContent().add(run);28. *功能描述:填充单元格内容,小五号,宋体,内容居中29. *paramtc单元格对象30. *paramdata数据31. *paramisBlod是否加粗32. *authormyclover
9、33. publicstaticvoidfillCellData(Tctc,Stringdata,booleanisBlod)34. fillCellData(tc,data,宋体,18,isBlod,JcEnumeration.CENTER);4. Tbl:表格,每个表格含有一行或多行(Tr),每行有一个或者多个单元格(Tc)Tc是表格用于存储信息的基本单位以下代码创建了一个“rows行、cols列、行宽为widths“的空表格1. publicstaticTblcreateTable(introws,intcols,intwidths)2. ObjectFactoryfactory=Con
10、text.getWmlObjectFactory();3. Tbltbl=factory.createTbl();4. /w:tblPr5. StringBuffertblSb=newStringBuffer();6. tblSb.append();7. tblSb.append();8. tblSb.append();9. /上边框双线10. tblSb.append();11. /左边无边框12. tblSb.append();13. /下边框双线14. tblSb.append();15. /右边无边框16. tblSb.append();17. tblSb.append();18. t
11、blSb.append();19. tblSb.append();20. TblPrtblPr=null;21. try22. tblPr=(TblPr)XmlUtils.unmarshalString(tblSb.toString();23. catch(JAXBExceptione)24. e.printStackTrace();25. tbl.setTblPr(tblPr);26. if(tblPr!=null)27. Jcjc=factory.createJc();28. /单元格居中对齐29. jc.setVal(JcEnumeration.CENTER);30. tblPr.set
12、Jc(jc);31. CTTblLayoutTypetbll=factory.createCTTblLayoutType();32. /固定列宽33. tbll.setType(STTblLayoutType.FIXED);34. tblPr.setTblLayout(tbll);35. /36. TblGridtblGrid=factory.createTblGrid();37. tbl.setTblGrid(tblGrid);38. /Addrequired39. for(inti=1;i=cols;i+)40. TblGridColgridCol=factory.createTblGri
13、dCol();41. gridCol.setW(BigInteger.valueOf(widthsi-1);42. tblGrid.getGridCol().add(gridCol);43. /Nowtherows44. for(intj=1;j=rows;j+)45. Trtr=factory.createTr();46. tbl.getContent().add(tr);47. /Thecells48. for(inti=1;i=cols;i+)49. Tctc=factory.createTc();50. tr.getContent().add(tc);51. TcPrtcPr=fact
14、ory.createTcPr();52. tc.setTcPr(tcPr);53. /54. TblWidthcellWidth=factory.createTblWidth();55. tcPr.setTcW(cellWidth);56. cellWidth.setType(dxa);57. cellWidth.setW(BigInteger.valueOf(widthsi-1);58. tc.getContent().add(factory.createP();59. returntbl;四 指定格式创建文档1. 修改文档格式页边距60. *功能描述:设置页边距61. *paramword
15、Package文档处理包对象62. *paramtop上边距63. *parambottom下边距64. *paramleft左边距65. *paramright右边距66. *authormyclover67. publicstaticvoidsetMarginSpace(WordprocessingMLPackagewordPackage,Stringtop,Stringbottom,Stringleft,Stringright)68. ObjectFactoryfactory=Context.getWmlObjectFactory();69. PgMarpg=factory.create
16、SectPrPgMar();70. pg.setTop(newBigInteger(top);71. pg.setBottom(newBigInteger(bottom);72. pg.setLeft(newBigInteger(left);73. pg.setRight(newBigInteger(right);74. wordPackage.getDocumentModel().getSections().get(0).getSectPr().setPgMar(pg);75. *功能描述:设置页边距,上下边距都为1440,厘米76. *paramwordPackage文档处理包对象77.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Docx4J 知识 积累 16

限制150内