转载地址:https://blog.csdn.net/csdnFlyFun/article/details/79523262

----------------------------------------------------第一种方法 ------------------------------------------------

JobConverter + OpenOffice     ( Windows系统下 )

JobConverter的jar包下载地址 :  点我去下载

OpenOffice的下载地址 : 点我去下载

OpenOffice 的安装路径自己定义。 代码中要使用对应路径调用启动服务  (此处友情提示)

import java.io.File;
import java.io.IOException;import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;    // 将word格式的文件转换为pdf格式public static void WordToPDF(String startFile, String overFile) throws IOException {// 源文件目录File inputFile = new File(startFile);if (!inputFile.exists()) {System.out.println("源文件不存在!");return;}// 输出文件目录File outputFile = new File(overFile);if (!outputFile.getParentFile().exists()) {outputFile.getParentFile().exists();}// 调用openoffice服务线程/** 我把openOffice下载到了 C:/Program Files (x86)/下  ,下面的写法自己修改编辑就可以**/String command = "C:/Program Files (x86)/OpenOffice 4/program/soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";Process p = Runtime.getRuntime().exec(command);// 连接openoffice服务OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);connection.connect();// 转换DocumentConverter converter = new OpenOfficeDocumentConverter(connection);converter.convert(inputFile, outputFile);// 关闭连接connection.disconnect();// 关闭进程p.destroy();}public static void main(String[] args) {String start = "F:\\新建文件夹\\我是word测试文件.docx";String over = "F:\\新建文件夹\\成了.pdf";try {WordToPDF(start, over);} catch (IOException e) {e.printStackTrace();}}

----------------------------------------------------第二种方法 ------------------------------------------------

SaveAsPDFandXPS + jacob (Windows操作系统下,电脑里有office)

SaveAsPDFandXPS 下载地址  :  点我去下载

jacob 的jar包 下载地址 : 点我去下载

先安装SaveAsPDFandXPS ,安装成功后 , 打开jacob的jar包  ,里面的结构应该是这样的

把jacob.jar 放到项目下  ,  然后 这里注意 把  两个后缀为dll的文件 放到 jre目录bin的里面   必须放进去  不然会报错(java.lang.NoClassDefFoundError) ,

实在不懂看此图   如果是默认安装 大概就是这个文件里面。

注意还需要放到C:\Windows\System32目录下

import java.io.File;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;private static final int wdFormatPDF = 17;// PDF 格式    public static void wordToPDF(){    ActiveXComponent app = null;  Dispatch doc = null;  try {      app = new ActiveXComponent("Word.Application");      app.setProperty("Visible", new Variant(false));  Dispatch docs = app.getProperty("Documents").toDispatch();    //转换前的文件路径String startFile = "F:\\新建文件夹\\我是word版本" + ".doc";//转换后的文件路劲String overFile =  "F:\\新建文件夹\\我是转换后的pdf文件"  + ".pdf";doc = Dispatch.call(docs,  "Open" , startFile).toDispatch();  File tofile = new File(overFile);      if (tofile.exists()) {      tofile.delete();      }      Dispatch.call(doc,"SaveAs", overFile, wdFormatPDF);      } catch (Exception e) {      System.out.println(e.getMessage());      } finally {  Dispatch.call(doc,"Close",false);  if (app != null)      app.invoke("Quit", new Variant[] {});      }  //结束后关闭进程   ComThread.Release();}public static void main(String[] args) {wordToPDF();}

-----------------------------------------------第三种方法----------------------------------------------

这种方法纯属是搜刮出来的,因为测试好用。所以也弄了上来。这个里面依赖的jar包挺麻烦的。但是只要导入jar包就可以获得立竿见影的效果,缺点可能就速度上比较上面两种能慢一些,还有就是支持的是docx的文档格式 。

我把所有jar包一点一点的搜集起来整合了一下。(jar包的版本也会造成问题。所以我整合了一版)

大家可以去这里下载→  整合版jar包下载地址

这个代码相比较上面两种就比较容易了。导入jar包就能用。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;  import org.apache.commons.collections.MapUtils;
import org.apache.poi.xwpf.converter.core.utils.StringUtils;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;  public class WordToPDF {  /** * 将word文档, 转换成pdf, 中间替换掉变量 * @param source 源为word文档, 必须为docx文档 * @param target 目标输出 * @param params 需要替换的变量 * @throws Exception */  public static void wordConverterToPdf(InputStream source,  OutputStream target, Map<String, String> params) throws Exception {  wordConverterToPdf(source, target, null, params);      }  /** * 将word文档, 转换成pdf, 中间替换掉变量 * @param source 源为word文档, 必须为docx文档 * @param target 目标输出 * @param params 需要替换的变量 * @param options PdfOptions.create().fontEncoding( "windows-1250" ) 或者其他 * @throws Exception */  public static void wordConverterToPdf(InputStream source, OutputStream target,   PdfOptions options,  Map<String, String> params) throws Exception {  XWPFDocument doc = new XWPFDocument(source);  paragraphReplace(doc.getParagraphs(), params);  for (XWPFTable table : doc.getTables()) {  for (XWPFTableRow row : table.getRows()) {  for (XWPFTableCell cell : row.getTableCells()) {  paragraphReplace(cell.getParagraphs(), params);  }  }  }  PdfConverter.getInstance().convert(doc, target, options);  }  /** 替换段落中内容 */  private static void paragraphReplace(List<XWPFParagraph> paragraphs, Map<String, String> params) {  if (MapUtils.isNotEmpty(params)) {  for (XWPFParagraph p : paragraphs){  for (XWPFRun r : p.getRuns()){  String content = r.getText(r.getTextPosition());  if(StringUtils.isNotEmpty(content) && params.containsKey(content)) {  r.setText(params.get(content), 0);  }  }  }  }  }  public static void main(String[] args) {String filepath = "F:\\新建文件夹\\我是word.docx";  String outpath = "F:\\新建文件夹\\我是结果.pdf";   InputStream source;OutputStream target;try {source = new FileInputStream(filepath);  target = new FileOutputStream(outpath);Map<String, String> params = new HashMap<String, String>();  PdfOptions options = PdfOptions.create();  wordConverterToPdf(source, target, options, params);  } catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}  }
}

