java使用openoffice实现文件预览功能,含jodconverter.jar2.2.2版本jar包

一.安装openoffice(windows版本)

官网下载地址:链接: openOffice
直接点击
windows版本直接点击下载,等待3s自动下载,傻瓜式安装到指定目录即可
还是说下启动:
运行→cmd,输入:
cd C:\Program Files (x86)\OpenOffice 4\program
回车
再输入
soffice -headless -accept=“socket,host=127.0.0.1,port=8100;urp;” -nofirststartwizard
回车就可以了
在这里插入图片描述

接下来说下,linux版的,https://www.cnblogs.com/goodcheap/p/7929986.html,这个写的具体,可以参考一下

二.下载并导入jodconverter-2.2.2.jar包
百度网盘永久下载链接:
链接:https://pan.baidu.com/s/1d676kkjc8z_bgY8Oeed2Rw
提取码:2vsx
在这里插入图片描述
下载完成后放在项目的resources目录下,如图
引入pom文件:

       <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>juh</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>ridl</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.openoffice</groupId>
            <artifactId>unoil</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.1</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>com.artofsolving</groupId>
            <artifactId>jodconverter</artifactId>
            <version>2.2.2</version>
            <scope>system</scope> <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
            <systemPath>${basedir}/src/main/resources/lib/jodconverter-2.2.2.jar</systemPath> <!--项目根目录下的lib文件夹下-->
        </dependency>

三.代码部分
1.工具类

OpenOfficeUtil 工具类

package org.springblade.resource.util;

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.OpenOfficeDocumentConverter;

import java.io.*;
import java.net.ConnectException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by Administrator
 * on 2018/3/12
 */
public class OpenOfficeUtil {
    private static OpenOfficeUtil doc2HtmlUtil;

    /**
     * 获取Doc2HtmlUtil实例
     */
    public static synchronized OpenOfficeUtil getDoc2HtmlUtilInstance() {
        if (doc2HtmlUtil == null) {
            doc2HtmlUtil = new OpenOfficeUtil();
        }
        return doc2HtmlUtil;
    }

