• 利用LibreOffice进行WORD转PDF


    常用解决方案:

    • 收费,不介绍。
    • 免费,利用OpenOffice或者LibreOffice等进行转化,但是转化效率稍微慢点,但是word格式保持不错。
    • POI+itext,网上也有不少,但是没有真正研究。

    思路:
    安装libreoffice,然后直接利用命令行进行java调用。下述,仅限于使用windows,其他系统需修改命令。

    代码实现:

    package demo;
    
    import com.sun.star.lang.NullPointerException;
    
    /**
     * @author Kevin 2018-5-3
     *
     */
    public final class LibreOfficeUtils {
    
        public static void main(String[] args) throws NullPointerException {
            long start = System.currentTimeMillis();
            convertOffice2PDF("d:/test/converting2.doc","d:/test");
            long end = System.currentTimeMillis();
            System.out.println((end-start) +"ms");
        }
    
        /**
         * 
         * soffice --headless --invisible --convert-to pdf:writer_pdf_Export D:/test/fb35e7d25afaf1b5d34f7bdb4f830c8c.doc --outdir D:/testfile2html
         * 
         * @param srcPath
         * @param desPath
         * @return
         * @throws NullPointerException 
         */
        public static boolean convertOffice2PDF(String srcPath, String desPath) throws NullPointerException{
    
            System.out.println("开始进行转化.....");
            if(srcPath == null || desPath == null){
                throw new NullPointerException("转化文件不存在或者路径有问题");
            }
            String command = "";
            String osName = System.getProperty("os.name");
            if (osName.contains("Windows")) {
                command = "cmd /c soffice --headless --invisible --convert-to pdf:writer_pdf_Export " + srcPath + " --outdir " + desPath;
            }
            System.err.println(command + " : 转化中....");
    
            try {
                Process p = Runtime.getRuntime().exec(command);
                p.waitFor();
                return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            } finally {
                System.out.println("转化结束...");
            }
        }
    
    }

    遇到的问题:
    1.
    这里写图片描述
    windows下执行需要 命令前加cmd /c ,就解决了,与系统相关的调用方式。

    2.待转化文件名最好不要保留空格可能转化不成功!

  • 相关阅读:
    ZooKeeper入门(二)Java API开发实战
    mysql 通过存储过程添加分表和分表的字段
    Mysql 事务隔离级别以及相关概念
    一个替代npm和cnpm的方案:pnpm
    【速学】TypeScript学习记录
    true和false,truthy和Falsy
    resolve的意思是解析、解决、决定,assign是指派、赋值的意思
    更换node版本一定要记得删掉nodemodules
    【换平台】从admin来看React转Vue
    【typescript】写给JS老鸟的TS速成教程
  • 原文地址:https://www.cnblogs.com/Kevin-1992/p/12608356.html
Copyright © 2020-2023  润新知