admin管理员组

文章数量:1605166

本方法则依赖于windows平台,Adobe的Acrobat软件在pdf转word中功能良好,Jacob可以实现java代码和COM组件之间的互操作。

经过本人实践后,发现此方法效果比较能接受。

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

import com.jacob.activeX.ActiveXComponent;
import com.jacob.Dispatch;
import com.jacob.Variant;

public class Pdf2Word {
    public static void test(String inPath,String outPath) {
        //pdfActiveX PDDoc对象 主要建立PDF对象
        ActiveXComponent app = new ActiveXComponent("AcroExch.PDDoc");
        //PDF控制对象
        Dispatch pdfObject = app.getObject();
        //下面两句是设置字体,有需要的小伙伴可以打开注释,注意源码里没有这两句,可自行加上
        //Dispatch font = Dispatch.get(pdfObject, "Font" ).toDispatch();
        //Dispatch.put(font, "song_ti", new Variant("宋体"));//设置字体,只能设置系统中存在的字体
        long start = System.currentTimeMillis();
        //打开PDF文件,建立PDF操作的开始
        Dispatch.call(pdfObject, "Open", new Variant(inPath));
        Variant jsObj = Dispatch.call(pdfObject, "GetJSObject");
        Dispatch.call(jsObj.getDispatch(), "SaveAs", outPath, "com.adobe.acrobat.docx");
        app.invoke("Close");
        long end = System.currentTimeMillis();
        System.out.println("耗时:"+(end-start)/1000+"秒");
        System.out.println("转换成功");
    }
}

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

使用方法
环境配置
Jacob
从网站查找并下载Jacob。 Jacob.jar引入到项目中;dll文件有两个根据自己电脑的平台选择合适的文件放在 %JAVA_HOME%\jre\bin 或 %JAVA_HOME%\bin 目录下。如果发现识别不到dll文件,可以重启系统或者把dll放到windows相应的dll文件夹下,如:C:\Windows\System32

Acrobat
下载后直接安装,文章结尾有整理好的下载链接,创作不易,收点小小费用,介意的请绕行。

资源里是adobe acrobat pro dc 2022中文安装程序及其破解补丁,

由于资源大小限制,acrobat安装文件及破解文件放网盘里了。

下载后有任何问题,可留言,本人不定时查看一一回复。

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

资源链接

本文标签: acrobatJavawordPDF