版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习资料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. 比较文档、段落或者s
3、dt (内容控件)之间的差异7. 字体支持(字体替换及使用任何文档中嵌入的字体)一些有用的链接:Docx4J:/trac/docx4jSample codes:docx4j , pptx4j, xlsx4j ,生成 docx 文件(第一部分),生成 docx 文件(第二部分),使用 docx4j编程式地创建复杂的Word(.docx)文档 ,向 Docx4j 生成的 word 文档添加图片和布局 - 第一部分 ,向 Docx4j 生成的 word 文档中添加布局 - 第二部分docx4j -使用 Java 处理 word2007( .docx )文
4、档精品文档学习资料Docx4J的使用一 打开文件 / 模板Docx4J中,在内存中操作的word文档是“ WordprocessingMLPackage”类型的对象(本文以下简称 包)。在编辑一个word文档前,开发者需要选择:创建一个新的空白包,并逐一将需要的内容填充进去,或者打开一个已有的文档,并在里面添加/ 替换新的内容。前者思路比较简单,比较适合简单文档的创建。但由于添加每条新内容时,都需要手动进行设置其各项参数(比如表格的行宽、列宽、边框等),且添加修改复杂控件(公式、页眉页脚)的过程都比较繁琐,所以在创建格式复杂的文档时不是很建议。后者需要事先制作一个模板文档,添加不同的占位符和各
5、种模板信息,在准备上比前者复杂。但也具有很多优点:可以简化细节参数的调整(不需要手动调整表格、段落的具体细节参数)从而将精力集中到文档内容上;复杂的文档部分(如公式、复选框等)可以直接从模板中读取,只需要在其基础上修改文字等内容部分,而避开了繁琐的创建操作等。在创建格式复杂的文档时,这个方法相比前者可以精简大量代码。(本文之后将主要基于该方法进行说明)二 保存文件当结束对包的编辑时,开发者可以选择多种方式进行保存。三 常用类型Docx4J支持所有的docx内容格式,其中比较常见的有如下几种:1. Text :基本的文字内容精品文档学习资料2. R : 文字格式信息3. P :段落,可以单独使用
6、,也可以添加到单元格(Tc) 等作为内容以下代码创建了新文本,并将其填到指定的单元格中1. /*2. *功能描述:填充单元格内容3.* param tc单元格对象4.* param data内容5.* param fontFamily字体6.* param fontSize字号7.* param isBlod是否加粗8.* param jcEnumeration对齐方式9. * author myclover10. */11.privatestaticvoid fillCellData(Tc tc , String data , String fontFamily , String fontS
7、ize ,booleanisBlod , JcEnumeration jcEnumeration)12. ObjectFactory factory = Context.getWmlObjectFactory();13.org.docx4j.wml.P p = (P) XmlUtils.unwrap(tc.getContent().get(0);14./ 设置表格内容的对齐方式15. setCellContentStyle(p , jcEnumeration);16. org.docx4j.wml.Text t = factory.createText();17. t.setValue(dat
8、a);18. org.docx4j.wml.R run = factory.createR();19./ 设置表格内容字体样式20. run.setRPr(getRPr(fontFamily, fontSize, isBlod);21. TcPr tcpr = tc.getTcPr();22.if (tcpr =null )23.tcpr = factory.createTcPr();24. 25./ 设置内容垂直居中26. CTVerticalJc valign = factory.createCTVerticalJc();27. valign.setVal(STVerticalJc.CEN
9、TER);28. tcpr.setVAlign(valign);29. run.getContent().add(t);30. p.getContent().add(run);31. 32.33. /*34. *功能描述:填充单元格内容,小五号,宋体,内容居中35.* param tc单元格对象36.* param data数据37.* param isBlod是否加粗38.* author myclover39.*/40.public staticvoid fillCellData(Tc tc , String data ,boolean isBlod )精品文档学习资料41.fillCel
10、lData(tc, data," 宋体 " ,"18" , isBlod, JcEnumeration.CENTER);42.4. Tbl :表格,每个表格含有一行或多行(Tr ),每行有一个或者多个单元格(Tc )Tc 是表格用于存储信息的基本单位以下代码创建了一个“ rows 行、cols 列、行宽为 widths “的空表格1.publicstaticTbl createTable(introws,intcols,int widths) 2. ObjectFactory factory = Context.getWmlObjectFactory()
11、;3. Tbl tbl = factory.createTbl();4./ w:tblPr5.StringBuffer tblSb =new StringBuffer();6.tblSb.append("<w:tblPr ").append(Namespaces.W_NAMESPACE_DECLARATION).append(">");7.tblSb.append("<w:tblStyle w:val="TableGrid"/>");8.tblSb.append("<w:tb
12、lW w:w="0" w:type="auto"/>");9./上边框双线10.tblSb.append("<w:tblBorders><w:top w:val="double" w:sz="4" w:space="0" w:color="auto"/>");11./左边无边框12.tblSb.append("<w:left w:val="none" w:sz="0&qu
13、ot; w:space="0" w:color="auto"/>" );13./下边框双线14.tblSb.append("<w:bottom w:val="double" w:sz="4" w:space="0" w:color="auto"/>");15./右边无边框16.tblSb.append("<w:right w:val="none" w:sz="0" w:sp
14、ace="0" w:color="auto"/>" );17.tblSb.append("</w:tblBorders>");18.tblSb.append("<w:tblLook w:val="04A0"/>");19.tblSb.append("</w:tblPr>");20.TblPr tblPr =null;21.try22.tblPr = (TblPr) XmlUtils.unmarshalString(tblSb
15、.toString();23.catch(JAXBException e) 24.e.printStackTrace();25. 26. tbl.setTblPr(tblPr);27.if (tblPr !=null ) 28.Jc jc = factory.createJc();29./单元格居中对齐30.jc.setVal(JcEnumeration.CENTER);31.tblPr.setJc(jc);32.CTTblLayoutType tbll = factory.createCTTblLayoutType();33./固定列宽34.tbll.setType(STTblLayoutT
16、ype.FIXED);精品文档学习资料35.tblPr.setTblLayout(tbll);36. 37./ <w:tblGrid><w:gridCol w:w="4788"/>38. TblGrid tblGrid = factory.createTblGrid();39. tbl.setTblGrid(tblGrid);40./ Add required <w:gridCol w:w="4788"/>41.for ( int i =1; i <= cols; i+) 42.TblGridCol gridCo
17、l = factory.createTblGridCol();43.gridCol.setW(BigInteger.valueOf(widthsi -1);44.tblGrid.getGridCol().add(gridCol);45. 46./ Now the rows47.for ( intj =1; j <= rows; j+) 48.Tr tr = factory.createTr();49.tbl.getContent().add(tr);50./ The cells51.for( inti =1; i <= cols; i+) 52.Tc tc = factory.cr
18、eateTc();53.tr.getContent().add(tc);54.TcPr tcPr = factory.createTcPr();55.tc.setTcPr(tcPr);56./ <w:tcW w:w="4788" w:type="dxa"/>57.TblWidth cellWidth = factory.createTblWidth();58.tcPr.setTcW(cellWidth);59.cellWidth.setType("dxa" );60.cellWidth.setW(BigInteger.va
19、lueOf(widthsi -1 );61.tc.getContent().add(factory.createP();62.63.64. 65.returntbl;66. 四 指定格式创建文档1. 修改文档格式页边距67. /*68. *功能描述:设置页边距69.* param wordPackage文档处理包对象70.* param top上边距71.* param bottom下边距72.* param left左边距73.* param right右边距74. * author myclover75. */精品文档学习资料76.publicstaticvoidsetMarginSpac
20、e(WordprocessingMLPackage wordPackage , String top, String bottom , String left , String right )77. ObjectFactory factory = Context.getWmlObjectFactory();78. PgMar pg = factory.createSectPrPgMar();79.pg.setTop(new BigInteger(top);80.pg.setBottom(new BigInteger(bottom);81.pg.setLeft(new BigInteger(le
21、ft);82.pg.setRight(new BigInteger(right);83.wordPackage.getDocumentModel().getSections().get(0).getSectPr().setPgMar(pg);84. 85.86. /*87.*功能描述:设置页边距,上下边距都为1440 , 2.54厘米88.* param wordPackage文档处理包对象89.* param left左边距90.* param right右边距91. * author myclover92. */93.publicstaticvoid setMarginSpace(Word
22、processingMLPackage wordPackage , String left, String right )94.setMarginSpace(wordPackage,"1440" , "1440" , left, right);95. 96.97. /*98.*功能描述:设置页边距,上下边距都为1440,2.54 厘米,左右边距都为1797,3.17厘米99.* param wordPackage文档处理包对象100.* author myclover101.*/102.public staticvoid setMarginSpace(W
23、ordprocessingMLPackage wordPackage)103.setMarginSpace(wordPackage,"1440" , "1440" , "1797", "1797");104.文档只读1. /*2. *功能描述:设置文档是否只读,包括内容和样式3.* param wordPackage文档处理包对象4.* param isReadOnly是否只读5. * throws Exception6. * author myclover7. */8.publicstaticvoidsetRea
24、dOnly(WordprocessingMLPackage wordPackage ,boolean isReadOnly)throwsException9.byte bt ="".getBytes();10.if(isReadOnly)11.bt ="123456" .getBytes();12. 精品文档学习资料13. ObjectFactory factory = Context.getWmlObjectFactory();14./ 创建设置文档对象15. DocumentSettingsPart ds = wordPackage.getMainD
25、ocumentPart().getDocumentSettingsPart();16.if (ds =null )17.ds =new DocumentSettingsPart();18. 19. CTSettings cs = ds.getJaxbElement();20.if (cs = null )21.cs = factory.createCTSettings();22. 23./ 创建文档保护对象24. CTDocProtect cp = cs.getDocumentProtection();25.if (cp =null )26.cp =new CTDocProtect();27.
26、 28./ 设置加密方式29. cp.setCryptProviderType(STCryptProv.RSA_AES);30. cp.setCryptAlgorithmClass(STAlgClass.HASH);31./ 设置任何用户32. cp.setCryptAlgorithmType(STAlgType.TYPE_ANY);33.cp.setCryptAlgorithmSid(new BigInteger("4");34.cp.setCryptSpinCount(new BigInteger("50000");35./只读36.if(isRea
27、dOnly)37.cp.setEdit(STDocProtect.READ_ONLY);38.cp.setHash(bt);39.cp.setSalt(bt);40./设置内容不可编辑41.cp.setEnforcement(true);42./设置格式不可编辑43.cp.setFormatting(true );44.else 45.cp.setEdit(STDocProtect.NONE);46.cp.setHash(null);47.cp.setSalt(null);48./设置内容不可编辑49.cp.setEnforcement(false);50./设置格式不可编辑51.cp.set
28、Formatting(false);52. 53.54. cs.setDocumentProtection(cp);55. ds.setJaxbElement(cs);56./ 添加到文档主体中57. wordPackage.getMainDocumentPart().addTargetPart(ds);精品文档学习资料58. 59.60. /*61. *功能描述:设置文档是否只读,包括内容和样式62.* param fileName文件63.* param isReadOnly是否只读64.* return返回值:设置成功,则返回true ,否则返回 false65. * throws Ex
29、ception66. * author myclover67. */68.publicstaticboolean setReadOnly(String fileName ,boolean isReadOnly) throws Exception69.try70.File file =new File(fileName);71.if(!file.exists() 72.returnfalse ;73.74./加载需要设置只读的文件75.WordprocessingMLPackage wordPackage = WordprocessingMLPackage.load(file);76./设置只读
30、77.setReadOnly(wordPackage, isReadOnly);78./保存文件79.saveWordPackage(wordPackage, file);80.catch(Exception e) 81.e.printStackTrace();82.returnfalse;83. 84.returntrue;85. 2. 修改字体生成的 RPr 不能单独使用,应与 Text共同使用1. /*2. *功能描述:设置字体的样式3.* param fontFamily字体类型4.* param colorVal字体颜色5.* param hpsMeasureSize字号大小6.*
31、param sTHint字体格式7.* param isBlod是否加粗8.* return返回值:返回字体样式对象9. * throws Exception10. * author myclover11. */精品文档学习资料12.privatestaticRPr getRPr(String fontFamily , String colorVal , String hpsMeasureSize , STHint sTHint ,booleanisBold)13.ObjectFactory factory = Context.getWmlObjectFactory();14.RPr rPr
32、= factory.createRPr();15.16.org.docx4j.wml.RFonts rf =new org.docx4j.wml.RFonts();17. rf.setHint(sTHint);18. rf.setAscii(fontFamily);19. rf.setHAnsi(fontFamily);20. rPr.setRFonts(rf);21.22. BooleanDefaultTrue bdt = Context.getWmlObjectFactory().createBooleanDefaultTrue();23. rPr.setBCs(bdt);24.if (i
33、sBold)25.rPr.setB(bdt);26. 27.org.docx4j.wml.Color color =new org.docx4j.wml.Color();28. color.setVal(colorVal);29. rPr.setColor(color);30.31.org.docx4j.wml.HpsMeasure sz =new org.docx4j.wml.HpsMeasure();32.sz.setVal(new BigInteger(hpsMeasureSize);33. rPr.setSz(sz);34. rPr.setSzCs(sz);35.36.returnrP
34、r;37. 38. Text t = factory.createText();39. t.setValue(data);40. R run = factory.createR();41.run.setRPr(getRPr(" 宋体 " , "000000","18", STHint.EAST_ASIA, isBold)42. run.getContent().add(t);43. p.getContent().add(run);3. 修改单元格 / 表格样式单元格内容垂直居中(已有 Tc tc )1. TcPr tcpr = tc.
35、getTcPr();2. ObjectFactory factory = Context.getWmlObjectFactory();3.if (tcpr =null )4.tcpr = factory.createTcPr();5. 6./ 设置内容垂直居中7. CTVerticalJc valign = factory.createCTVerticalJc();8. valign.setVal(STVerticalJc.CENTER);9. tcpr.setVAlign(valign);精品文档学习资料获取表格边框样式。修改样式就是创建或获取CTBorder 对象后,修改参数再 set 回
36、1. /*2. *功能描述:获取单元格边框样式3.* param type单元格类型, 0 表示无边框, 2 表示双线边框,其他表示单线边框4.* param color边框颜色5.* param border边框大小6.* param space间距7.* return返回值:返回边框对象8. * author myclover9. */10.privatestaticCTBorder getCTBorder(int type , String color , String border , String space)11.CTBorder ctb =new CTBorder();12.if
37、(type =0)13.ctb.setVal(STBorder.NIL);14.else 15.ctb.setColor(color);16.ctb.setSz(new BigInteger(border);17.ctb.setSpace(new BigInteger(space);18.if (type =2)19.ctb.setVal(STBorder.DOUBLE);20.else21.ctb.setVal(STBorder.SINGLE);22.23. 24.returnctb;25. 26. /*27. * Description:表格增加边框 可以设置上下左右四个边框样式以及横竖水
38、平线样式28. */29.public voidsetTblBorders(TblPr tblPr, CTBorder topBorder,CTBorder rightBorder,CTBorder bottomBorder, CTBorder leftBorder,CTBorder hBorder, CTBorder vBorder) 30.TblBorders borders = tblPr.getTblBorders();31.if(borders =null ) 32.borders =new TblBorders();33.tblPr.setTblBorders(borders);3
39、4.35.if(topBorder !=null) 36.borders.setTop(topBorder);37.null ) 38.if(rightBorder !=39.borders.setRight(rightBorder);40.41.if(bottomBorder !=null) 42.borders.setBottom(bottomBorder);43.精品文档学习资料44.if(leftBorder !=null ) 45.borders.setLeft(leftBorder);46.47.if(hBorder !=null ) 48.borders.setInsideH(h
40、Border);49.50.if(vBorder !=null ) 51.borders.setInsideV(vBorder);52.53. 54.4. 合并单元格1. /*2. *功能描述:合并单元格 </BR>3. *表示合并第 startRow (开始行)行中的第 startCol (开始列)列到( startCol + colSpan - 1)列 </BR>4.*表示合并第 startCol (开始列)行中的第 startRow (开始行)列到( startRow + rowSpan - 1)行5.* param tc单元格对象6.* param curren
41、tRow当前行号,传入的是遍历表格时的行索引参数7.* param startRow开始行8.* param rowSpan合并的行数,大于1 才表示合并9.* param currentCol当前列号,传入的是遍历表格时的列索引参数10.* param startCol开始列11.* param colSpan合并的列数,大于1 才表示合并12. * author myclover13. */14.publicstaticvoidsetCellMerge(Tc tc ,intcurrentRow ,intstartRow ,introwSpan,intcurrentCol ,intstart
42、Col ,intcolSpan)15. ObjectFactory factory = Context.getWmlObjectFactory();16. TcPr tcpr = tc.getTcPr();17.if (tcpr =null )18.tcpr = factory.createTcPr();19. 20./ 表示合并列21.if (colSpan >1)22./ 表示从第 startRow 行开始23.if (currentRow = startRow)24./表示从第 startRow行的第 startCol列开始合并,合并到第 startCol + colSpan -1
43、 列25.if(currentCol = startCol)26.HMerge hm = factory.createTcPrInnerHMerge();27.hm.setVal("restart");精品文档学习资料28.tcpr.setHMerge(hm);29.tc.setTcPr(tcpr);30.else if (currentCol > startCol && currentCol <= (startCol + colSpan -1)31.HMerge hm = factory.createTcPrInnerHMerge();32.t
44、cpr.setHMerge(hm);33.tc.setTcPr(tcpr);34.35.36. 37./ 表示合并行38.if (rowSpan > 1)39./ 表示从第 startCol列开始40.if (currentCol = startCol)41./ 表示从第 startCol列的第 startRow行始合并,合并到第 startRow + rowSpan -1 行42.if(currentRow = startRow)43.VMerge vm = factory.createTcPrInnerVMerge();44.vm.setVal("restart"
45、);45.tcpr.setVMerge(vm);46.tc.setTcPr(tcpr);47.else if (currentRow > startRow && currentRow <= (startRow + rowSpan -1)48.VMerge vm = factory.createTcPrInnerVMerge();49.tcpr.setVMerge(vm);50.tc.setTcPr(tcpr);51.52.53. 54.55. 56.57. /*58.*功能描述:合并单元格,相当于跨列的效果</BR>59.*表示合并第 startRow
46、(开始行)行中的第 startCol (开始列)列到( startCol + colSpan - 1)列 </BR>60.* param tc单元格对象61.* param currentRow当前行号,传入的是遍历表格时的行索引参数62.* param startRow开始行63.* param currentCol当前列号,传入的是遍历表格时的列索引参数64.* param startCol开始列65.* param colSpan合并的列数,大于1 才表示合并66. * author myclover67. */68.publicstaticvoidsetCellHMerge
47、(Tc tc ,intcurrentRow ,intstartRow ,intcurrentCol ,intstartCol ,intcolSpan)精品文档学习资料69.setCellMerge(tc, currentRow, startRow,1, currentCol, startCol, colSpan);70. 71.72. /*73.*功能描述:合并单元格,相当于跨行的效果</BR>74.*表示合并第 startCol (开始列)行中的第 startRow (开始行)列到( startRow + rowSpan - 1)行75.* param tc单元格对象76.* param currentRow当前行号,传入的是遍历表格时的行索引参数77.* param startRow开始行78.* param rowSpan合并的行数,大于1 才表示合并79.* param currentCol当前列号,传入的是遍历表格时的列索引参数80.* param startCol开始列81. * author myclover82. */83.publicstaticvoidsetCellVMerage(Tc tc ,int currentRow ,int startRow ,int rowSpan ,int currentCol ,intstartCol)84.setC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业管理人员聘用合同要点
- 30MW分布式发电项目建议书
- 机床主传动系统课程设计
- (2024版)高清晰度卫星遥感服务合同
- 机器人机座结构课程设计
- 机器人技术课程设计
- 机器人工程设计课程设计
- 机器人在线课程设计
- 机制管理课程设计
- 浙江省丽水四校2019-2020学年高一10月份(联考)阶段检测化学试题
- 学术英语写作(本科)智慧树知到期末考试答案2024年
- 粮油质量检验-课件-项目四-小麦粉质量检验
- 2024年工会工作总结和年工会工作计划范文
- 安全员继续教育考试题库1000道附参考答案(完整版)
- 2024年中储粮集团招聘笔试参考题库附带答案详解
- 品牌卡通IP设计方法
- (2024年)保安培训图文课件
- 2023年《中职音乐》期末考试试卷及参考答案(卷)
- 山东开放大学2024《控制系统CAD》形考作业1-3答案
- 人教版九年级上学期期中考试数学试卷及答案解析(共5套)
- 山东省2023年高考物理模拟(一模、二模)试题知识点训练:电磁学解答题
评论
0/150
提交评论