第一种效果不错,windows . linux 都可以配置。 linux有兴趣可以自己查阅 。

第二种最好,几乎不管水印还是格式都完美的转换。 但是只能支持windows 。

第三种最方便, 效果和第一种差不多,但是速度稍微慢了一些。

java代码word转pdf相关推荐

  1. Aspose.Java实现word转pdf,添加水印等操作

    Aspose.Java实现word转pdf,添加水印等操作 一. word转pdf 二. 文档插入水印 Aspose是一款商用版控件,支持各类文档操作,这里主要介绍如何在Springboot项目中使用 ...

  2. txt doc rtf html,JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例.docx

    JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例 JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例??2012-06-2 ...

  3. java 模板 word转pdf 可分页 带图片

    java 模板 word转pdf 可分页 带图片 之前写过一个简单的案例,但是在项目中完全不能满足客户的需求,所以重新用啦一种方式来写,采用了word转换pdf的方式,这种经过不断研究,满足了可分页, ...

  4. Java实现Word转PDF方案选择

    Java实现Word转PDF方案选择 很多应用场景中都会涉及到Word转PDF,但Word转PDF的方案在网上一搜一大把,让人眼花缭乱,笔者踩过无数的坑后,最终总结出以下三种方案 OpenOffice ...

  5. java实现word转pdf在线预览格式

    java实现word转pdf在线预览格式 前段时间的项目里涉及了此功能,调研过一些方案,踩过一些坑,一一总结在此. java转pdf的方案很多,但是很多都要收费,转pdf也有一些格式方面的问题. 方案 ...

  6. Linux系统下Java 转换Word到PDF时,结果文档内容乱码的解决方法

    本文分享在Linux系统下,通过Java 程序代码将Word转为PDF文档时,结果文档内容出现乱码该如何解决.具体可参考如下内容: 1.问题出现的背景 在Windows系统中,使用Spire.Doc ...

  7. java实现word、pdf文件下载功能

    在SpringMVC的开发过程中,有时需要实现文档的下载功能.文档的下载功能涉及到了java IO流操作的基础知识,下面本文详细介绍java如何实现后台文档下载功能. 首先根据文档在项目中的存储路径建 ...

  8. Java操作Word转PDF(Word转图片)

    1. spire.doc的jar引用 首先我们需要用到国产word处理工具jar包spire.doc,可以通过maven仓库寻找,然后在pom文件中直接引用. 此处需要注意,我们需要使用的是spire ...

  9. [JAVA使用技巧]Java抽取Word和PDF格式文件_网络大本营

    Java抽取Word和PDF格式文件的四种武器(1) 很多人用java进行文档操作时经常会遇到一个问题,就是如何获得word,excel,pdf等文档的内容?我研究了一下,在这里总结一下抽取word, ...

最新文章

  1. 某阿里程序员爆料自己的p9领导:每天炒股喝茶开会!羡慕嫉妒恨!以后要当领导!网友:不在其位,不知其累!...
  2. mysql 5000万条数据库_1亿条数据如何分表100张到Mysql数据库中(PHP)
  3. [Ms SQL] 基本創建、修改與刪除
  4. Python 技术篇-用win32库实现读取、添加、修改注册表的值实例演示
  5. 设计模式(十)------23种设计模式(3):抽象工厂模式
  6. [BZOJ 1046] [HAOI2007] 上升序列 【DP】
  7. [Java基础]哈希值
  8. mysql用户 11_MySQL-快速入门(11)用户管理
  9. 容器编排技术 -- Kubernetes入门概述
  10. Hibernate框架整合
  11. html自动滚屏效果,jQuery实现公告新闻自动滚屏效果实例代码
  12. python滑动手机屏幕_appium+python自动化24-滑动方法封装(swipe)
  13. 【整理】牛客网编程题-前端篇(入门难度)
  14. jsarraybufferdaya释放_聊聊JS的二进制家族:Blob、ArrayBuffer和Buffer
  15. TCP/IP报文头部整理
  16. ubuntu安装lxde_如何在Ubuntu上安装轻量级LXDE桌面
  17. linux之ps aux、ps -aux、ps -ef命令的区别
  18. Hazel引擎学习(十一)
  19. R语言LR逻辑回归实例
  20. matlab绘制动态图,Matlab绘制动态图的两种方式(参考)

热门文章

  1. kafka HW机制的作用
  2. 游走仙境稻城亚丁,稻城亚丁新攻略
  3. 数字格式化、大数据BigDecimal、随机数生成方法random()
  4. 美国国土安全部2.5万雇员隐私信息遭黑客窃取
  5. 青少年软件编程(202209)(C语言)(数据结构)等级考试(六级)试题及参考答案
  6. 解决Win系统cad激活安装失败问题,AutoCad 2022 中文/英文正式详细安装教程
  7. 杰理之使用MIC隔电容方案,微信语音前几秒也出现“哒哒”【篇】
  8. 神舟zx8sp7s2装linux,战神ZX8-SP7S2游戏本搭GTX1070+桌面i7芯
  9. 计算机基础作业1,学习平台-北京大学16春计算机基础与应用作业1答案-成人高等教育_成人本科教育报名_远程网络教育学院-江苏学历网报名服务中心...
  10. 标准IP数据包是否保证数据部分的正确性?