版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java读取word文档解决方案java读取word文档时,虽然网上介绍了很多插件poi、java2Word、jacob、itext等等,poi无法读取格式(新的API估计行好像还在处于研发阶段,不太稳定,做项目不太敢用);java2Word、jacob容易报错找不到注册,比较诡异,我曾经在不同的机器上试过,操作方法完全一致,有的机器不报错,有的报错,去他们论坛找高人解决也说不出原因,项目部署用它有点玄;itxt好像写很方便但是我查了好久资料没有见到过关于读的好办法。经过一番选择还是折中点采用rtf最好,毕竟rtf是开源格式,不需要借助任何插件,只需基本IO操作外加编码转换即可。rtf格式文件
2、表面看来和doc没啥区别,都可以用word打开,各种格式都可以设定。- 实现的功能:读取rtf模板内容(格式和文本内容),替换变化部分,形成新的rtf文档。- 实现思路:模板中固定部分手动输入,变化的部分用$info$表示,只需替换$info$即可。 1、采用字节的形式读取rtf模板内容 2、将可变的内容字符串转为rtf编码 3、替换原文中的可变部分,形成新的rtf文档主要程序如下:Java代码1. /*2. *将制定的字符串转换为rtf编码3. */4. publicStringbin2hex(Stringbin)5. chardigital=ABCDEF.toCharArray();6.
3、StringBuffersb=newStringBuffer();7. bytebs=bin.getBytes();8. intbit;9. for(inti=0;i4;11. sb.append();12. sb.append(digitalbit);13. bit=bsi&0x0f;14. sb.append(digitalbit);15. 16. returnsb.toString();17. 18. 19. /*20. *字节形式读取rtf模板内容21. */22. publicStringreadByteRtf(InputStreamins,Stringpath)23. String
4、sourcecontent=;24. try25. ins=newFileInputStream(path);26. byteb=newbyte1024;27. if(ins=null)28. System.out.println(源模板文件不存在);29. 30. intbytesRead=0;31. while(true)32. bytesRead=ins.read(b,0,1024);/returnfinalreadbytescounts33. if(bytesRead=-1)/endofInputStream34. System.out.println(读取模板文件结束);35. br
5、eak;36. 37. sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytes38. 39. catch(Exceptione)40. e.printStackTrace();41. 42. 以上为核心代码,剩余部分就是替换,从新组装java中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。源代码部分详见附件。运行源代码前提:c盘创建YQ目录,将附件中模板.rtf复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ目录下生成文件名如:21时15分19秒
6、_cheney_记录.rtf 的文件。文件名是在程序中指定的呵呵。由于是由商业软件中拆分出的demo所以只是将自己原来的写的程序分离,合并在一个java文件中,所以有的方法在示例程序中看似多余,没有必要那么麻烦。 对于替换部分需要循环的特例程序,我不好拆分,里面很容易暴露商业软件的东西,所以就不贴了,有需要的话可以加我QQ或者MSN,一起讨论呵呵。附件传了半天也没有传上去,没有办法只有这样搞了呵呵。模板文件附件无法存放,需要的直接联系呵呵。其实直接看以下的java程序部分,就会明白Java代码1. 2. /*3. *以下部分是java源代码4. */5. 6. packagecom;7. 8.
7、 importjava.io.File;9. importjava.io.FileInputStream;10. importjava.io.FileWriter;11. importjava.io.IOException;12. importjava.io.InputStream;13. importjava.io.PrintWriter;14. importjava.text.SimpleDateFormat;15. importjava.util.Date;16. 17. publicclassOperatorRTF18. 19. /*20. *字符串转换为rtf编码21. *param
8、content22. *return23. */24. publicStringstrToRtf(Stringcontent)25. chardigital=ABCDEF.toCharArray();26. StringBuffersb=newStringBuffer();27. bytebs=content.getBytes();28. intbit;29. for(inti=0;i4;31. sb.append();32. sb.append(digitalbit);33. bit=bsi&0x0f;34. sb.append(digitalbit);35. 36. returnsb.to
9、String();37. 38. 39. /*40. *替换文档的可变部分41. *paramcontent42. *paramreplacecontent43. *paramflag44. *return45. */46. publicStringreplaceRTF(Stringcontent,Stringreplacecontent,intflag)47. Stringrc=strToRtf(replacecontent);48. Stringtarget=;49. /*if(flag=0)50. target=content.replace($time$,rc);51. */52. i
10、f(flag=0)53. target=content.replace($timetop$,rc);54. 55. if(flag=1)56. target=content.replace($info$,rc);57. 58. if(flag=2)59. target=content.replace($idea$,rc);60. 61. if(flag=3)62. target=content.replace($advice$,rc);63. 64. if(flag=4)65. target=content.replace($infosend$,rc);66. 67. returntarget
11、;68. 69. 70. /*71. *获取文件路径72. *paramflag73. *return74. */75. publicStringgetSavePath()76. 77. Stringpath=C:YQ;78. 79. FilefDirecotry=newFile(path);80. if(!fDirecotry.exists()81. fDirecotry.mkdirs();82. 83. returnpath;84. 85. 86. /*87. *半角转为全角88. */89. publicStringToSBC(Stringinput)90. charc=input.to
12、CharArray();91. for(inti=0;ic.length;i+)92. if(ci=32)93. ci=(char)12288;94. continue;95. 96. if(ci127)97. ci=(char)(ci+65248);98. 99. 100. returnnewString(c);101. 102. 103. publicvoidrgModel(Stringusername,Stringcontent)104. /TODOAuto-generatedmethodstub105. /*构建生成文件名targetname:12时10分23秒_username_记录
13、.rtf*/106. Datecurrent=newDate();107. SimpleDateFormatsdf=newjava.text.SimpleDateFormat(yyyy-MM-ddHH:mm:ss);108. Stringtargetname=sdf.format(current).substring(11,13)+时;109. targetname+=sdf.format(current).substring(14,16)+分;110. targetname+=sdf.format(current).substring(17,19)+秒;111. targetname+=_+
14、username+_记录.rtf;112. 113. /*字节形式读取模板文件内容,将结果转为字符串*/114. Stringstrpath=getSavePath();115. Stringsourname=strpath+模板.rtf;116. Stringsourcecontent=;117. InputStreamins=null;118. try119. ins=newFileInputStream(sourname);120. byteb=newbyte1024;121. if(ins=null)122. System.out.println(源模板文件不存在);123. 124.
15、 intbytesRead=0;125. while(true)126. bytesRead=ins.read(b,0,1024);/returnfinalreadbytescounts127. if(bytesRead=-1)/endofInputStream128. System.out.println(读取模板文件结束);129. break;130. 131. sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytes132. 133. catch(Exceptione)134. e.printStackTrac
16、e();135. 136. /*修改变化部分*/137. Stringtargetcontent=;138. /*139. *拆分之后的数组元素与模板中的标识符对应关系140. *array0:timetop141. *array1:info142. *array2:idea143. *array3:advice144. *array4:infosend145. */146. Stringarray=content.split();147. /*148. *2008年11月27日:更新模板之后时间无需自动填充149. */150. /*Stringnowtime=sdf.format(curr
17、ent).substring(0,4)+年;151. nowtime+=sdf.format(current).substring(5,7)+月;152. nowtime+=sdf.format(current).substring(8,10)+日;*/153. for(inti=0;iarray.length;i+)154. /*if(i=0)155. targetcontent=documentDoc.replaceRTF(sourcecontent,nowtime,i);156. else157. targetcontent=documentDoc.replaceRTF(targetco
18、ntent,arrayi-1,i);158. */159. if(i=0)160. targetcontent=replaceRTF(sourcecontent,arrayi,i);161. else162. targetcontent=replaceRTF(targetcontent,arrayi,i);163. 164. 165. 166. /*结果输出保存到文件*/167. try168. FileWriterfw=newFileWriter(getSavePath()+targetname,true);169. PrintWriterout=newPrintWriter(fw);170. if(targetcontent.equals(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 礼仪员的服装与化妆技巧教程
- 混凝土实体检测施工方案
- 事业单位综合管理岗笔试全真模拟试卷带解析
- 高中英语教资面试听力专项真题演练及答案
- 警务大数据可视化平台建设方案
- 专业司机必做试题及答案
- CAD等级考试专项试题及答案展示
- 2027届四川省巴中学市恩阳区五校七上数学期末达标检测试题含解析
- 导尿知识问答试题及对应答案
- 卫生习惯比补课更重要
- 2026年中国电建集团面试题集
- 烹饪概论 课件 模块一 中国烹饪简史
- 电气控制柜结构设计与布线装配手册
- 2026年及未来5年市场数据中国镁肥行业市场运营现状及行业发展趋势报告
- 2025年注册验船师资格考试(A级-船舶检验专业能力)历年参考题库含答案
- 养殖场生物安全课件
- 康复科住院病历范文5篇
- 压力蒸汽灭菌原理及技术
- 材料物理性能检验员岗位面试问题及答案
- 应急救援装备采购项目实施方案
- 喉癌课件完整版本
评论
0/150
提交评论