文档章节

仿百度文库解决方案(三)- 利用JODConverter把文档转换成pdf格式

行走的思想者
 行走的思想者
发布于 2016/04/01 17:02
字数 1301
阅读 65
收藏 1

          文档的转换成pdf格式的方法有很多,目前主要有三种解决方案:利用Jacob或者JCom调用MS Office或者WPS Office API,利用JODConverter调用OpenOffice.org服务,调用虚拟打印机转换文档为PDF。由于本人对于Jacob和JCom调用MS Office 或者wps Office API不是很了解,在这里就不说了,本文用到的方法主要是JODConverter调用OpenOffice.org 服务,调用虚拟打印机转换文档为PDF。 在这里首先了解一下JODConverter软件。         

         JODConverter,是一个JavaOpenDocument文件转换器,可以进行许多文件格式的转换。它依赖于OpenOffice.org或者LibreOffice提供的服务来进行转换,它能将Microsoft Office文档(WordExcelPowerPoint)转换为PDF格式。 

        当前的JODConverter的版本是是JODConverter3.0。本文用到的是 JODConverter2.2.2版本的下载地址是 http://download.csdn.net/detail/yali1990515/4443791 

 JODConverter的使用你可以把嵌入在java程序中,也可以单独作为命令由脚本条用。 更可以应用为网页程序或者Web Service以供网络应用。

 1 主要接口的声明 :

       OfficeManager是一个接口,主要定义了三个方法:

· public void start( )启动OpenOffice服务

· public void stop( )停止OpenOffice服务

· public void execute(OfficeTask task)执行转换任务

  DefaultOfficeManagerConfiguration是一个实现了OfficeManager接口的实体类,其提供了相关方法配置OpenOffice.org,比如:

  public DefaultOfficeManagerConfiguration setOfficeHome(String officeHome)设置OpenOffice.org或者LibreOffice安装目录,windows下默认值为” C:\Program Files\OpenOffice.org 3LibreOffice进行相应更改),因此如果OpenOffice.org安装在别的目录,必须设置此项。

  public DefaultOfficeManagerConfiguration setConnectionProtocol(OfficeConnectionProtocol conn)设置连接协议,确定使用管道通信,还是socekt通信。

  pubcli DefaultOfficeManagerConfiguration setTemplateProfileDir(File templateProfileDir)设定临时目录。

  除以上几个方法之外,DefaultOfficeManagerConfiguration还提供了别的配置OpenOffice.org的方法,具体方法可以查询JODConverter API手册。配置完之后,必须要执行方法buildOfficeManager(),实现真正的配置。

  OfficeDocumentConverter中主要包含convert方法,该方法实际上调用的是实现OfficeManager接口的类中的execute方法。

  2 利用JODConverter转化文档为PDF格式实现

      2.1 算法的设计  

     

    第一步,启动OpenOffice服务。例如,首先设定DefaultOfficeManagerConfiguration相关参数来配置OpenOffice,并得到OfficeManager。调用OfficeManager实现类的start方法启动服务。

  第二步,转换文档。例如,初始化OfficeDocumentConverter,调用其convert方法执行转换。

  第三步,停止OpenOffice服务。例如,调用OfficeManager实现类的stop方法停止方法。

  3 JODConverter的安装配置 

      JODConverter的安装配置在这里就不说了,如果不知道的可以去百度或者google搜索一下,网上都有很全面的说明。下载完JJODConverter之后解压压缩包,把JODConverter的lib目录下的jar包考到做到的项目中,本文还需要把jodconverter-core-3.0-beta-4.jar拷到lib目录下,由于文章中用到了org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;不然会报出错误。至于jodconverter-core-3.0-beta-4.jar      可以从文中的案例中拷到。案例的下载地址为 :http://download.csdn.net/download/yali1990515/4443960

       lib目录下的jar加载完成后如下:

 

     4 文档的转换  

                文档的转换分为两类:文本文档的转换和office文档转换。

                文本文档的转换的主要方法是: 先把文件转换为后缀名为odt的文件,之后在调用OfficeDocumentConverter中的converter的方法把文件转换为pdf格式就好了,在这样的原因主要为了防止转换时出现乱码的问题。 第二类 :office文档的转换只要我们开启服务直接转换就可以了。关于文档的转换的代码如下 :

        

