java 使用jacod实现word转pdf(IDEA Maven项目)
步骤:
一、 插件与jar包下载
SaveAsPDFandXPS 下载地址:
http://www.microsoft.com/zh-cn/download/details.aspx?id=7
(若访问不了,百度搜索SaveAsPDFandXPS)
jacob 包下载地址:
http://sourceforge.net/projects/jacob-project/
二、安装插件SaveAsPDFandXPS (本例好像不安装也可以)
如要安装,百度搜索SaveAsPDFandXPS,安装即可
三、jacod jar包和dll存放路径
.下载 jacob 解压后存放路径:
jacob.jar 放在 C:\Program Files\Java\jdk1.8.0_171\jre\lib\ext目录下
jacob.dll 放在 C:\Program Files\Java\jdk1.8.0_171\jre\bin 目录下
四、 项目里src/main/resource/lib 下放jar包
五、pom文件中添加依赖
<dependency>
<groupId>com.jacob</groupId>
<artifactId>jacob</artifactId>
<version>1.20</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/resources/lib/jacob.jar</systemPath>
</dependency>
六、实现类
import java.io.File;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
/**
* 效果最好的一种方法,但是需要 window 环境,而且速度是最慢的需要安装 msofficeWord 以及 SaveAsPDFandXPS.exe (
* word 的一个插件,用来把 word 转化为 pdf,可以不用安装,本次未安装测试通过 )
*
*
*
*/
public class WordToPdf {
private static final int wdFormatPDF = 17; // PDF 格式
public void wordToPDF(String sfileName, String toFileName) {
System.out.println("启动 Word...");
long start = System.currentTimeMillis();
ActiveXComponent app = null;
Dispatch doc = null;
try {
app = new ActiveXComponent("Word.Application");
app.setProperty("Visible", new Variant(false));
Dispatch docs = app.getProperty("Documents").toDispatch();
doc = Dispatch.call(docs, "Open", sfileName).toDispatch();
System.out.println("打开文档..." + sfileName);
System.out.println("转换文档到 PDF..." + toFileName);
File tofile = new File(toFileName);
if (tofile.exists()) {
tofile.delete();
}
Dispatch.call(doc, "SaveAs", toFileName, // FileName
wdFormatPDF);
long end = System.currentTimeMillis();
System.out.println("转换完成..用时:" + (end - start) + "ms.");
} catch (Exception e) {
System.out.println("========Error:文档转换失败:" + e.getMessage());
} finally {
Dispatch.call(doc, "Close", false);
System.out.println("关闭文档");
if (app != null)
app.invoke("Quit", new Variant[] {
});
}
// 如果没有这句话,winword.exe进程将不会关闭
ComThread.Release();
}
public static void main(String[] args) {
WordToPdf d = new WordToPdf();
d.wordToPDF("F:/Word转PDF/复杂的word.docx", "F:/Word转PDF/复杂的word.pdf");
}
}
七、结果
成功。。。
来源:oschina
链接:https://my.oschina.net/u/4353003/blog/4695744