文档章节

JodConverter doc转pdf (Debian 8)

norxiva
 norxiva
发布于 2016/07/14 17:24
字数 568
阅读 105
收藏 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
Java+FlexPaper+swfTools仿文库文档在线阅读

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

StephenZou
2013/07/13
0
34
linux服务器搭建在线预览环境

linux版本 Centos.x86_64 需要下载的工具包 openoffice 下载地址:https://www.openoffice.org/download/other.html 选择 Linux x86_64 rpm chinese简体中文包 解压并安装 安装openoffice ta......

cat_l_fish
2014/04/24
0
2
nginx+php+openOffice

由于需要将word-》pdf功能从windows迁移到linux,由于现在测试服务器尝试,所以有必要记录下安装过程。 一、安装OpenOffice 1.下载安装包:根据自己的系统版本选择安装包。 http://www.openo...

懒小鱼
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
11分钟前
0
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
3
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
1
0
OSChina 周四乱弹 —— 上帝对我单身年限的惩罚越来越长了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享张卫健的单曲《身体健康》 《身体健康》- 张卫健 手机党少年们想听歌,请使劲儿戳(这里) 昨天是重阳节咯, 可惜小小编辑总是晚...

小小编辑
今天
12
1
django rest framework 外键序列化方法与问题总结

django rest framework 外键序列化方法与问题总结 当借口中需要出现一对多关系的时候,我们可以用rest_framwork的序列化功能来处理,代码如下. # models.pyfrom django.db import modelscl...

_Change_
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部