版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、Java讀取word文檔解決方案java讀取word文檔時(shí),雖然網(wǎng)上介紹了很多插件poi、java2Word、jacob、itext等等,poi無法讀取格式(新的API估計(jì)行好像還在處于研發(fā)階段,不太穩(wěn)定,做項(xiàng)目不太敢用);java2Word、jacob容易報(bào)錯(cuò)找不到注冊,比較詭異,我曾經(jīng)在不同的機(jī)器上試過,操作方法完全一致,有的機(jī)器不報(bào)錯(cuò),有的報(bào)錯(cuò),去他們論壇找高人解決也說不出原因,項(xiàng)目部署用它有點(diǎn)玄;itxt好像寫很方便但是我查了好久資料沒有見到過關(guān)于讀的好辦法。經(jīng)過一番選擇還是折中點(diǎn)采用rtf最好,畢竟rtf是開源格式,不需要借助任何插件,只需基本IO操作外加編碼轉(zhuǎn)換即可。rtf格式文件
2、表面看來和doc沒啥區(qū)別,都可以用word打開,各種格式都可以設(shè)定。- 實(shí)現(xiàn)的功能:讀取rtf模板內(nèi)容(格式和文本內(nèi)容),替換變化部分,形成新的rtf文檔。- 實(shí)現(xiàn)思路:模板中固定部分手動(dòng)輸入,變化的部分用$info$表示,只需替換$info$即可。 1、采用字節(jié)的形式讀取rtf模板內(nèi)容 2、將可變的內(nèi)容字符串轉(zhuǎn)為rtf編碼 3、替換原文中的可變部分,形成新的rtf文檔主要程序如下:Java代碼/*將制定的字符串轉(zhuǎn)換為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();/*字節(jié)形式讀取rtf模板內(nèi)容*/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(讀取模板文件結(jié)束);break;sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytescatch(Exceptione)e.printStackTrace(); 以上為核心代碼,剩余部分就是替換,從新組裝jav
5、a中的String.replace(oldstr,newstr);方法可以實(shí)現(xiàn),在這就不貼了。源代碼部分詳見附件。運(yùn)行源代碼前提:c盤創(chuàng)建YQ目錄,將附件中模板.rtf復(fù)制到Y(jié)Q目錄之下,運(yùn)行OpreatorRTF.java文件即可,就會(huì)在YQ目錄下生成文件名如:21時(shí)15分19秒_cheney_記錄.rtf 的文件。文件名是在程序中指定的呵呵。由于是由商業(yè)軟件中拆分出的demo所以只是將自己原來的寫的程序分離,合并在一個(gè)java文件中,所以有的方法在示例程序中看似多余,沒有必要那么麻煩。 對于替換部分需要循環(huán)的特例程序,我不好拆分,里面很容易暴露商業(yè)軟件的東西,所以就不貼了,有需要的話可以加
6、我QQ或者M(jìn)SN,一起討論呵呵。附件傳了半天也沒有傳上去,沒有辦法只有這樣搞了呵呵。模板文件附件無法存放,需要的直接聯(lián)系呵呵。其實(shí)直接看以下的java程序部分,就會(huì)明白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/*字符串轉(zhuǎn)換為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;/*半角轉(zhuǎn)為全角*/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/*構(gòu)建生成文
11、件名targetname:12時(shí)10分23秒_username_記錄.rtf*/Datecurrent=newDate();SimpleDateFormatsdf=newjava.text.SimpleDateFormat(yyyy-MM-ddHH:mm:ss);Stringtargetname=sdf.format(current).substring(11,13)+時(shí);targetname+=sdf.format(current).substring(14,16)+分;targetname+=sdf.format(current).substring(17,19)+秒;targetname
12、+=_+username+_記錄.rtf;/*字節(jié)形式讀取模板文件內(nèi)容,將結(jié)果轉(zhuǎn)為字符串*/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(讀取模板文件結(jié)束);break;sourcecontent+=newString(b,0,bytesRead);/converttostringusingbytescatch(Exceptione)e.printStackTrace();/*修改變化部分*/Stringtargetcontent=;/*拆分之后的數(shù)組元素與模板中的標(biāo)識符對應(yīng)關(guān)系*array0:timetop*array1:info*array2:idea*array3:advice
14、*array4:infosend*/Stringarray=content.split();/*2008年11月27日:更新模板之后時(shí)間無需自動(dòng)填充*/*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);/*結(jié)果輸出保存到文件*/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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 頭發(fā)和頭皮用化妝制劑產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 布萊爾盲文手機(jī)產(chǎn)品供應(yīng)鏈分析
- 樂譜產(chǎn)品供應(yīng)鏈分析
- 家養(yǎng)寵物用毯產(chǎn)品供應(yīng)鏈分析
- 公寓管理行業(yè)經(jīng)營分析報(bào)告
- 同聲傳譯服務(wù)行業(yè)經(jīng)營分析報(bào)告
- 農(nóng)業(yè)智能施肥機(jī)行業(yè)相關(guān)項(xiàng)目經(jīng)營管理報(bào)告
- 移動(dòng)電話用屏幕保護(hù)膜產(chǎn)品供應(yīng)鏈分析
- 外文模板印刷用產(chǎn)品供應(yīng)鏈分析
- 分成格的漆器餐盤產(chǎn)業(yè)鏈招商引資的調(diào)研報(bào)告
- 教練場地技術(shù)條件說明
- 婦產(chǎn)科感染性休克
- 六年級上冊數(shù)學(xué)課件西師大版 按比例分配的方法解決實(shí)際問題
- 2023年全國初中數(shù)學(xué)聯(lián)合競賽試題及參考答案
- WS/T 89-2015尿中氟化物測定離子選擇電極法
- (新平臺)國家開放大學(xué)《農(nóng)村社會(huì)學(xué)》形考任務(wù)1-4參考答案
- GB/T 5729-2003電子設(shè)備用固定電阻器第1部分:總規(guī)范
- GB/T 41013-2021電機(jī)系統(tǒng)能效評價(jià)
- GB/T 34474.2-2018鋼中帶狀組織的評定第2部分:定量法
- 安利-列名單和邀約
- GB/T 2059-2017銅及銅合金帶材
評論
0/150
提交評論