文档章节

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

乐在克里特
 乐在克里特
发布于 2017/02/23 09:50
字数 608
阅读 82
收藏 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

© 著作权归作者所有

共有 人打赏支持
乐在克里特
粉丝 15
博文 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
仿百度文库解决方案(二)——利用Jacob调用MS Office转换文档为PDF

目录 仿百度文库解决方案(一)——总体思路 仿百度文库解决方案(二)——利用Jacob调用MS Office转换文档为PDF 仿百度文库解决方案(三)——利用JCom调用MS Office或者Acrobat API转换文档...

sundy_ly
2013/10/26
0
3
PageOfficeV4.0 FileMaker组件功能简介

应用场景 在一些特殊应用场合,客户希望在服务器上生成文档的同时并填充数据,客户端的页面不显示打开文档。 目前服务器上生成文档第一种就是方案是采用Jacob, 但是局限于windows平台,往往...

山里的红杏
09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好用的vue组件

http://elickzhao.github.io/2017/08/vue%E4%B8%80%E4%BA%9B%E7%89%B9%E5%88%AB%E6%9C%89%E7%94%A8%E7%9A%84%E6%8F%92%E4%BB%B6/...

Littlebox
27分钟前
2
0
linux 源码安装mysql8

1.安装依赖 yum -y install wget cmake gcc gcc-c++ ncurses ncurses-devel libaio-devel openssl openssl-devel   2.下载源码包 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-......

苏牧影子
27分钟前
1
0
BeanFactory和FactoryBean

BeanFactory BeanFactory是ioc容器的顶层接口,里面定义了一些容器基本的功能 类似ConfigurableBeanFatory和ApplicationContext就是比较高级的容器,除了基本的方法之外,还实现了很多高级的...

sendo
29分钟前
1
0
Java并发(9)- 从同步容器到并发容器

引言 容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,我前面的文章中对Java集合包中的关键容器进行过一个系列的分析,但这些集合类都是非线...

Ala6
33分钟前
3
0
Java定时器Timer学习之一

种类: 接通延时型定时器:接通延时型定时器是各种PLC(可编程控制器)中最常见最基本的定时器,这种定时器在Siemens的PLC中,成为SD型定时器 断开延时型定时器:这种定时器是当输入条件00000为ON时...

王怀楼
35分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部