




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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代码/*将制定的字符串转换为rtf编码*/publicStringbin2hex(Stringbin)chardigital=0123456789ABCDEF.toCharArray();StringBuf
3、fersb=newStringBuffer();bytebs=bin.getBytes();intbit;for(inti=0;i4;sb.append();sb.append(digitalbit);bit=bsi&0 x0f;sb.append(digitalbit);returnsb.toString();/*字节形式读取rtf模板内容*/publicStringreadByteRtf(InputStreamins,Stringpath)Stringsourcecontent=;tryins=newFileInputStream(path);byteb=newbyte1024;if(in
4、s=null)ntln(源模板文件不存在);intbytesRead=0;while(true)bytesRead=ins.read(b,0,1024);/returnfinalreadbytescountsif(bytesRead=-1)/endofInputStreamSystem.out.println(读取模板文件结束);break;sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytescatch(Exceptione)e.printStackTrace(); 以上为核心代码,剩余部分就是替换,从新组装jav
5、a中的String.replace(oldstr,newstr);方法可以实现,在这就不贴了。源代码部分详见附件。运行源代码前提:c盘创建YQ目录,将附件中模板.rtf复制到YQ目录之下,运行OpreatorRTF.java文件即可,就会在YQ目录下生成文件名如:21时15分19秒_cheney_记录.rtf 的文件。文件名是在程序中指定的呵呵。由于是由商业软件中拆分出的demo所以只是将自己原来的写的程序分离,合并在一个java文件中,所以有的方法在示例程序中看似多余,没有必要那么麻烦。 对于替换部分需要循环的特例程序,我不好拆分,里面很容易暴露商业软件的东西,所以就不贴了,有需要的话可以加
6、我QQ或者MSN,一起讨论呵呵。附件传了半天也没有传上去,没有办法只有这样搞了呵呵。模板文件附件无法存放,需要的直接联系呵呵。其实直接看以下的java程序部分,就会明白Java代码/*以下部分是java源代码*/packagecom;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStream;importjava.io.PrintWriter;importjava.text.SimpleDateForma
7、t;importjava.util.Date;publicclassOperatorRTF/*字符串转换为rtf编码*paramcontent*return*/publicStringstrToRtf(Stringcontent)chardigital=0123456789ABCDEF.toCharArray();StringBuffersb=newStringBuffer();bytebs=content.getBytes();intbit;for(inti=0;i4;sb.append();sb.append(digitalbit);bit=bsi&0 x0f;sb.append(digi
8、talbit);returnsb.toString();/*替换文档的可变部分*paramcontent*paramreplacecontent*paramflag*return*/publicStringreplaceRTF(Stringcontent,Stringreplacecontent,intflag)Stringrc=strToRtf(replacecontent);Stringtarget=;/*if(flag=0)target=content.replace($time$,rc);*/if(flag=0)target=content.replace($timetop$,rc);
9、if(flag=1)target=content.replace($info$,rc);if(flag=2)target=content.replace($idea$,rc);if(flag=3)target=content.replace($advice$,rc);if(flag=4)target=content.replace($infosend$,rc);returntarget;/*获取文件路径*paramflag*return*/publicStringgetSavePath()Stringpath=C:YQ;FilefDirecotry=newFile(path);if(!fDir
10、ecotry.exists()fDirecotry.mkdirs();returnpath;/*半角转为全角*/publicStringToSBC(Stringinput)charc=input.toCharArray();for(inti=0;ic.length;i+)if(ci=32)ci=(char)12288;continue;if(ci127)ci=(char)(ci+65248);returnnewString(c);publicvoidrgModel(Stringusername,Stringcontent)/TODOAuto-generatedmethodstub/*构建生成文
11、件名targetname:12时10分23秒_username_记录.rtf*/Datecurrent=newDate();SimpleDateFormatsdf=newjava.text.SimpleDateFormat(yyyy-MM-ddHH:mm:ss);Stringtargetname=sdf.format(current).substring(11,13)+时;targetname+=sdf.format(current).substring(14,16)+分;targetname+=sdf.format(current).substring(17,19)+秒;targetname
12、+=_+username+_记录.rtf;/*字节形式读取模板文件内容,将结果转为字符串*/Stringstrpath=getSavePath();Stringsourname=strpath+模板.rtf;Stringsourcecontent=;InputStreamins=null;tryins=newFileInputStream(sourname);byteb=newbyte1024;if(ins=null)System.out.println(源模板文件不存在);intbytesRead=0;while(true)bytesRead=ins.read(b,0,1024);/retu
13、rnfinalreadbytescountsif(bytesRead=-1)/endofInputStreamSystem.out.println(读取模板文件结束);break;sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytescatch(Exceptione)e.printStackTrace();/*修改变化部分*/Stringtargetcontent=;/*拆分之后的数组元素与模板中的标识符对应关系*array0:timetop*array1:info*array2:idea*array3:advice
14、*array4:infosend*/Stringarray=content.split();/*2008年11月27日:更新模板之后时间无需自动填充*/*Stringnowtime=sdf.format(current).substring(0,4)+年;nowtime+=sdf.format(current).substring(5,7)+月;nowtime+=sdf.format(current).substring(8,10)+日;*/for(inti=0;iarray.length;i+)/*if(i=0)targetcontent=documentDoc.replaceRTF(sou
15、rcecontent,nowtime,i);elsetargetcontent=documentDoc.replaceRTF(targetcontent,arrayi-1,i);*/if(i=0)targetcontent=replaceRTF(sourcecontent,arrayi,i);elsetargetcontent=replaceRTF(targetcontent,arrayi,i);/*结果输出保存到文件*/tryFileWriterfw=newFileWriter(getSavePath()+targetname,true);PrintWriterout=newPrintWriter(fw);if(targetcontent.equals()|targetcontent=)out.println(sourcecontent);elseout.println(targetcontent);out.close();fw.close();System.out.println(getSavePath()+该目录下生成文件+targetname+成功);catch(IOExceptione)/TODOAuto-generatedcatchblocke.printSt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合伙合同样本范本
- 2024湖北省民间工艺技师学院工作人员招聘考试及答案
- 2024海南卫生健康职业学院工作人员招聘考试及答案
- 高端育儿嫂服务协议合同
- 自愿放弃社保免责合同范本
- 能源产品销售合同
- 小型商铺租赁合同典范
- 运动解剖学模拟题+参考答案
- 正式入职合同书标准范本
- 管理人员的培训
- 景区安全管理教育培训
- 无锡移动推拉棚施工方案
- DB11T 1871-2021 建筑工程轮扣式钢管脚手架安全技术规程
- 洗胃技术操作流程及评分标准
- 俄乌冲突专题俄罗斯和乌克兰的恩怨情仇解读课件
- 登高车高空作业施工方案
- 冯德全早教方案(0岁)
- 2024年福建省卫生事业单位招聘(医学基础知识)考试题库宝典(含答案)
- 《人工智能导论》(第2版)高职全套教学课件
- 电子商务数据分析基础(第二版) 课件 模块1、2 电子商务数据分析概述、基础数据采集
- 知道网课智慧《幸福心理学》测试答案
评论
0/150
提交评论