文档章节

JodConverter doc转pdf (Debian 8)

norxiva
 norxiva
发布于 2016/07/14 17:24
字数 568
阅读 116
收藏 1

环境信息

虚拟机节点(192.168.100.171<debian171>)

Debian jessie 8.5 

Jodconverter 2.2.1

安装libreoffice

#apt安装

sudo apt-get install libreoffice
sudo soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &

#deb安装

tar xvf LibreOffice_5.1.4_Linux_x86-64_deb.tar.gz
cd LibreOffice_5.1.4.2_Linux_x86-64_deb/DEBS/
dpkg -i *.deb
cd /opt/libreoffice5.1/program/
soffice --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --nofirststartwizard &

 如果报“error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory”,需要安装下面的软件包

sudo apt-get install libgl1-mesa-glx

如果报“error while loading shared libraries: libSM.so.6: cannot open shared object file”,需要安装下面的软件包

sudo apt-get install libsm6

参考:http://libre-software.net/how-to-install-libreoffice-on-ubuntu-linux-mint/

 java代码

package surfin.example.jodconverter.simpledemo;

import java.io.File;
import java.net.ConnectException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

public class BootStrap {
	private static final Logger log = LoggerFactory.getLogger(BootStrap.class);

	public static void main(String[] args) {
		
		if(args.length < 2){
			log.info("usage: java -jar surfin-example-jodconverter.jar (source_file) (target_file)");
			return;
		}
		
		
		OpenOfficeConnection connection = null;
		DocumentConverter converter = null;

		try {
			connection = new SocketOpenOfficeConnection(8100);
			connection.connect();
			converter = new OpenOfficeDocumentConverter(connection);

			File inputFile = new File(args[0]);
			File outputFile = new File(args[1]);

			// convert
			converter.convert(inputFile, outputFile);
		} catch (ConnectException e) {
			log.error(e.getMessage(), e);
		} finally {
			if (connection != null) {
				connection.disconnect();
			}
		}

	}

}

中文问题

#复制字体后重启libreoffice

sudo cp simhei.ttf /usr/share/fonts/truetype/openoffice
sudo cp simsun.ttc /usr/share/fonts/truetype/openoffice

注意:存放字体到/usr/lib/libreoffice/share/fonts/truetype和/usr/local/java/jdk1.8.0_92/jre/lib/fonts都没有生效

小结

jodconverter的转换效果不是太尽人意,字体样式会有错位,在window上除字体存在问题外,格式还行,应该与libreoffice和msoffice样式区分有关

其他类似框架:docx4j,xdocreport

docx4j测试代码

public static void main(String[] args) {
	long start = System.currentTimeMillis();

	// 1) Load DOCX into WordprocessingMLPackage
	InputStream is;
	try {
		is = new FileInputStream(new File("d:/test1.docx"));
		WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(is);

		// 2) Prepare Pdf settings
		PdfSettings pdfSettings = new PdfSettings();

		// 3) Convert WordprocessingMLPackage to Pdf
		OutputStream out = new FileOutputStream(new File("d:/test-docx4j.pdf"));
		PdfConversion converter = new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(wordMLPackage);
		converter.output(out, pdfSettings);

		log.info("Generate pdf/HelloWorld.pdf with " + (System.currentTimeMillis() - start) + "ms");
	} catch (FileNotFoundException e) {
		log.error(e.getMessage(),e );
	} catch (Docx4JException e) {
		log.error(e.getMessage(),e );
	}

}

xdocreport代码

long start = System.currentTimeMillis();

// 1) Load DOCX into XWPFDocument
InputStream is;
try {
	is = new FileInputStream(new File("d:/test1.docx"));
	XWPFDocument document = new XWPFDocument(is);

	// 2) Prepare Pdf options
	PdfOptions options = PdfOptions.create();

	// 3) Convert XWPFDocument to Pdf
	OutputStream out = new FileOutputStream(new File("d:/test1-xdoc.pdf"));
	PdfConverter.getInstance().convert(document, out, options);

	log.info("Generate pdf/HelloWorld.pdf with " + (System.currentTimeMillis() - start) + "ms");
} catch (FileNotFoundException e) {
	log.error(e.getMessage(), e);
} catch (IOException e) {
	log.error(e.getMessage(), e);
}

小结

docx4j和xdocreport转换效果还不如jodconverter,样式和内容都会有缺失

参考资料

http://m.myexception.cn/powerdesigner/414230.html

http://wenku.baidu.com/view/79ad1bd4360cba1aa811dadb.html

http://it.chinawin.net/os/article-1d426.html

http://www.it610.com/article/536230.htm

http://slikel.iteye.com/blog/1677579/

http://thexfile0515.blogspot.com/2012/04/jodconverter-microsoft-office-pdf.html

http://5iqiong.blog.51cto.com/2999926/1188961

© 著作权归作者所有

共有 人打赏支持
norxiva
粉丝 0
博文 11
码字总数 5308
作品 0
徐汇
高级程序员
私信 提问
Centos下安装类百度文库环境

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

DragonFK
2013/02/20
0
1
jodconverter4.1.0版本改进解析

序 jodconverter 4.1.0版本的话,改进了api的结构,同时新增了local以及online的模块,本文就来分析一下。 maven 依赖变化 新版的话,对原来的jodconverter-core进行了抽离,将对libreoffice...

go4it
2017/10/21
0
0
Word、Excel、PPT、PDF在线预览,类似百度文库的实现方法?

Word、Excel、PPT、PDF在线预览的实现方法有什么,我暂时知道可以用flash和html实现预览 最好不要用flash预览,希望能用html5。 暂时我查到的技术有: flash预览有:flexpaper(支持Word、E...

槽卤
2015/09/02
4K
7
openoffice和JODConverter 能在Android使用么?

打算在Android上转化office文档为pdf格式,看到好多使用JODConverter转化的,不过好像要使用openoffice的服务,这样来看的话openoffice和JODConverter可以在Android使用么!? 或者有什么其他...

穿裤衩闯天下
2013/05/20
681
1
实现一个具有百度文库文档转换功能的工具类

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

晨曦之光
2012/04/24
332
2

没有更多内容

加载失败,请刷新页面

加载更多

mac 下 mysql 8.0.13 安装并记录遇到的问题 以便以后查看

安装 官网mysql 下载地址 安装过程 省去 安装好之后 下载navicat 错误1 链接 遇到 mysql 2003 - Can't connect to MySQL server 错误, 解决方案 重启mysql 服务 #错误2 ERROR 1045: Acces...

杭州-IT攻城狮
23分钟前
3
0

中国龙-扬科
26分钟前
1
0
[Spring4.x]基于spring4.x纯注解的Web工程搭建

在前文中已经说明了如何基于 Spring4.x+ 版本开发纯注解的非web项目,链接如下: https://my.oschina.net/morpheusWB/blog/2985600 本文则主要说明,如何在Web项目中,"基于spring纯注解方式...

morpheusWB
55分钟前
13
0
基础编程题目集-7-13 日K蜡烛图

股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开...

niithub
今天
5
0
Jenkins window 下的安装使用

1.下载:https://jenkins.io/download/ 双击安装完毕,将自动打开浏览器: http://localhost:8080 打开对应位置的文件,将初始密钥粘贴至输入框。 第一个是 安装默认的软件;第二个是 自定义...

狼王黄师傅
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部