最经项目上有需求,需要将DOC文件中的内容,转换为HTML。以下是通过openOffice组件来实现的。在服务器上要安装openoffice 的客户端,并打开openoffice服务。
打开openoffice服务的命令:
cd C:\Program Files\OpenOffice.org 3\program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
1、下载OpenOffice,http://download.openoffice.org/index.html So easy...
2、下载Jodconverter http://www.artofsolving.com/opensource/jodconverter 这是一个开启OpenOffice进行格式转化的第三方jar包。
package cn.com.jit.pki.rms.server.utils;
import org.apache.commons.fileupload.util.Streams;
import org.apache.log4j.Logger;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ConnectException;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import cn.com.jit.pki.rms.server.error.RMSException;
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 Doc2Html {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(Doc2Html.class);
public static File convert(File docFile, String filepath) throws RMSException {
if (logger.isDebugEnabled()) {
logger.debug("convert(File, String) - start");
}
// 创建保存html的文件
File htmlFile = new File(filepath + "/" + new Date().getTime()
+ ".html");
// 创建Openoffice连接
OpenOfficeConnection con = new SocketOpenOfficeConnection(8100);
try {
// 连接
con.connect();
} catch (ConnectException e) {
logger.error("convert(File, String)", e);
//System.out.println("获取OpenOffice连接失败...");
//e.printStackTrace();
throw new RMSException("11300039", e);
}
// 创建转换器
DocumentConverter converter = new OpenOfficeDocumentConverter(con);
// 转换文档问html
converter.convert(docFile, htmlFile);
// 关闭openoffice连接
con.disconnect();
if (logger.isDebugEnabled()) {
logger.debug("convert(File, String) - end");
}
return htmlFile;
}
/**
* 将word转换成html文件,并且获取html文件代码。
*
* @param docFile
* 需要转换的文档
* @param filepath
* 文档中图片的保存位置
* @param imgPath
* 上传的word文档中图片访问地址
* @return
* 转换成功的html代码
* @throws IOException
*
*/
public static String toHtmlString(File docFile, String filepath, String imgPath, String id) throws RMSException {
if (logger.isDebugEnabled()) {
logger.debug("toHtmlString(File, String, String) - start");
}
// 转换word文档
File htmlFile = convert(docFile, filepath);
// 获取html文件流
StringBuffer htmlSb = new StringBuffer();
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(htmlFile), "gbk"));
while (br.ready()) {
//进行编码转换
byte[] temp = br.readLine().getBytes("gbk");
byte[] temp2 = new String(temp, "gbk").getBytes("utf-8");
htmlSb.append(new String(temp2, "utf-8"));
}
br.close();
//删除临时文件
htmlFile.delete();
} catch (FileNotFoundException e) {
logger.error("toHtmlString(File, String, String)", e);
throw new RMSException("11300038", e);
} catch (IOException e) {
logger.error("toHtmlString(File, String, String)", e);
throw new RMSException("11300038", e);
}
// HTML文件字符串
String htmlStr = htmlSb.toString();
// 返回经过清洁的html文本imgPath的值应该为http://...:8080/webmanager/newsImage/newsId/
htmlStr = clearFormat(htmlStr, imgPath);
//BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "utf-8"));
//htmlStr = new String(htmlStr.getBytes("gbk"), "utf-8");
//out.write(htmlStr);
//ByteArrayInputStream bi = new ByteArrayInputStream(htmlStr.getBytes(charset));
//out.close();
if (logger.isDebugEnabled()) {
logger.debug("toHtmlString(File, String, String) - end");
}
return htmlStr;
}
/**
* 清除一些不需要的html标记
*
* @param htmlStr
* 带有复杂html标记的html语句
* @return 去除了不需要html标记的语句
*/
protected static String clearFormat(String htmlStr, String docImgPath) {
if (logger.isDebugEnabled()) {
logger.debug("clearFormat(String, String) - start");
}
// 获取body内容的正则
String bodyReg = "<BODY .*</BODY>";
Pattern bodyPattern = Pattern.compile(bodyReg);
Matcher bodyMatcher = bodyPattern.matcher(htmlStr);
if (bodyMatcher.find()) {
// 获取BODY内容,并转化BODY标签为DIV
htmlStr = bodyMatcher.group().replaceFirst("<BODY", "<DIV")
.replaceAll("</BODY>", "</DIV>");
}
// 调整图片地址
htmlStr = htmlStr.replaceAll("<IMG SRC=\"", "<IMG SRC=\"" + docImgPath
+ "/");
// 把<P></P>转换成</div></div>保留样式
// content = content.replaceAll("(<P)([^>]*>.*?)(<\\/P>)",
// "<div$2</div>");
// 把<P></P>转换成</div></div>并删除样式
htmlStr = htmlStr.replaceAll("(<P)([^>]*)(>.*?)(<\\/P>)", "<p$3</p>");
// 删除不需要的标签
htmlStr = htmlStr
.replaceAll(
"<[/]?(font|FONT|span|SPAN|xml|XML|del|DEL|ins|INS|meta|META|[ovwxpOVWXP]:\\w+)[^>]*?>",
"");
// 删除不需要的属性
htmlStr = htmlStr
.replaceAll(
"<([^>]*)(?:lang|LANG|class|CLASS|style|STYLE|size|SIZE|face|FACE|[ovwxpOVWXP]:\\w+)=(?:'[^']*'|\"\"[^\"\"]*\"\"|[^>]+)([^>]*)>",
"<$1$2>");
if (logger.isDebugEnabled()) {
logger.debug("clearFormat(String, String) - end");
}
return htmlStr;
}
}
分享到:
相关推荐
这与OpenOffice的转换功能相关,因为OpenOffice Writer可以导出为DOC格式,而Java库如Apache POI允许开发者创建和修改微软的DOC文件。 在这个主题中,我们可以探讨以下几个方面的知识点: 1. **OpenOffice API**:...
2. **转换为HTML**: - 同样,打开相应的OpenOffice应用程序和文件。 - 进入“文件”菜单,这次选择“另存为”而不是“导出”。 - 在“另存为”对话框中,选择“Web页”或“HTML”作为文件类型。 - 在“文件类型...
6. **集成OpenOffice和PDF2HTMLEX**:开发者可以结合OpenOffice和PDF2HTMLEX的功能,先用OpenOffice将文档转换为PDF,再利用PDF2HTMLEX将PDF转换为HTML,以达到最佳的网络显示效果。 7. **库的使用**:在编程环境中...
OpenOffice是一款开源的办公软件套件,它包含了文字处理、电子表格、演示文稿等多种应用,支持多种文件格式,包括Microsoft Office的DOC和DOCX。对于开发者或自动化工作流程而言,将Word文档转换为HTML格式有时是...
2. **使用JODConverter**: JODConverter是基于OpenOffice的Java转换库,它可以将各种Office文档转换为PDF或者其他格式。在Web项目中,你可以创建一个服务,使用JODConverter的API来调用OpenOffice服务,将上传的...
"实现openoffice文档转换在线预览"说明了主要的应用场景,即通过编程方式处理OpenOffice支持的文档格式(如ODT、DOC、XLS等),并生成预览。参考链接提供了具体的实现步骤和技术细节。 **标签解析** "openoffice ...
4. **NPOI库**:NPOI是一个专门针对Microsoft Office文件格式(如DOC、XLS)的.NET库,虽然它不直接支持OpenOffice,但在处理Excel文件时,NPOI可以作为一个辅助工具,尤其是在无需启动OpenOffice进程的情况下进行...
在IT领域,OpenOffice是一个开源的办公套件,它提供了处理各种文档格式的能力,包括创建、编辑和转换Word文档(.doc或.docx)以及Excel电子表格(.xls或.xlsx)到HTML格式。这个过程在Java编程环境中尤为重要,因为...
FlexPaper 是一款强大的在线文档查看和预览工具,它能够将PDF、DOC、DOCX、XLS、XLSX、PPT、PPTX等多种格式的文档转换为Web友好的Flash或HTML5版本,以便在网页上进行无缝浏览。OpenOffice则是一款开源的办公软件...
本文将详细探讨三种将.doc(Microsoft Word文档)转换为.html(HTML网页)的方法,确保在转换过程中尽可能保留原始文档的样式和布局。 一、在线转换工具 在线转换工具是一种便捷的解决方案,适用于那些没有安装...
2. 配置FlexPaper的HTML和JavaScript代码,指定SWF文件的位置,并设置其他显示选项。 3. 将生成的`output.swf`文件上传至服务器,并在网页中通过FlexPaper加载。 通过这种方式,你不仅可以实现.doc到.pdf再到.swf的...
OpenOffice是一款开源的办公软件套件,它能够处理多种文档格式,包括doc、docx、ppt、pptx、txt、xls、xlsx以及pdf等。在这里,我们讨论如何利用OpenOffice实现文档在线预览的技术细节。 首先,要实现这个功能,...
OpenOffice 是一套开源的办公软件套件,它可以创建、编辑和转换各种办公文档格式,包括 Microsoft Office 的 .doc、.xls 和 .ppt 文件。在 Web 应用场景中,实现 Office 文档在线预览功能是提高用户体验的重要一环。...
OpenOffice支持通过UNO接口(Universal Network Objects)与外部程序交互,可以调用它的转换功能将Word文档(.doc或.docx)转化为PDF。以下是一个基本步骤: 1. 安装OpenOffice或其衍生版本,如LibreOffice。 2. ...
OpenOffice是一个开源的办公软件套件,它提供了API,可以用来处理多种文档格式,包括ODF(OpenDocument Format)以及Microsoft Office的DOC、XLS和PPT等。SpringBoot作为Java生态系统中的轻量级框架,简化了构建微...
OpenOffice的JODConverter库可以将多种文档格式(如ODT、DOC、XLS等)转换为PDF或其他可预览的格式。通过这个库,我们可以将用户上传的PDF文件转换成一个Web友好的格式,然后在浏览器中进行预览。 步骤1:安装...
- 使用Java API:利用Apache POI或JODConverter将非PDF格式的文档(如.doc, .xls, .ppt)转换为PDF。这通常涉及启动OpenOffice服务,发送转换请求,然后接收转换后的PDF文件。 2. **前端预览**: - 引入PDF.js:...
本话题将详细介绍如何利用OpenOffice实现这一目标,特别是针对doc、docx、ppt、pptx、xls、xlsx、zip、rar等常见格式的文档进行在线预览、本地文档添加和HTML转换。 OpenOffice是一款开源的办公软件套件,它提供了...
转换过程可以通过内置的"导出"功能实现,支持将`.doc`、`.odt`等格式的文档转换成HTML文件。 在提供的文件列表中,我们看到`DocToHtml.java`和`BasicDocumentFormatRegistry.java`,这两个文件可能是Java源代码,...