欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Docx4J学习知识积累.doc

    • 资源ID:2539368       资源大小:373.16KB        全文页数:19页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Docx4J学习知识积累.doc

    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: http:/www.docx4java.org/trac/docx4jSample codes: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,intwidths)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:tblBorders><w: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. try22. 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:tblGrid><w:gridColw:w="4788"/>38. TblGridtblGrid=factory.createTblGrid();39. tbl.setTblGrid(tblGrid);40. /Addrequired<w:gridColw:w="4788"/>41. for(inti=1;i<=cols;i+)42. TblGridColgridCol=factory.createTblGridCol();43. gridCol.setW(BigInteger.valueOf(widthsi-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="4788"w:type="dxa"/>57. TblWidthcellWidth=factory.createTblWidth();58. tcPr.setTcW(cellWidth);59. cellWidth.setType("dxa");60. cellWidth.setW(BigInteger.valueOf(widthsi-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=factory.createSectPrPgMar();79. pg.setTop(newBigInteger(top);80. pg.setBottom(newBigInteger(bottom);81. pg.setLeft(newBigInteger(left);82. pg.setRight(newBigInteger(right);83. wordPackage.getDocumentModel().getSections().get(0).getSectPr().setPgMar(pg);84. 85. 86. /*87. *功能描述:设置页边距,上下边距都为1440,2.54厘米88. *paramwordPackage文档处理包对象89. *paramleft左边距90. *paramright右边距91. *authormyclover92. */93. publicstaticvoidsetMarginSpace(WordprocessingMLPackagewordPackage,Stringleft,Stringright)94. setMarginSpace(wordPackage,"1440","1440",left,right);95. 96. 97. /*98. *功能描述:设置页边距,上下边距都为1440,2.54厘米,左右边距都为1797,3.17厘米99. *paramwordPackage文档处理包对象100. *authormyclover101. */102. publicstaticvoidsetMarginSpace(WordprocessingMLPackagewordPackage)103. setMarginSpace(wordPackage,"1440","1440","1797","1797");104. 文档只读1. /*2. *功能描述:设置文档是否只读,包括内容和样式3. *paramwordPackage文档处理包对象4. *paramisReadOnly是否只读5. *throwsException6. *authormyclover7. */8. publicstaticvoidsetReadOnly(WordprocessingMLPackagewordPackage,booleanisReadOnly)throwsException9. bytebt="".getBytes();10. if(isReadOnly)11. bt="123456".getBytes();12. 13. ObjectFactoryfactory=Context.getWmlObjectFactory();14. /创建设置文档对象15. DocumentSettingsPartds=wordPackage.getMainDocumentPart().getDocumentSettingsPart();16. if(ds=null)17. ds=newDocumentSettingsPart();18. 19. CTSettingscs=ds.getJaxbElement();20. if(cs=null)21. cs=factory.createCTSettings();22. 23. /创建文档保护对象24. CTDocProtectcp=cs.getDocumentProtection();25. if(cp=null)26. cp=newCTDocProtect();27. 28. /设置加密方式29. cp.setCryptProviderType(STCryptProv.RSA_AES);30. cp.setCryptAlgorithmClass(STAlgClass.HASH);31. /设置任何用户32. cp.setCryptAlgorithmType(STAlgType.TYPE_ANY);33. cp.setCryptAlgorithmSid(newBigInteger("4");34. cp.setCryptSpinCount(newBigInteger("50000");35. /只读36. if(isReadOnly)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. else45. cp.setEdit(STDocProtect.NONE);46. cp.setHash(null);47. cp.setSalt(null);48. /设置内容不可编辑49. cp.setEnforcement(false);50. /设置格式不可编辑51. cp.setFormatting(false);52. 53. 54. cs.setDocumentProtection(cp);55. ds.setJaxbElement(cs);56. /添加到文档主体中57. wordPackage.getMainDocumentPart().addTargetPart(ds);58. 59. 60. /*61. *功能描述:设置文档是否只读,包括内容和样式62. *paramfileName文件63. *paramisReadOnly是否只读64. *return返回值:设置成功,则返回true,否则返回false65. *throwsException66. *authormyclover67. */68. publicstaticbooleansetReadOnly(StringfileName,booleanisReadOnly)throwsException69. try70. Filefile=newFile(fileName);71. if(!file.exists()72. returnfalse;73. 74. /加载需要设置只读的文件75. WordprocessingMLPackagewordPackage=WordprocessingMLPackage.load(file);76. /设置只读77. setReadOnly(wordPackage,isReadOnly);78. /保存文件79. saveWordPackage(wordPackage,file);80. catch(Exceptione)81. e.printStackTrace();82. returnfalse;83. 84. returntrue;85. 2. 修改字体生成的RPr不能单独使用,应与Text共同使用1. /*2. *功能描述:设置字体的样式3. *paramfontFamily字体类型4. *paramcolorVal字体颜色5. *paramhpsMeasureSize字号大小6. *paramsTHint字体格式7. *paramisBlod是否加粗8. *return返回值:返回字体样式对象9. *throwsException10. *authormyclover11. */12. privatestaticRPrgetRPr(StringfontFamily,StringcolorVal,StringhpsMeasureSize,STHintsTHint,booleanisBold)13. ObjectFactoryfactory=Context.getWmlObjectFactory();14. RPrrPr=factory.createRPr();15. 16. org.docx4j.wml.RFontsrf=neworg.docx4j.wml.RFonts();17. rf.setHint(sTHint);18. rf.setAscii(fontFamily);19. rf.setHAnsi(fontFamily);20. rPr.setRFonts(rf);21. 22. BooleanDefaultTruebdt=Context.getWmlObjectFactory().createBooleanDefaultTrue();23. rPr.setBCs(bdt);24. if(isBold)25. rPr.setB(bdt);26. 27. org.docx4j.wml.Colorcolor=neworg.docx4j.wml.Color();28. color.setVal(colorVal);29. rPr.setColor(color);30. 31. org.docx4j.wml.HpsMeasuresz=neworg.docx4j.wml.HpsMeasure();32. sz.setVal(newBigInteger(hpsMeasureSize);33. rPr.setSz(sz);34. rPr.setSzCs(sz);35. 36. returnrPr;37. 38. Textt=factory.createText();39. t.setValue(data);40. Rrun=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. TcPrtcpr=tc.getTcPr();2. ObjectFactoryfactory=Context.getWmlObjectFactory();3. if(tcpr=null)4. tcpr=factory.createTcPr();5. 6. /设置内容垂直居中7. CTVerticalJcvalign=factory.createCTVerticalJc();8. valign.setVal(STVerticalJc.CENTER);9. tcpr.setVAlign(valign);获取表格边框样式。修改样式就是创建或获取CTBorder对象后,修改参数再set回1. /*2. *功能描述:获取单元格边框样式3. *paramtype单元格类型,0表示无边框,2表示双线边框,其他表示单线边框4. *paramcolor边框颜色5. *paramborder边框大小6. *paramspace间距7. *return返回值:返回边框对象8. *authormyclover9. */10. privatestaticCTBordergetCTBorder(inttype,Stringcolor,Stringborder,Stringspace)11. CTBorderctb=newCTBorder();12. if(type=0)13. ctb.setVal(STBorder.NIL);14. else15. ctb.setColor(color);16. ctb.setSz(newBigInteger(border);17. ctb.setSpace(newBigInteger(space);18. if(type=2)19. ctb.setVal(STBorder.DOUBLE);20. else21. ctb.setVal(STBorder.SINGLE);22. 23. 24. returnctb;25. 26. /*27. * Description:表格增加边框 可以设置上下左右四个边框样式以及横竖水平线样式28. */29. public void setTblBorders(TblPr tblPr, CTBorder topBorder, CTBorder rightBorder, CTBorder bottomBorder, CTBorder leftBorder, CTBorder hBorder, CTBorder vBorder) 30. TblBorders borders = tblPr.getTblBorders();31. if (borders = null) 32.

    注意事项

    本文(Docx4J学习知识积累.doc)为本站会员(小**)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开