<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ù)覽功能!

          共 9621字,需瀏覽 20分鐘

           ·

          2021-11-30 19:40

          ????關(guān)注后回復(fù) “進(jìn)群” ,拉你進(jìn)程序員交流群????

          來(lái)源丨Java


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

          java 實(shí)現(xiàn)辦公文件在線預(yù)覽功能是一個(gè)大家在工作中也許會(huì)遇到的需求,網(wǎng)上些公司專(zhuān)門(mén)提供這樣的服務(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è)面就可以直接打開(kāi)預(yù)覽,前提就是瀏覽器支持pdf文件瀏覽。

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

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

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

          <!--openoffice-->
          <dependency>
              <groupId>com.artofsolving</groupId>
              <artifactId>jodconverter</artifactId>
              <version>2.2.1</version>
          </dependency>



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


          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)換工具類(lèi)  */
          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");
              }
          }


          serve層在線預(yù)覽方法代碼


          /**  
          @Description:系統(tǒng)文件在線預(yù)覽接口  
          @Author: tarzan  
          */
          public void onlinePreview(String url, HttpServletResponse response) throws Exception {
              //獲取文件類(lèi)型
              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ù)全部寫(xiě)入到輸出流中
                  outputStream.write(buff,0,n);
              }
              //強(qiáng)制將緩存區(qū)的數(shù)據(jù)進(jìn)行輸出
              outputStream.flush();
              //關(guān)流
              outputStream.close();
              in.close();
          }


          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

          -End-

          最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來(lái),可以說(shuō)是程序員面試必備!所有資料都整理到網(wǎng)盤(pán)了,歡迎下載!

          點(diǎn)擊??卡片,關(guān)注后回復(fù)【面試題】即可獲取

          在看點(diǎn)這里好文分享給更多人↓↓

          瀏覽 28
          點(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| 日美女逼一级片 | 婷婷精品国产亚洲AV老牛 | 亚洲色播爱爱爱 | 久久视频免费在线观看 |