java 文档在线预览 Linux版本(openoffice)

1.下载openoffice

openoffice的下载地址:http://www.openoffice.org/

2.安装(记住自己的安装路径,待会要用到)
java 文档在线预览 Linux版本(openoffice)_第1张图片
3. pom.xml

<dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>19.0</version>
</dependency>


<dependency>
      <groupId>com.github.livesense</groupId>
      <artifactId>jodconverter-core</artifactId>
      <version>1.0.5</version>
</dependency>

4.文档转pdf业务层

// 文件上传根目录
    @Value("${UPLOAD_URL}")
    private String UPLOAD_URL;

    @Value("${DOCUMENT_URL}")
    private String DOCUMENT_URL;

    /**
     * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件
* * @param inputFilePath 源文件路径,如:"e:/test.docx" * @param outputFilePath 目标文件路径,如:"e:/test_docx.pdf" * @return */
@Override public Map openOfficeToPDF(String inputFilePath, String outputFilePath) { return office2pdf(inputFilePath, outputFilePath); } /** * 根据操作系统的名称,获取OpenOffice 的安装目录
* 如我的OpenOffice 安装在:C:/Program Files (x86)/OpenOffice 4 * * @return OpenOffice 的安装目录 */
private String getOfficeHome() { String osName = System.getProperty("os.name"); if (Pattern.matches("Linux.*", osName)) { return "/opt/openoffice.org3"; } else if (Pattern.matches("Windows.*", osName)) { return "C:/Program Files (x86)/OpenOffice 4"; } else if (Pattern.matches("Mac.*", osName)) { return "/Application/OpenOffice.org.app/Contents"; } return null; } /** * 连接OpenOffice 并且启动OpenOffice * * @return */ private OfficeManager getOfficeManager() { DefaultOfficeManagerConfiguration config = new DefaultOfficeManagerConfiguration(); // 获取OpenOffice 安装目录 String officeHome = getOfficeHome(); config.setOfficeHome(officeHome); // 启动OpenOffice的服务 OfficeManager officeManager = config.buildOfficeManager(); officeManager.start(); return officeManager; } /** * 转换文件 * * @param inputFile * @param outputFilePath_end * @param inputFilePath * @param outputFilePath * @param converter */ private void converterFile(File inputFile, String outputFilePath_end, String inputFilePath, String outputFilePath, OfficeDocumentConverter converter) { File outputFile = new File(outputFilePath_end); // 假如目标路径不存在,则新建该路径 if (!outputFile.getParentFile().exists()) { outputFile.getParentFile().mkdirs(); } converter.convert(inputFile, outputFile); System.out.println("文件:" + inputFilePath + "\n转换为\n目标文件:" + outputFile + "\n成功!"); } /** * 使Office2003-2007全部格式的文档(.doc|.docx|.xls|.xlsx|.ppt|.pptx) 转化为pdf文件
* * @param inputFilePath 源文件路径 * @param outputFilePath 目标文件路径 * @return */
private Map office2pdf(String inputFilePath, String outputFilePath) { Map<String, String> tResultMap = new HashMap<>(); tResultMap.put("status", "fail"); boolean flag = false; OfficeManager officeManager = getOfficeManager(); // 连接OpenOffice OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager); long begin_time = new Date().getTime(); outputFilePath = DOCUMENT_URL + inputFilePath; //这两行代码不可以调换,你可以试试调换之后会出现什么错误 inputFilePath = UPLOAD_URL + inputFilePath; //你也可以不建,他会自己建 String outputFilePath_end = ""; File tFile = new File(inputFilePath); File oFile = new File(outputFilePath); if (!tFile.exists() || tFile.isDirectory()) { tResultMap.put("msg", "该文件或文件夹不存在"); return tResultMap; } if (!oFile.getParentFile().exists()) { oFile.getParentFile().mkdirs();// 新建文件夹 } //file.transferTo(dest);// 文件写入 if (null != inputFilePath) { File inputFile = new File(inputFilePath); // 判断目标文件路径是否为空 if (null == outputFilePath) { // 转换后的文件路径 outputFilePath_end = getOutputFilePath(inputFilePath); if (inputFile.exists()) {// 找不到源文件, 则返回 converterFile(inputFile, outputFilePath_end, inputFilePath, outputFilePath, converter); flag = true; } } else { outputFilePath_end = getOutputFilePath(outputFilePath); if (inputFile.exists()) {// 找不到源文件, 则返回 converterFile(inputFile, outputFilePath_end, inputFilePath, outputFilePath, converter); flag = true; } } officeManager.stop(); } else { System.out.println("con't find the resource"); } long end_time = new Date().getTime(); System.out.println("文件转换耗时:[" + (end_time - begin_time) + "]ms"); tResultMap.put("result", outputFilePath_end); tResultMap.put("status", "success"); return tResultMap; } /** * 获取输出文件 * * @param inputFilePath * @return */ private String getOutputFilePath(String inputFilePath) { String outputFilePath = inputFilePath.replaceAll("." + getPostfix(inputFilePath), ".pdf"); return outputFilePath; } /** * 获取inputFilePath的后缀名,如:"e:/test.pptx"的后缀名为:"pptx"
* * @param inputFilePath * @return */
private String getPostfix(String inputFilePath) { return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1); }

5.预览pdf业务层

    public Map<String, String> readPdf(String filePath,HttpServletRequest request, HttpServletResponse response) throws IOException {
        Map<String, String> tResultMap = new HashMap<>();
        tResultMap.put("status", "fail");
        //String filePath = request.getParameter("filePath");
        File filePic = new File(filePath);
        if(filePath == null){
            tResultMap.put("status", "路径为空");
            return tResultMap;
        }
        if (filePic.exists()) {
            FileInputStream is = new FileInputStream(filePic);
            int i = is.available(); // 得到文件大小
            byte data[] = new byte[i];
            is.read(data); // 读数据
            is.close();
            response.setContentType("application/pdf;charset=utf-8"); // 设置返回的文件类型
            OutputStream toClient = response.getOutputStream(); // 得到向客户端输出二进制数据的对象
            toClient.write(data); // 输出数据
            toClient.close();
        }
        return tResultMap;
    }

你可能感兴趣的:(java后端)