Hello,各位道友。

目前常见的实现word转pdf的方式有两种,第一种是使用第三方插件安装调用;第二种是使用免费的jar包。但两种方式均有利有弊。安装第三方插件很明显需要安装插件,然后还要收费。第二种免费的jar包,一来比较难以寻找,二来免费的一般都是比较鸡肋,对机器环境、jdk都要求比较高。毕竟好多在线转换网站支持word转pdf的(https://app.xunjiepdf.com/word2pdf/)其转换效果都很粗糙,错行格式变异也是日常结果。那么对于要实现word转pdf的需求,那么如何采用最小的代价来实现word转PDF呢?

针对于常见的实现需求,在下亲测并总结下面两种方案,可供道友参考下:

  1. 利用libreOffice工具,实现。libreOffice我们很明显从名字上就能看出来是和微软office有一定的关系。没错。libreoffice是微软提供的一种转换工具,也是免费的一种实现。实现相对简单,但是需要额外进行对机器配置。和配置oraclehome、javahome一样,我们需要配置一个libreoffice的环境变量path:soffice。配置路径就是你安装的路径,到program即可。然后利用java程序调用dos命令即可,效率不错,转换也并未出现明显失真。
  2. 利用aspose-words的三方包。个人亲测,需要1.7或以上的jdk版本。然后其实此包是收费包,要想找免费的,还需要下功夫找,说不定可以找到免费的。商业用途一般要求所使用的包均需要版权。当然不在乎钱的另说。转换效果也未出现明显失真。

对于上述两种方案,给出测试demo如下:

  1. 对于linux和windos需要安装不同的libreoffice工具,然后配置对应的环境变量即可。此处不多说。
/*** 利用 libreOffice 进行word转PDF* @version 1.0, 2020-7-6* @since 1.0, 2020-7-6*/
public class ConvertPdf {// 工具private static final String LIBRE_COMMAND = "libreoffice";/*** 调用系统处理转换* @param filePathAll 全路径文件(包含文件)* @param filePathDir 所在文件夹* @return boolean*/public boolean doConvertPdf(String filePathAll, String filePathDir){long start = System.currentTimeMillis();String command;boolean flag = false;String osName = System.getProperty("os.name");// 依据当前环境选择合适的处理指令if (osName.contains("Windows")) {command = "soffice --headless --invisible --convert-to pdf:writer_pdf_Export " + filePathAll + " --outdir " + filePathDir;} else {command = LIBRE_COMMAND + " --headless --invisible --convert-to pdf:writer_pdf_Export " + filePathAll + " --outdir " + filePathDir;}// 指令进程处理请求flag = executeLibreOfficeCommand(command);long end = System.currentTimeMillis();//logger.info("转换PDF结束,共用时:"+(end-start));return flag;}/*** 调用工具进行文档转换,执行处理指令* @param command 指令* @return boolean*/public boolean executeLibreOfficeCommand(String command){        //logger.info("开始进行转换.......");Process process;// Process可以控制该子进程的执行或获取该子进程的信息try {// logger.info("convertOffice2PDF cmd : {}", command);process = Runtime.getRuntime().exec(command);// exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。// 下面两个可以获取输入输出流// InputStream errorStream = process.getErrorStream();// InputStream inputStream = process.getInputStream();} catch (IOException e) {// logger.error(" convertOffice2PDF {} error", command, e);return false;}int exitStatus = 0;try {// 等待子进程完成再往下执行,返回值是子线程执行完毕的返回值,返回0表示正常结束exitStatus = process.waitFor();// 第二种接受返回值的方法// int i = process.exitValue(); // 接收执行完毕的返回值// logger.info("i----" + i);} catch (InterruptedException e) {// logger.error("InterruptedException  convertOffice2PDF {}", command, e);return false;}if (exitStatus != 0) {// logger.error("convertOffice2PDF cmd exitStatus {}", exitStatus);} else {// logger.info("convertOffice2PDF cmd exitStatus {}", exitStatus);}// 销毁子进程process.destroy(); //logger.info("转化结束.......");return true;}/*** 也可以使用org.jodconverter内容进行调用,但终究都是使用libreOffice*/public static void doc2PDF(String inPath, String outPath){LocalOfficeManager officeManager = null;InputStream input = null;OutputStream output = null;officeManager = LocalOfficeManager.builder().officeHome("C:\\Program Files\\LibreOffice 5").portNumbers(8100).install().build();try {officeManager.start();} catch (OfficeException e) {e.printStackTrace();}try {input = new FileInputStream(inPath);output = new FileOutputStream(outPath);PageMarginsFilter pageMarginsFilter = new PageMarginsFilter(20,20,20,20);LocalConverter.builder().officeManager(officeManager).filterChain(pageMarginsFilter).build().convert(input).as(DefaultDocumentFormatRegistry.DOCX).to(output).as(DefaultDocumentFormatRegistry.PDF).execute();output.flush();} catch (Exception e) {e.printStackTrace();}finally {try {input.close();output.close();} catch (IOException e) {e.printStackTrace();}}}
}

2,使用aspose.jar包引入的方式

    /*** 方案二、将world转换成pdf 使用aspose.jar包引入的方式* @param inPath* @param outPath*/public static void doc2pdf(String inPath, String outPath) {FileOutputStream os =null;try {File file = new File(outPath); // 新建一个空白pdf文档os = new FileOutputStream(file);Document doc = new Document(inPath); // Address是将要被转化的word文档doc.save(os, SaveFormat.PDF);} catch (Exception e) {e.printStackTrace();}finally{if(os!=null){try {os.close();} catch (Exception e) {e.printStackTrace();}}}}

相关jar可以直接下载https://download.csdn.net/download/xue20181314/12584014,第二种方案aspose-words可以自己找,也可以下载我的链接:https://pan.baidu.com/s/1QFCE4d3WhmWpUjhSG2huQQ  提取码:0oqs

两种方案实现word转pdf相关推荐

  1. php 集成 pdf.js,JavaScript_js插件方式打开pdf文件(浏览器pdf插件分享),两种方案:一种直接链接,把p - phpStudy...

    js插件方式打开pdf文件(浏览器pdf插件分享) 两种方案:一种直接链接,把pdf文件当作img文件,类似这种形式,这样链接: 另一种:使用js插件哈. 其中实现阅读pdf文件的js插件很多,比如: ...

  2. 动态开辟二维数组的两种方案及位体

    动态开辟二维数组的两种方案及位体 一.在静态二维数组中查询数据 二.动态开辟二维数组空间 1.用二级指针的方式开辟 2.用结构体的方式开辟 三.位体 先来回顾一下动态开辟一位数组的方法: #inclu ...

  3. leetcode 349. 两个数组的交集 两种方案,c语言实现

    如题: 给定两个数组,编写一个函数来计算它们的交集.示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2]示例 2: 输入: nums1 = [4,9,5 ...

  4. Net Core下使用RabbitMQ比较完备两种方案(虽然代码有点惨淡,不过我会完善)

    一.前言     上篇说给大家来写C#和Java的方案,最近工作也比较忙,迟到了一些,我先给大家补上C#的方案. 二.使用的插件     HangFire 一个开源的.NET任务调度框架,最大特点在于 ...

  5. 解决IE6、IE7、IE8、Firefox兼容的两种方案

    转自:http://dyclh.iteye.com/blog/845349 浏览器不兼容,你知道源头吗? 凡事都要知其然,才能知其所以然,前端开发的朋友想毕都会碰到浏览器兼容的问题,今天在网上觅到此文 ...

  6. AI实现的两种方案,暴力推演与因果率

    AI实现的两种方案,暴力推演与因果率 学习PYTHON两个月,写个小游戏练手.也为以后找工作做储备. 从最简单的九格棋入手. 九格棋玩法简单,横向,纵向,斜向三子连线则为胜. 基本设计构件有: 一.G ...

  7. 解决Android Studio等开发软件出现更新TKK失败的两种方案

    解决Android Studio等开发软件出现更新TKK失败的两种方案 方案一 配置hosts 1. 配置域名与IP 2.扫描国内可用的IP 方案二 替换翻译引擎 百度翻译引擎 在Android St ...

  8. Google Earth Engine(GEE)——Landsat7条带去除两种方案

    本文将采用两种方案进行Landsat 7 影像修补. 方案1 使用线性回归进行内插处理,这里首先是将原始影像的值进行了擦除,然后再进行了填充根据两景影像的平均值和标准差,最后得出两者共有的一元线性回归 ...

  9. 文件夹选择对话框 JS实现的两种方案

    文件夹选择对话框 JS实现的两种方案 /**  * browseFolder.js  * 该文件定义了BrowseFolder()函数,它将提供一个文件夹选择对话框  * 以供用户实现对系统文件夹选择 ...

  10. 【Python】制作圆角图像的两种方案对比

    需求:现有200*200像素JPG图片,需制作成129*129像素的PNG圆角头像. 两种方案. 方案1:直接将JPG图片,利用灰度图mask,叠加得到圆角PNG. 优势:方便,不需动手P个透明模板底 ...

最新文章

  1. listen函数介绍
  2. elasticsearch高亮显示查询结果
  3. oracle 双结点监听文件,RAC监听服务两个节点 只能起一个
  4. ppt演讲计时器_用演示文稿演讲的10个技巧
  5. Jsp页面用javascript加 滑动验证条
  6. 简历javaweb项目描述怎么写_简历要怎么写
  7. debian 安装_如何在 Debian/Ubuntu 系统中检查程序包是否安装?
  8. linux平均负载什么意思_在Linux中什么是平均负载?
  9. python爬虫天气预报难不难_Python爬虫天气预报实例详解(小白入门)
  10. 怎么把mxf转换成mp4?
  11. 凡是过往,皆为序章。|2021年终总结
  12. python一阶差分_如何用Python对数据进行差分
  13. 带有Lowe’s算法的SURF特征提取和匹配
  14. SNIFFER问题集锦
  15. 1602液晶指定位置光标闪烁程序
  16. 游戏商店MySQL数据库设计
  17. 植物大战僵尸:代码实现无限阳光
  18. 微信 语音转文字 java,微信语音转文字怎么操作?手把手教你,一秒钟搞定!
  19. Unix File Permissions and ACLs in OS X
  20. 毕业季——在校生讲述

热门文章

  1. java 电子书下载
  2. windows配置java环境变量
  3. 抓取Amazon产品评论的神器
  4. node爬取cnode首页数据
  5. 单片机——软件部分开发过程介绍
  6. 天翼校园客户端linux,GitHub - YianAndCode/f-surfing: 佛大广东天翼校园客户端在 Linux 下的解决方案...
  7. 手把手教学电信天翼校园接入无线路由器(Windows Server版)
  8. android 空格的转义字符,Android 常用转义字符
  9. 计算机组成原理教案pdf,计算机组成原理教案模板.pdf
  10. 中信行业分类判断标准