    /**
     * 转换文件成html
     *
     * @param fromFileInputStream:
     * @throws IOException
     */
    public String file2Html(InputStream fromFileInputStream, String toFilePath,String type,String host,int port) throws IOException {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String timesuffix = sdf.format(date);
        String docFileName = null;
        String htmFileName = null;
        if("doc".equals(type)){
            docFileName = "doc_" + timesuffix + ".doc";
            htmFileName = "doc_" + timesuffix + ".html";
        }else if("docx".equals(type)){
            docFileName = "docx_" + timesuffix + ".docx";
            htmFileName = "docx_" + timesuffix + ".html";
        }else if("xls".equals(type)){
            docFileName = "xls_" + timesuffix + ".xls";
            htmFileName = "xls_" + timesuffix + ".html";
        }else if("ppt".equals(type)){
            docFileName = "ppt_" + timesuffix + ".ppt";
            htmFileName = "ppt_" + timesuffix + ".html";
        }else{
            return null;
        }

        File htmlOutputFile = new File(toFilePath + File.separatorChar + htmFileName);
        File docInputFile = new File(toFilePath + File.separatorChar + docFileName);
        if (htmlOutputFile.exists())
            htmlOutputFile.delete();
        htmlOutputFile.createNewFile();
        if (docInputFile.exists())
            docInputFile.delete();
        docInputFile.createNewFile();
        /**
         * 由fromFileInputStream构建输入文件
         */
        try {
            OutputStream os = new FileOutputStream(docInputFile);
            int bytesRead = 0;
            byte[] buffer = new byte[1024 * 8];
            while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {
                os.write(buffer, 0, bytesRead);
            }

            os.close();
            fromFileInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        OpenOfficeConnection connection = new SocketOpenOfficeConnection(host,port);
        try {
            connection.connect();
        } catch (ConnectException e) {
            System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");
        }
        // convert
        DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
        converter.convert(docInputFile, htmlOutputFile);
        connection.disconnect();
        // 转换完之后删除word文件
        docInputFile.delete();
        return htmFileName;
    }

    /**
     * 转换文件成pdf
     *
     * @param fromFileInputStream:
     * @throws IOException
     */
    public String file2pdf(InputStream fromFileInputStream, String toFilePath,String type,String host,int port) throws IOException {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String timesuffix = sdf.format(date);
        String docFileName = null;
        String htmFileName = null;
        if("doc".equals(type)){
            docFileName = "doc_" + timesuffix + ".doc";
            htmFileName = "doc_" + timesuffix + ".pdf";
        }else if("docx".equals(type)){
            docFileName = "docx_" + timesuffix + ".docx";
            htmFileName = "docx_" + timesuffix + ".pdf";
        }else if("xls".equals(type)){
            docFileName = "xls_" + timesuffix + ".xls";
            htmFileName = "xls_" + timesuffix + ".pdf";
        }else if("ppt".equals(type)){
            docFileName = "ppt_" + timesuffix + ".ppt";
            htmFileName = "ppt_" + timesuffix + ".pdf";
        }else{
            return null;
        }

        File htmlOutputFile = new File(toFilePath + File.separatorChar + htmFileName);
        File docInputFile = new File(toFilePath + File.separatorChar + docFileName);
        if (htmlOutputFile.exists())
            htmlOutputFile.delete();
        htmlOutputFile.createNewFile();
        if (docInputFile.exists())
            docInputFile.delete();
        docInputFile.createNewFile();
        /**
         * 由fromFileInputStream构建输入文件
         */
        try {
            OutputStream os = new FileOutputStream(docInputFile);
            int bytesRead = 0;
            byte[] buffer = new byte[1024 * 8];
            while ((bytesRead = fromFileInputStream.read(buffer)) != -1) {
                os.write(buffer, 0, bytesRead);
            }

            os.close();
            fromFileInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        OpenOfficeConnection connection = new SocketOpenOfficeConnection(host,port);
        try {
            connection.connect();
        } catch (ConnectException e) {
            System.err.println("文件转换出错,请检查OpenOffice服务是否启动。");
        }
        // convert
        DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
        converter.convert(docInputFile, htmlOutputFile);
        connection.disconnect();
        // 转换完之后删除word文件
        docInputFile.delete();
        return htmFileName;
    }


    /**
     * 执行前,请启动openoffice服务
     * 进入$OO_HOME\program下
     * 执行soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"
     * @param xlsfile
     * @param targetfile
     * @throws Exception
     */
    public static void fileConvertPdf(String xlsfile, String targetfile,String type,String host,int port)
            throws Exception {
        File xlsf = new File(xlsfile);
        File targetF = new File(targetfile);
        // 获得文件格式
        DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();
        DocumentFormat pdfFormat = formatReg.getFormatByFileExtension("pdf");
        DocumentFormat docFormat = null;
        if("doc".equals(type) || "docx".equals(type)){
            docFormat = formatReg.getFormatByFileExtension("doc");
        }else if("xls".equals(type) || "xlsx".equals(type)){
            docFormat = formatReg.getFormatByFileExtension("xls");
        }else if("ppt".equals(type)){
            docFormat = formatReg.getFormatByFileExtension("ppt");
        }else{
            docFormat = formatReg.getFormatByFileExtension("doc");
        }
        // stream 流的形式
        InputStream inputStream = new FileInputStream(xlsf);
        OutputStream outputStream = new FileOutputStream(targetF);

        /**
         *
         */
        OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
        try {

            connection.connect();
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
            converter.convert(inputStream, docFormat, outputStream, pdfFormat);
        } catch (ConnectException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
                connection = null;
            }
        }
    }

    /**
     * 执行前,请启动openoffice服务
     * 进入$OO_HOME\program下
     * 执行soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;"  或 soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
     * @param inputStream
     * @param outputStream
     * @throws Exception
     */
    public static void fileConvertPdf(InputStream inputStream, OutputStream outputStream,String type,String host,int port)
            throws Exception {
        // 获得文件格式
        DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();
        DocumentFormat pdfFormat = formatReg.getFormatByFileExtension("pdf");
        DocumentFormat docFormat = null;
        if(".doc".equals(type) || ".docx".equals(type)){
            docFormat = formatReg.getFormatByFileExtension("doc");
        }else if(".xls".equals(type) || ".xlsx".equals(type)){
            docFormat = formatReg.getFormatByFileExtension("xls");
        }else if(".ppt".equals(type)){
            docFormat = formatReg.getFormatByFileExtension("ppt");
        }else if(".txt".equals(type)){
            docFormat = formatReg.getFormatByFileExtension("txt");
        }else if(".pdf".equals(type)){
            docFormat = formatReg.getFormatByFileExtension("pdf");
        }else{
            docFormat = formatReg.getFormatByFileExtension("doc");
        }
        // stream 流的形式
        OpenOfficeConnection connection = new SocketOpenOfficeConnection(host,port);
        try {

            connection.connect();
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
            converter.convert(inputStream, docFormat, outputStream, pdfFormat);
        } catch (ConnectException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                connection.disconnect();
                connection = null;
            }
        }
    }


