文档章节

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

乐在克里特
 乐在克里特
发布于 2017/02/23 09:50
字数 608
阅读 80
收藏 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
蛋疼的Merge之wordMege

蛋疼的,前几天要word转pdf 然后再pdfMerge,今天又要wordMerge 。。。 代码来源 : http://blog.sina.com.cn/s/blog5d603b170100wcrh.html acob(Java COM Bridge)是一个开始于1999年的开源...

扶殊88
2011/12/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iOS开发用到的图片尺寸汇总

启动图 型号 竖屏 横屏 iPhone SE 640px × 1136px 1136px × 640px iPhone 6s 750px × 1334px 1334px × 750px iPhone 6s Plus 1242px × 2208px 2208px × 1242px iPhone 7 750px × 1334......

业界小白
24分钟前
0
0
浅谈redis

redis是一个开源,内存式的健值存储数据库,也被称为健值存储的字典服务器。健值类型有字符串,hash(哈希类型),set(集合),list(列表) 和有序集合 特征细节: 内存式:redis将健值存储在主...

拐美人
31分钟前
0
0
无限扩容,按需使用!ZStack推出基于阿里云NAS的文件存储服务

日前,ZStack发布2.6.0版本,正式宣布推出基于阿里云NAS的文件存储服务。得益于业界领先的阿里云分布式存储架构,融合NAS后的ZStack 2.6.0拥有高性能、高可靠、容量无限扩展、一键操作、按需...

ZStack社区版
34分钟前
1
0
崛起于Springboot2.X之Mongodb多数据源处理(35)

多数据源:4个mongodb库! 目录结构图: 1、添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId>......

木九天
39分钟前
0
0
如何获取显示器的EDID信息

Q1: 为什么要写这篇文章? A1:在最近的工作中遇到了不少问题,其中很多都是和EDID相关的。可以说,作为一家以“显示”为生的企业,我们时时刻刻在与EDID打交道。EDID这东西很简单,但是如果...

DB_Terrill
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部