java操作word可操作书签.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
近来有个需求,在word模板文档上设置书签,而后从数据库中查问数据,填补到word 文档书签地点,刚拿到需求时,用力在网上找资料。想象第三方jar包,帮我实现。有Apatch 的POI,java2word,jcob等,向来让我没法实现。POI操作word只好获得word中的书签, 其实不可以进行操作.java2word能够实现,可是除了包之外,还要一个dll文件放在system32 文件夹下,环境部署在linux服务器上,谁同意你放这样的文件,结果断念了.下边新建一个 word2007文件告诉大家不用第三方技术怎么一一实现。 此刻新建一个word,在请输入用户名处增添书签  userName,请输入年纪处增添书签  age Word2007版本其实就是zip格式,将新建word后缀名改.zip, 文件夹,翻开word文件夹会有一个文件,在word全部内容,都在这  解压会发现,里面全部是 xml文件中, w:bookmarkStartw:id=0w:name=userName/ w:r w:rPrw:rFontsw:hint=eastAsia//w:rPr w:t  请输入用户名  /w:t /w:r w:bookmarkEndw:id=0/ 这是新建书签处的内容,仔细的会发现,书签处内容在w:bookmarkStart/ w:bookmarkEndw:id=0/标签之间,w:bookmarkStart标签中的w:id跟w:name 表记书签的独一,中间是书签处的内容,会不会能够这样呢,找到用dom或许sax分析这个xml文档找到w:bookmarkStart/标签,而后找到w:r标签,再找到w:r标签里面的 w:t标签内容,替代就Ok了呢。一开始我就这样想的。可是你会发现, w:bookmarkStart/w:bookmarkStart不是这样配套的,假如是这样配套的,那依据前面 的说的直接分析找到w:bookmarkStart标签就OK了。 剖析xml文件你会发现,其实w:bookmarkStartw:id=0w:name=userName/标签跟 w:r标签是同级的,不过结束方式不一样而已,因此算是兄弟节点,能够不可以够找到 w:bookmarkStart的兄弟节点,也就是w:r标签,而后找到w:t标签,替代其文本。其 实w3c中Element对象中供给了获得兄弟节点的方法,getNextSibling( )获得下一个兄弟节 点。依据剖析的思路是能够实现的。可是会不会有疑问,假如w:bookmarkStar的下一个兄 弟节点会不会不是w:r标签呢,是的,假如书签处无内容,就会是这样的 w:bookmarkStartw:id=0w:name=userName/ w:bookmarkEndw:id=0/ 这样能够直接在w:bookmarkStart后边直接增添w:r标签 你多试几个文档你会发现,不论多复杂,只需节操还在。都会是这个样子。除非那种特别恶心的word。这个还得看你的word模板而论. 这样的思路是能够实现了,可是该怎么用java搞定呢,下边贴出代码 publicstaticvoidmodifyDocumentAndSave( )throwsIOException,ZipException,SAXException,ParserConfigurationException,TransformerException,TransformerConfigurationException{ arse(documentXMLIS); quals(bookMarkName)){ Elementnode=(Element)( );ewTransformer( ); ByteArrayOutputStreambaos=newByteArrayOutputStream( ); (newDOMSource(doc),newStreamResult(baos)); ZipOutputStreamdocxOutFile=newZipOutputStream(new FileOutputStream( D:\\)); EnumerationentriesIter=( ); while( )){ ZipEntryentry=(ZipEntry)( ); quals(word/)){ byte[]data=( ); (newZipEntry( ))); (data,0,; ( ); }else{ InputStreamincoming=(entry); 此处设定值需谨慎,假如设置小了,会损坏word文档,至于为何会损坏,自己去思虑 byte[]data=newbyte[1024*512];readCount=(data,0,(int

文档评论(0)

158****3421 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档