- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
最近下载
- 《1,1,3-三氯丙酮》(征求意见稿).pdf VIP
- 八年级语文下册 第一单元 第2课《我的母亲》课件 新人教版.pptx VIP
- 统编版(部编版)小学语文三年级上册第三单元单元测试卷(含答案).pdf VIP
- 福建省福州时代中学2023-2024学年九年级下学期月考数学试题(含答案解析).pdf VIP
- 2025年秋新人教版数学三年级上册全册课件.pptx
- 加气混凝土砌块施工技术技术交底.pdf VIP
- 人教部编版四年级数学上册《角的度量(全章)》PPT教学课件.ppt VIP
- 2024年贵州省六盘水市中考语文试卷真题(含答案逐题解析).docx
- 121全等三角形公开课课件.pptx VIP
- qc080000内部质量审核查检表.doc VIP
文档评论(0)