package cn.bzu.edu.SoCool.convert;

import java.io.File;
import java.io.FileNotFoundException;

import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;

//转换文档为pdf
public class OpenOfficePdfConvert {

	/**
	 * @param args
	 */
	private static OfficeManager officeManager;//需要导入一个
	private static String OFFICE_HOME = "C:\\Program Files\\OpenOffice.org 3";//安装OPenOffice 的路径
	private static int port[] = { 8100 };
    
	public void convert2PDF(String inputFile, String outputFile) throws FileNotFoundException {
	   
	    /* 1  进行转换 操作
	     * 2 start service
	     * 3 deal  tranlate
	     * 3 stop service
	     */
	    String fileName1 = inputFile.substring(0, inputFile.lastIndexOf("."));
	    if(inputFile.endsWith("txt")){
	    	String odtFile = fileName1+".odt";
	    	if(new File(odtFile).exists()){
	    		System.out.println("odt文件已存在!");
	    		inputFile = odtFile;
	    	}else{
                FileUtil.copyFile(inputFile, odtFile);
	    		inputFile = odtFile;
	    	}
	    }
	    //开启服务器
		startService();
		//进行转换
		System.out.println("进行文档转换转换:" + inputFile + " --> " + outputFile);
		OfficeDocumentConverter converter = new OfficeDocumentConverter(
				officeManager);
		converter.convert(new File(inputFile), new File(outputFile));
		//关闭服务器
		stopService();
		System.out.println();

	}

	// 打开服务器
	public static void startService() {
		DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
		try {
			System.out.println("准备启动服务....");
			configuration.setOfficeHome(OFFICE_HOME);// 设置OpenOffice.org安装目录
			configuration.setPortNumbers(port); // 设置转换端口,默认为8100
			configuration.setTaskExecutionTimeout(1000 * 60 * 5L);// 设置任务执行超时为5分钟
			configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);// 设置任务队列超时为24小时

			officeManager = configuration.buildOfficeManager();
			officeManager.start(); // 启动服务
			System.out.println("office转换服务启动成功!");
		} catch (Exception ce) {
			System.out.println("office转换服务启动失败!详细信息:" + ce);
		}
	}

	// 关闭服务器
	public static void stopService() {
		System.out.println("关闭office转换服务....");
		if (officeManager != null) {
			officeManager.stop();
		}
		System.out.println("关闭office转换成功!");
	}
    /*
     * 进行测试转换是否成功
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String inputFile = "d:\\resource\\1.doc";
		String outputFile = "d:\\resource\\1.pdf";
		OpenOfficePdfConvert opc = new OpenOfficePdfConvert();
		try {
			opc.convert2PDF(inputFile, outputFile);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
     */
}


 参考资料 :

         http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548331.html

         http://www.cnblogs.com/star-studio/archive/2011/12/09/2282411.html

© 著作权归作者所有

行走的思想者
粉丝 0
博文 15
码字总数 35851
作品 0
济南
私信 提问
Java+FlexPaper+swfTools仿文库文档在线阅读

一、文档在线阅读思路 1.用OpenOffice把PPT、Word、Excel、Text转换为pdf 2.用SWFTool将生成的pdf转换成swf,然后利用FlexPlayer实现在线预览播放 二、准备工作 1.安装OpenOffice,官网下载地...

StephenZou
2013/07/13
13.6K
34
实现一个具有百度文库文档转换功能的工具类

转载请注明来自“柳大的CSDN博客”,原文地址:http://blog.csdn.net/poechant/article/details/7238056 用过百度文库、豆丁的朋友,都知道,我们只要将文档上传到这些网站上,就可以实现分享...

晨曦之光
2012/04/24
342
2
仿百度文库解决方案(二)——利用Jacob调用MS Office转换文档为PDF

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

sundy_ly
2013/10/26
687
3
Centos下安装类百度文库环境

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

DragonFK
2013/02/20
1K
1
使用swftools 将 pdf 转 swf 问题

项目需要在线预览word等格式的文件,于是在网上找了实现类似百度文库的东东,利用FlexPaper + jodconverter + openoffice + swftools 实现的。估计大家都熟悉,我就直接说问题了。在开发环境...

shizy
2012/09/24
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部