文档章节

Java 使用jacob实现doc转pdf(附带其他方法分析)

乐在克里特
 乐在克里特
发布于 2017/02/23 09:50
字数 608
阅读 89
收藏 0

 关于doc转pdf的方法根据本人的查询主要有四种:

1.使用Jacob,但是使用jacob中要依赖Office,部分博文中还会依赖插件,如SaveAsPDFandXPS.exe。但是也发现不需要依赖Office,可以使用wps、pdfcreator,在使用wps的时候还不需要安装插件(注意:wps有linux版,office到现在为止还没有linux版)。

2.OpenOffice,可以结合Jodconverter开源框架和OpenOffice.org办公软件,具有跨平台的优点,转化速度快,但是部分office的格式似乎不支持。

3.Adobe Acrobat + jacob,这个用到什么虚拟打印机,和微软的一起使用效果比较好。(这个我不太懂)

4.Jcom + Adobe Acrobat ,会用到IDispatch。

 

方法3,4好像都依赖office。

我使用的是jacob,需要jacob.jar来调用activex控件,本机需安装WPS,当然使用pdfcreator的话,就要安装它了。 
还需要jacob.jar以及jacob.dll 请看附件 
jacob.dll 需要放置在系统system32下,如果系统是c盘:C://windows/system32/下面 

我是把jacob.dll放在类似这样的目录下,D:\JDK\jdk1.8.0_05\jre\bin。

public class Wps implements Converter {  //接口中只有一个方法,不过添加了同步
    	  
        public synchronized boolean convert(String word, String pdf) {  
        	boolean boo = wps2pdf(word, pdf);
            return boo;  
        }  
        
        public static boolean wps2pdf(String word,String pdf){  
        	File pdfFile = new File(pdf);  
            ActiveXComponent wps = null;  
            Dispatch doc = null;
            long start = System.currentTimeMillis();
            try {  
                wps = new ActiveXComponent("kwps.application");  
                wps.setProperty("visible", new Variant(false));  
                Dispatch docs = wps.getProperty("Documents").toDispatch();
                
//                doc = Dispatch.invoke(docs, "Open", Dispatch.Method, 
//                		new Object[]{word, new Variant(false),new Variant(true)},
//                		new int[1]).toDispatch();
                doc = Dispatch.call(docs, "Open", word, false, true).toDispatch();
                if(pdfFile.exists()){
                	pdfFile.delete();
                }
//                Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{pdf,new Variant(17)}, new int[1]);
                Dispatch.call(doc, "SaveAs", pdf, 17);
                long end = System.currentTimeMillis();
                System.out.println("耗时:" + (end-start) + "ms.");
            } catch (Exception ex) {  
                ex.printStackTrace();
                System.out.println("转化出错:" + ex.getMessage());
                return false;  
            } finally {  
            	Dispatch.call(doc, "Close", false);
            	System.out.println("关闭WPS");
                if (wps != null) {  
                    wps.invoke("Quit", new Variant[]{});
                }  
            }  
            return true;  
        } 
    public static void main(String[] args) {  
        new Wps().convert("E:/tmp/2016/testItext/typ_doc.doc", "E:/tmp/2016/testItext/typ_doc_wpsBycall.pdf");  
    } 
}

可以参考的资料:

jacob:用call方法,需装office

http://blog.sina.com.cn/s/blog_4cb1fb310101759c.html

用invoke方法,需装office,要安装插件

http://blog.csdn.net/niuhea/article/details/8611359

调用WPS或pdfcreator的com接口实现doc转pdf(相对比较好)

http://hacker507.iteye.com/blog/1458790

关于jacob介绍比较详细(包括类,方法)

http://www.cnblogs.com/vulcans/archive/2009/09/08/1562588.html

jacob中代码及说明:

http://coderbase64.iteye.com/blog/2077184?utm_source=tuicool&utm_medium=referral

 

jcom:

http://liangjian103.iteye.com/blog/697979

openoffice:

http://huangronaldo.iteye.com/blog/1628339

http://titanseason.iteye.com/blog/1471606

 

附件中包含jacob-1.18的jar、dll、api_docs

http://dl.iteye.com/topics/download/5a84f186-fd26-3751-9bb4-7566241acf94

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 16
博文 268
码字总数 394729
作品 0
杭州
程序员
私信 提问
doc文档转pdf文档和pdf文档、doc文档等转为swf文档开发解决方案

1 业务背景描述: 需求:网站需要用户可以在页面浏览课程讲义、bbs论坛的资料。讲义文件是pdf文件。bbs论坛资料一般是pdf文件或者doc文档等 2 实现思路: 将doc文档等转为pdf文档, 将pdf文档...

deepler
2014/01/15
0
2
Centos下安装类百度文库环境

使用php实现百度文库功能,网上搜索到的方案,实现doc转pdf,pdf转swf,然后显示出来。 这里简单的记录下,【doc转pdf,pdf转swf】两个功能的搭建流程。 doc转pdf 使用到下列程序(文件): Ap...

DragonFK
2013/02/20
0
1
仿百度文库word文档在线阅读

第一种实现方案:openoffice+swftools+flexpaper 用户上传一个文档,格式有可能是doc、docx、xls、ppt、pdf 等。其他用户在前台查看的却是一个swf格式的flash文档。 flash文档可以起到防止用...

JellyFlower
2014/01/18
0
1
JAVA强制删除文件

JAVA用jacob把word转pdf之后,确定这个pdf文件不再使用之后,如何进行强制删除。一般file.delete()的删除不了,因为显示的该文件还被JAVA进程占用,求大神指导如何强制删除...

逝风123
2013/10/25
2.7K
6
java word 03 表格插入行

如何使用apache poi(java)在读取word03(*.doc)之后,在表格插入1行或n行? 或者其他的类似的jar ,因为是维护的项目,不想在其他文件夹再去添加文件,因此感觉jacob不太合适.word07板已经实现,但是...

少司文
2017/07/18
100
0

没有更多内容

加载失败,请刷新页面

加载更多

2019-1-16

2019-1-16 星期三 晴转霾 早饭:小面包+鸡蛋糕;午饭:馍+地三鲜;晚饭:; 6:50起床,因为媳妇说可能今天晚上去大雁塔那边吃饭,早上起来后洗了个澡(主要因为头发很油了)。 今天早上天气...

莱菔籽
7分钟前
0
0
localDate、localDateTime、localTime的使用

从前端接受的时候,localDate类型的数据要转换,加 @DateTimeFormat(pattern = "yyyy-MM-dd")

shimmerkaiye
14分钟前
1
0
1.二叉树

概念 二叉树(binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的结构树。通常分支被称为“左子树”和“右子树”,左子树和右子树的位置不能随意颠倒。二叉树的第i层 ...

火拳-艾斯
17分钟前
2
0
java 线程

一、通过实现Runnable接口来创建线程 public class TestThread implements Runnable { public void run() { try { for (int i = 0; i < 10; i++) { ......

朝如青丝暮成雪
23分钟前
1
0
关于eclipse2017 import javax.servlet.jsp.tagext引入错误得问题

在eclipse中: 这个javax.servlet.jsp.tagext属于是tomcat相关jar包找到jsp-api.jar 在tomcat文件夹下边的lib文件夹中就有 如果项目中报错的话 把这个加入到项目中 在myeclipse中: 如下图,...

ZhangLG
37分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部