调研

可供选择的方案并不多,解决思路可以分成两类。一类是直接使用工具将pdf转成word,另一类是先用工具将pdf中的内容提取出来,再使用其他工具将内容创建到新的word中。目前,着重尝试了第一类方案。
第一类方案中最流行的方法是使用pdfbox工具包,另一种方法是使用COM技术,利用java调用windows平台的COM组件完成转换。第一种方法完全使用java库,没有平台限制,第二种方法则依赖于windows平台,Adobe的Acrobat软件在pdf转word中功能良好,Jacob可以实现java代码和COM组件之间的互操作。
分别尝试了上述两种方法,发现第二种方法转换效果更好一些。

原pdf文件

使用PDFBOX的转换结果

Acrobat的转换结果

从图中可以看出使用pdfbox转换的结果原来的格式已经没有了,并且表格也没有解析出来。但是使用Acrobat转换的结果能较完整的保留原来的格式。下面的解决方案主要介绍使用Acrobat实现的方法。

代码

import java.io.File;import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;public class Pdf2Word {public static void main(String[] args) {File inPath = new File("./test.pdf");File outPath = new File("./test.docx");//pdfActiveX PDDoc对象 主要建立PDF对象ActiveXComponent app = new ActiveXComponent("AcroExch.PDDoc");//PDF控制对象Dispatch pdfObject = app.getObject();long start = System.currentTimeMillis();//打开PDF文件,建立PDF操作的开始Dispatch.call(pdfObject, "Open", new Variant(inPath.getAbsolutePath())); Variant jsObj = Dispatch.call(pdfObject, "GetJSObject");Dispatch.call(jsObj.getDispatch(), "SaveAs", outPath.getPath(), "com.adobe.acrobat.docx");app.invoke("Close");long end = System.currentTimeMillis();System.out.println((end-start)/1000);System.out.println("Wao-haha");}
}

代码比较简短,第14行中“AcroExch.PDDoc”是Acrobat安装后注册的COM组件;组件方法参考:https://help.adobe.com/en_US/acrobat/acrobat_dc_sdk/2015/HTMLHelp/#t=Acro12_MasterBook%2FIAC_API_OLE_Objects%2FOLE_Automation2.htm。

使用方法

环境配置

Jacob
从https://sourceforge.net网站查找并下载Jacob。下载的ZIP包的结构如图所示。 Jacob.jar引入到项目中;dll文件有两个根据自己电脑的平台选择合适的文件放在 %JAVA_HOME%\jre\bin 或 %JAVA_HOME%\bin 目录下。

Acrobat
下载后直接安装

首先要确保在windows平台上。调用时可以对代码进行再组织,封装成一个方法。需要注意的是转换过程比较耗时,如果转换一个大文件或者短时间内转换多个文件可以考虑多线程。

性能

电脑配置:Intel i5-7300HQ,8G内存,64位Win10系统
 转换一个3页的pdf论文,用时4s。
 转换一个554页的pdf格式的电子书,用时80s。

java实现pdf转word相关推荐

  1. Java为 pdf、word和excel添加水印

    1. 引入依赖 <!--easyexcel--><dependency><groupId>com.alibaba</groupId><artifa ...

  2. java实现pdf转为word

    Installing Spire.Pdf.jar 如果您创建了⼀个 Maven 项⽬,您可以使⽤以下配置轻松地在您的应⽤程序中导⼊ jar.对于⾮ Maven 项⽬,请从此下载 jar ⽂件并⼿动 将 ...

  3. java实现PDF转Word(无水印无页数限制)完全开放

    jar包破解 1.pom文件 分别复制进pom文件,记得配置maven的中央仓库在settings.xml中配置单独的仓库地址<repositories><repository> ...

  4. 使用java进行pdf转word实战

    package com.ljl; /*** @author * @Package_name PACKAGE_NAME* @Date 2019/4/1 0001 上午 8:30* @Descriptio ...

  5. Java:pdf转word

    转换思路 使用第三方库Spire的免费版本,转换页数要求11页 输入一个pdf时候,小于11页直接转换,大于11页就先切分成子pdf 对每一个小的pdf进行转换,最后再合并. 总体上就是一个大的pdf ...

  6. java 实现pdf 转word去除水印和去除页数限制

    背景 每次下载的pdf文档想转成word文档,都从网上找各种找网址,网上的网址要么存在必须要充值,要么转化效果不好等等问题.作为一个技术人员,所以想能否实现pdf转化为word文档 代码实现 1.1 ...

  7. java实现PDF 转WORD

    CSDN话题挑战赛第2期 参赛话题:Java技术分享 引言 由于市场上目前的各种格式文件的转换基本上都需要会员,怎么办呢? 不走寻常路,我们是程序员 我们当然要不走寻常路了,我们要动用一些特殊手段,展 ...

  8. java实现pdf转word,解决个别排版错乱问题

    项目中要实现客户上传完pdf,上传成功后直接就转成word格式的,之前网上一些免费的转出来的word大致还行,但是有些排版就错乱了,如下图: 下面这个是用java改造后的,效果如下,排版整齐,和pdf ...

  9. Java 将PDF转为Word

    众所周知,PDF文档除了具有较强稳定性和兼容性外, 还具有较强的安全性,在工作中可以有效避免别人无意中对文档内容进行修改.但与此同时,也妨碍了对文档的正常修改.这时我们可以将PDF转为Word文档进行 ...

  10. java实现 pdf转word

    这里使用Apache PDFBox是Java开源PDF文档第三方库工具集,主要特征提取提取pdf提取文本.分隔合并.填写表单.保存为图片.PDF数字签名及创建PDF文件. 添加maven依赖 < ...

最新文章

  1. webpack 安装卸载
  2. python有哪些方向、应该怎么学-终于找到深圳学Python,有几个方向?怎么从一个方向学到底...
  3. java在面板中点击按钮后弹出对话框
  4. linux系统安装宝塔面板
  5. python如何输出两列数据_Python-如何将一列分为两列?
  6. 提高Java开发效率,Idea必装的几款插件
  7. 微信支付将推双面屏;库克谈收购英特尔基带业务;Chrome 76 稳定版发布 | 极客头条...
  8. 播放音乐的html语言,Html5音频和视频播放示例详解
  9. Glib2中G_DEFINE_TYPE原理(四)
  10. linux设备驱动(一)
  11. rectangle()函数与rect类详解
  12. NRF 52832 ble_app_blinky 官方示例 part1
  13. Unity中颜色空间(Color)HSV,HSB,HSL
  14. c语言sql数据库大作业,c语言连接sql数据库.docx
  15. VCC、 VDD、VSS、VEE 电压符号的解释
  16. 备赛脱脂经验分享_敲黑板,备赛这几招如果你还不知道,赶快学起来吧!
  17. MySQL原理与学习
  18. DDOS防御----CENTOS 内核TCP参数优化
  19. 从事Web前端相关的工作应该掌握哪些职业技能?
  20. 匹配标签的正则(用于抽取纯文本)

热门文章

  1. 最新dex2jar下载,网上很多dex2jar是2015年的,有bug无法翻译部分代码,最新更新的dex2jar下载
  2. html自动随机跳转网址,网页随机跳转代码
  3. win10照片查看器不能点下一张的方法
  4. [ssd]linux系统sh后,找不到文件夹的解决
  5. MySQL建表语句综合
  6. 新手入门makefile教程
  7. DDR等布线/走线需要等长的原因
  8. 计算机手动双面打印,记得要收藏 如何手动完成双面打印文档
  9. 成都KTV点歌类小程序开发公司,微信小程序开发
  10. chrome-推荐13个插件