背景及编码思路
关于用
OpenOffice
的场景更多是将
word
中的内容另存为(转化)
html
。我的应用场景是将在线编辑器的内容保存为
word
格式,系细览转换为
word
、
pdf
的一种需求。
- 下载Openoffice(http://download.openoffice.org/index.html ),类似于windows office的一个套件,并额外支持服务的运行方式,可理解为数据库
- 下载Jodconverter( http://www.artofsolving.com/opensource/jodconverter),类似于jdbc
- 按照OpenOffice,并启动服务:soffice -headless -accept="socket,port=8100;urp;"
- 引入jodconverter的jar包,并编码第2章 开发过程中遇到的问题
public class OpenOfficeService {
private Logger logger = Logger.getLogger(this.getClass());
OpenOfficeConnection con = null;
public void convert(File sourceFile, File _targetFile) {
try {
if (con == null) {
con = new SocketOpenOfficeConnection(ip, port);
}
con.connect();
DocumentConverter converter = new OpenOfficeDocumentConverter(con);
converter.convert(sourceFile, _targetFile);
// DefaultDocumentFormatRegistry formatReg = new DefaultDocumentFormatRegistry();
// converter.convert(sourceFile, formatReg.getFormatByFileExtension("html"), _targetFile, formatReg.getFormatByFileExtension("pdf"));
} catch (ConnectException e) {
logger.error("OpenOffice异常", e);
try {
if (con != null) {
con.disconnect();
con = null;
}
} catch (Exception e1) {
logger.error(e);
}
}
}
public static void main(String[] args) {
OpenOfficeService openoffice = new OpenOfficeService();
// 生成odt,本质上可以用word打开(可以在下载时修改为doc文件,以屏蔽用户感觉到的差异),如果生成doc,则图片会丢失
openoffice.convert(new File("WebRoot/jsp/data/docs/a.html"), new File("WebRoot/jsp/data/docs/a.odt"));
// 生成pdf
openoffice.convert(new File("WebRoot/jsp/data/docs/a.html"), new File("WebRoot/jsp/data/docs/a.pdf"));
}
public void setIp(String ip) {
this.ip = ip;
}
public void setPort(int port) {
this.port = port;
}
private String ip = "127.0.0.1";
private int port = 8100;
}
过程中遇到的问题
html中的图片可以转化到pdf,但是在不能转化到word中,经测试可以转化到odt文件中,所以我在开发过程中实际上是由hmt转换为odt,再在下载的过程中将后缀改为doc格式,另外,html中的图片,最好与html文件放到同一目录下,引用方式为相对目录,也可以修改html的图片路径为绝对路径。