    public static void main(String[] args) throws Exception {

        URL url=new URL("http://113.57.92.149:20834/oss/endpoint/downloadFile?fileId=1440516054841884673");//默认主页
        InputStream is=url.openStream();//获取网络流


        /*//获取网络资源,编码格式不同会出现乱码****************
        byte[] flush=new byte[1024];
        int len=0;
        while(-1!=(len=is.read(flush)))
        {

            System.out.println(new String(flush,0,len));
        }
        is.close();
        //获取网络资源,编码格式不同会出现乱码*****************/


        //解决乱码的方法,转换流
        BufferedReader br=new BufferedReader(new InputStreamReader(url.openStream(),"utf-8"));//解码方式,utf-8
        String msg=null;
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\list\\1.xls"),"utf-8"));
        while((msg=br.readLine())!=null)
        {
            bw.append(msg);
            bw.newLine();
        }
        bw.flush();
        bw.close();
        br.close();




        /*Doc2HtmlUtil coc2HtmlUtil = getDoc2HtmlUtilInstance();
        String a = "D:\\poi-test\\exportExcel.xls";
        String b = "D:\\poi-test\\exportExcel.pdf";
        InputStream inputStream = new FileInputStream(a);
        OutputStream outputStream = new FileOutputStream(b);
        coc2HtmlUtil.fileConvertPdf(inputStream,outputStream,"xls");*/


      /*  File file = null;
        FileInputStream fileInputStream = null;

        file = new File("D:\\poi-test\\exportExcel.xls");
        fileInputStream = new FileInputStream(file);
     // coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/xls","xls");
        coc2HtmlUtil.file2pdf(fileInputStream, "D:\\poi-test\\openOffice\\xls","xls");*/

/*        file = new File("D:/poi-test/test.doc");
        fileInputStream = new FileInputStream(file);
//      coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/doc","doc");
        coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/doc","doc");

        file = new File("D:/poi-test/周报模版.ppt");
        fileInputStream = new FileInputStream(file);
//      coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");
        coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/ppt","ppt");

        file = new File("D:/poi-test/test.docx");
        fileInputStream = new FileInputStream(file);
//      coc2HtmlUtil.file2Html(fileInputStream, "D:/poi-test/openOffice/docx","docx");
        coc2HtmlUtil.file2pdf(fileInputStream, "D:/poi-test/openOffice/docx","docx");*/

    }

}

FileUtil工具类

package org.springblade.resource.util;

import org.apache.commons.codec.digest.DigestUtils;
import org.springblade.common.utils.CopyInputStream;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class FileUtil {

    public static String getInputStreamMd5(InputStream inputStream) {
        String md5 = null;
        try {
            CopyInputStream copyInputStream=new CopyInputStream(inputStream);
            InputStream copyInput=copyInputStream.getCopy();
            md5 = DigestUtils.md5Hex(copyInput);
            return md5;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return md5;
    }



    /**
     * 通过图片url返回图片Bitmap
     * @param path
     * @return
     */
    public static InputStream returnBitMap(String path) {
        URL url = null;
        InputStream is = null;
        try {
            url = new URL(path);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        try {
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();//利用HttpURLConnection对象,我们可以从网络中获取网页数据.
            conn.setDoInput(true);
            conn.connect();
            is = conn.getInputStream();    //得到网络返回的输入流

        } catch (IOException e) {
            e.printStackTrace();
        }
        return is;
    }
//    public static void main(String[] args) {
//        String url = "http://192.168.1.14:28088/000000-bladex/upload/20210319/239cc466ed7f7bd1f893b6fde964a0bd.png";
//        String substring = url.substring(25);
//        System.out.println(substring);
//    }
}

2.controller层代码,根据文件地址转为文件流,将流文件转为pdf格式返回

    @RequestMapping("/seeFile")
    public void seeFile(Long fileId, HttpServletResponse response) {
        try {
            //根据文件id查询数据库文件的下载地址
            Attach attach = attachService.selectById(fileId);
            String fileUrl = "";
            if (attach != null) {
                fileUrl = baseUrl + attach.getLink();
            }else{
                log.info("根据文件id查询文件不存在!");
                return;
            }
            String extName = fileUrl.substring(fileUrl.lastIndexOf("."));
            InputStream inputStream = FileUtil.returnBitMap(fileUrl);
            OutputStream outputStream = response.getOutputStream();
            OpenOfficeUtil coc2HtmlUtil = OpenOfficeUtil.getDoc2HtmlUtilInstance();
          //  coc2HtmlUtil.fileConvertPdf(inputStream, outputStream, extName, "192.168.1.14", 28485); //openoffice的IP和端口
            coc2HtmlUtil.fileConvertPdf(inputStream, outputStream, extName, "127.0.0.1", 8100); //openoffice的IP和端口
        } catch (Exception e) {
            log.error("--------将文件转为pdf失败----",e);
        }
    }

调用接口,可以直接返回pdf格式文件,效果如下:
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值