<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          手把手教你用 Java 實(shí)現(xiàn)word、excel、ppt、txt等辦公文件在線預(yù)覽功能!

          共 5518字,需瀏覽 12分鐘

           ·

          2021-11-04 18:10

          點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)??



          如何用 Java 實(shí)現(xiàn)word、excel、ppt、txt等辦公文件在線預(yù)覽功能?本文告訴你答案!

          java 實(shí)現(xiàn)辦公文件在線預(yù)覽功能是一個(gè)大家在工作中也許會(huì)遇到的需求,網(wǎng)上些公司專門提供這樣的服務(wù),不過(guò)需要收費(fèi)。

          如果想要免費(fèi)的,可以用 openoffice,實(shí)現(xiàn)原理就是:
          通過(guò)第三方工具openoffice,將word、excel、ppt、txt等文件轉(zhuǎn)換為pdf文件流;當(dāng)然如果裝了Adobe Reader XI,那把pdf直接拖到瀏覽器頁(yè)面就可以直接打開預(yù)覽,前提就是瀏覽器支持pdf文件瀏覽。

          我這里介紹通過(guò)poi實(shí)現(xiàn)word、excel、ppt轉(zhuǎn)pdf流,這樣就可以在瀏覽器上實(shí)現(xiàn)預(yù)覽了。

          1. 到官網(wǎng)下載 Apache OpenOffice:?https://www.openoffice.org/download/?安裝包,安裝運(yùn)行。(不同系統(tǒng)的安裝方法,自行百度,這里不做過(guò)多說(shuō)明)

          1. 再項(xiàng)目的pom文件中引入依賴



          ????com.artofsolving
          ????jodconverter
          ????2.2.1

          1. 將word、excel、ppt轉(zhuǎn)換為pdf流的工具類代碼

          import?com.artofsolving.jodconverter.DefaultDocumentFormatRegistry;
          import?com.artofsolving.jodconverter.DocumentConverter;
          import?com.artofsolving.jodconverter.DocumentFormat;
          import?com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
          import?com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
          import?com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;

          import?java.io.*;
          import?java.net.HttpURLConnection;
          import?java.net.URL;
          import?java.net.URLConnection

          /** ?*?文件格式轉(zhuǎn)換工具類 ?*/
          public?class?FileConvertUtil?{
          ????/**?默認(rèn)轉(zhuǎn)換后文件后綴?*/
          ????private?static?final?String?DEFAULT_SUFFIX?=?"pdf";
          ????/**?openoffice_port?*/
          ????private?static?final?Integer?OPENOFFICE_PORT?=?8100;

          ????/** ?????*?方法描述?office文檔轉(zhuǎn)換為PDF(處理本地文件) ?????* ?????*?@param?sourcePath?源文件路徑 ?????*?@param?suffix?????源文件后綴 ?????*?@return?InputStream?轉(zhuǎn)換后文件輸入流 ?????*/
          ????public?static?InputStream?convertLocaleFile(String?sourcePath,?String?suffix)?throws?Exception?{
          ????????File?inputFile?=?new?File(sourcePath);
          ????????InputStream?inputStream?=?new?FileInputStream(inputFile);
          ????????return?covertCommonByStream(inputStream,?suffix);
          ????}

          ????/** ?????*?方法描述??office文檔轉(zhuǎn)換為PDF(處理網(wǎng)絡(luò)文件) ?????* ?????*?@param?netFileUrl?網(wǎng)絡(luò)文件路徑 ?????*?@param?suffix?????文件后綴 ?????*?@return?InputStream?轉(zhuǎn)換后文件輸入流 ?????*/
          ????public?static?InputStream?convertNetFile(String?netFileUrl,?String?suffix)?throws?Exception?{
          ????????//?創(chuàng)建URL
          ????????URL?url?=?new?URL(netFileUrl);
          ????????//?試圖連接并取得返回狀態(tài)碼
          ????????URLConnection?urlconn?=?url.openConnection();
          ????????urlconn.connect();
          ????????HttpURLConnection?httpconn?=?(HttpURLConnection)?urlconn;
          ????????int?httpResult?=?httpconn.getResponseCode();
          ????????if?(httpResult?==?HttpURLConnection.HTTP_OK)?{
          ????????????InputStream?inputStream?=?urlconn.getInputStream();
          ????????????return?covertCommonByStream(inputStream,?suffix);
          ????????}
          ????????return?null;
          ????}

          ????/** ?????*?方法描述??將文件以流的形式轉(zhuǎn)換 ?????* ?????*?@param?inputStream?源文件輸入流 ?????*?@param?suffix??????源文件后綴 ?????*?@return?InputStream?轉(zhuǎn)換后文件輸入流 ?????*/
          ????public?static?InputStream?covertCommonByStream(InputStream?inputStream,?String?suffix)?throws?Exception?{
          ????????ByteArrayOutputStream?out?=?new?ByteArrayOutputStream();
          ????????OpenOfficeConnection?connection?=?new?SocketOpenOfficeConnection(OPENOFFICE_PORT);
          ????????connection.connect();
          ????????DocumentConverter?converter?=?new?StreamOpenOfficeDocumentConverter(connection);
          ????????DefaultDocumentFormatRegistry?formatReg?=?new?DefaultDocumentFormatRegistry();
          ????????DocumentFormat?targetFormat?=?formatReg.getFormatByFileExtension(DEFAULT_SUFFIX);
          ????????DocumentFormat?sourceFormat?=?formatReg.getFormatByFileExtension(suffix);
          ????????converter.convert(inputStream,?sourceFormat,?out,?targetFormat);
          ????????connection.disconnect();
          ????????return?outputStreamConvertInputStream(out);
          ????}

          ????/** ?????*?方法描述?outputStream轉(zhuǎn)inputStream ?????*/
          ????public?static?ByteArrayInputStream?outputStreamConvertInputStream(final?OutputStream?out)?throws?Exception?{
          ????????ByteArrayOutputStream?baos=(ByteArrayOutputStream)?out;
          ????????return?new?ByteArrayInputStream(baos.toByteArray());
          ????}

          ????public?static?void?main(String[]?args)?throws?IOException?{
          ????????//convertNetFile("http://172.16.10.21/files/home/upload/department/base/201912090541573c6abdf2394d4ae3b7049dcee456d4f7.doc",?".pdf");
          ????????//convert("c:/Users/admin/Desktop/2.pdf",?"c:/Users/admin/Desktop/3.pdf");
          ????}
          }
          1. serve層在線預(yù)覽方法代碼

          /** ?*?@Description:系統(tǒng)文件在線預(yù)覽接口 ?*?@Author:?tarzan ?*/
          public?void?onlinePreview(String?url,?HttpServletResponse?response)?throws?Exception?{
          ????//獲取文件類型
          ????String[]?str?=?SmartStringUtil.split(url,"\\.");

          ????if(str.length==0){
          ????????throw?new?Exception("文件格式不正確");
          ????}
          ????String?suffix?=?str[str.length-1];
          ????if(!suffix.equals("txt")?&&?!suffix.equals("doc")?&&?!suffix.equals("docx")?&&?!suffix.equals("xls")
          ????????????&&?!suffix.equals("xlsx")?&&?!suffix.equals("ppt")?&&?!suffix.equals("pptx")){
          ????????throw?new?Exception("文件格式不支持預(yù)覽");
          ????}
          ????InputStream?in=FileConvertUtil.convertNetFile(url,suffix);
          ????OutputStream?outputStream?=?response.getOutputStream();
          ????//創(chuàng)建存放文件內(nèi)容的數(shù)組
          ????byte[]?buff?=new?byte[1024];
          ????//所讀取的內(nèi)容使用n來(lái)接收
          ????int?n;
          ????//當(dāng)沒(méi)有讀取完時(shí),繼續(xù)讀取,循環(huán)
          ????while((n=in.read(buff))!=-1){
          ????????//將字節(jié)數(shù)組的數(shù)據(jù)全部寫入到輸出流中
          ????????outputStream.write(buff,0,n);
          ????}
          ????//強(qiáng)制將緩存區(qū)的數(shù)據(jù)進(jìn)行輸出
          ????outputStream.flush();
          ????//關(guān)流
          ????outputStream.close();
          ????in.close();
          }
          1. controler層代碼

          @ApiOperation(value?=?"系統(tǒng)文件在線預(yù)覽接口")
          @PostMapping("/api/file/onlinePreview")
          public?void?onlinePreview(@RequestParam("url")?String?url,?HttpServletResponse?response)?throws?Exception{
          ????fileService.onlinePreview(url,response);
          }

          效果展示:

          在線預(yù)覽execl預(yù)覽word

          1.?使用 Spring Boot Operator 部署 Spring Boot 到 K8S

          2.?SQL去重的三種方法匯總

          3.?程序員的天花板

          4.?IDEA 這個(gè)小技巧太實(shí)用了。。

          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。

          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。

          文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。

          謝謝支持喲 (*^__^*)

          瀏覽 84
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本A片电影免费观看电影大全 | 国产精品你懂的 | 伊久大香蕉 | 俺来也俺去啦欧美www | 老妇裸体乱婬视频 |