`
slikel
  • 浏览: 64655 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

OpenOffice【DOC2HTML】

 
阅读更多

      最经项目上有需求,需要将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转换Office文档为PDF、HTML

    2. **转换为HTML**: - 同样,打开相应的OpenOffice应用程序和文件。 - 进入“文件”菜单,这次选择“另存为”而不是“导出”。 - 在“另存为”对话框中,选择“Web页”或“HTML”作为文件类型。 - 在“文件类型...

    openoffice-word2html.rar

    OpenOffice是一款开源的办公软件套件,它包含了文字处理、电子表格、演示文稿等多种应用,支持多种文件格式,包括Microsoft Office的DOC和DOCX。对于开发者或自动化工作流程而言,将Word文档转换为HTML格式有时是...

    利用OpenOffice对html、word、pdf进行转换

    这与OpenOffice的转换功能相关,因为OpenOffice Writer可以导出为DOC格式,而Java库如Apache POI允许开发者创建和修改微软的DOC文件。 在这个主题中,我们可以探讨以下几个方面的知识点: 1. **OpenOffice API**:...

    openoffice完整jar包

    "实现openoffice文档转换在线预览"说明了主要的应用场景,即通过编程方式处理OpenOffice支持的文档格式(如ODT、DOC、XLS等),并生成预览。参考链接提供了具体的实现步骤和技术细节。 **标签解析** "openoffice ...

    c#使用openoffice组件操作文件

    4. **NPOI库**:NPOI是一个专门针对Microsoft Office文件格式(如DOC、XLS)的.NET库,虽然它不直接支持OpenOffice,但在处理Excel文件时,NPOI可以作为一个辅助工具,尤其是在无需启动OpenOffice进程的情况下进行...

    openoffice转pdf和html代码和一些lib

    6. **集成OpenOffice和PDF2HTMLEX**:开发者可以结合OpenOffice和PDF2HTMLEX的功能,先用OpenOffice将文档转换为PDF,再利用PDF2HTMLEX将PDF转换为HTML,以达到最佳的网络显示效果。 7. **库的使用**:在编程环境中...

    web项目使用OpenOffice实现前端在线预览office、pdf等文档源码

    2. **使用JODConverter**: JODConverter是基于OpenOffice的Java转换库,它可以将各种Office文档转换为PDF或者其他格式。在Web项目中,你可以创建一个服务,使用JODConverter的API来调用OpenOffice服务,将上传的...

    OpenOffice

    在IT领域,OpenOffice是一个开源的办公套件,它提供了处理各种文档格式的能力,包括创建、编辑和转换Word文档(.doc或.docx)以及Excel电子表格(.xls或.xlsx)到HTML格式。这个过程在Java编程环境中尤为重要,因为...

    flexpaper+openoffice+pdf2swf.exe

    FlexPaper 是一款强大的在线文档查看和预览工具,它能够将PDF、DOC、DOCX、XLS、XLSX、PPT、PPTX等多种格式的文档转换为Web友好的Flash或HTML5版本,以便在网页上进行无缝浏览。OpenOffice则是一款开源的办公软件...

    doc转换成html

    本文将详细探讨三种将.doc(Microsoft Word文档)转换为.html(HTML网页)的方法,确保在转换过程中尽可能保留原始文档的样式和布局。 一、在线转换工具 在线转换工具是一种便捷的解决方案,适用于那些没有安装...

    吐血推荐openoffice+swftool心得

    2. 配置FlexPaper的HTML和JavaScript代码,指定SWF文件的位置,并设置其他显示选项。 3. 将生成的`output.swf`文件上传至服务器,并在网页中通过FlexPaper加载。 通过这种方式,你不仅可以实现.doc到.pdf再到.swf的...

    openoffice实现office在线预览

    OpenOffice 是一套开源的办公软件套件,它可以创建、编辑和转换各种办公文档格式,包括 Microsoft Office 的 .doc、.xls 和 .ppt 文件。在 Web 应用场景中,实现 Office 文档在线预览功能是提高用户体验的重要一环。...

    文档在线预览openoffice

    OpenOffice是一款开源的办公软件套件,它能够处理多种文档格式,包括doc、docx、ppt、pptx、txt、xls、xlsx以及pdf等。在这里,我们讨论如何利用OpenOffice实现文档在线预览的技术细节。 首先,要实现这个功能,...

    在线预览openOffice demo

    OpenOffice支持通过UNO接口(Universal Network Objects)与外部程序交互,可以调用它的转换功能将Word文档(.doc或.docx)转化为PDF。以下是一个基本步骤: 1. 安装OpenOffice或其衍生版本,如LibreOffice。 2. ...

    openoffice实现pdf上传文件预览功能

    OpenOffice的JODConverter库可以将多种文档格式(如ODT、DOC、XLS等)转换为PDF或其他可预览的格式。通过这个库,我们可以将用户上传的PDF文件转换成一个Web友好的格式,然后在浏览器中进行预览。 步骤1:安装...

    openoffice实现文件预览的jar及pdf.js

    - 使用Java API:利用Apache POI或JODConverter将非PDF格式的文档(如.doc, .xls, .ppt)转换为PDF。这通常涉及启动OpenOffice服务,发送转换请求,然后接收转换后的PDF文件。 2. **前端预览**: - 引入PDF.js:...

    java转为PDF的效果(openoffice)

    OpenOffice是一个开源的办公软件套件,它提供了API,使得开发者能够利用Java进行文档格式转换,包括将文本或HTML转换为PDF格式。以下是一些关于这个主题的重要知识点: 1. **Apache POI**: 在Java中处理微软Office...

    openOffice实现在线预览归类eclipse下直接可运行

    对于Microsoft Office文档(doc, docx, excel, ppt),先利用OpenOffice转换为HTML;对于PDF,可能需要使用PDF解析库将其转换为图片序列。 6. **安全考虑**: 在实现在线预览时,必须注意文件上传和访问的安全性,...

    OpenOffice实现word、excel、ppt等文本文件转换pdf

    2. **配置转换服务**:安装完成后,设置OpenOffice以允许外部程序访问。通常,这涉及到启动OpenOffice并打开“工具”&gt;“选项”&gt;“OpenOffice.org”&gt;“连接”,确保“允许网络连接”选项被选中。 3. **使用API**:...

    poi3.8 doc,excel转html

    2. **Word(.doc)到HTML转换**:使用HWPF,我们可以遍历Word文档的段落、字符样式、表格等元素,然后将其转换为HTML标签。例如,段落对应`&lt;p&gt;`标签,字体样式可以转换为`&lt;font&gt;`或CSS,表格则转换为`&lt;table&gt;`结构。...

Global site tag (gtag.js) - Google Analytics