`
chembo
  • 浏览: 938416 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

poi完美word转html(表格、图片、样式)

    博客分类:
  • poi
阅读更多
直入正题,需求为页面预览word文档,用的是poi3.8,以下代码支持表格、图片,不支持分页,只支持doc,不支持docx;
/**
 * 
 */


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.List;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.apache.commons.io.output.ByteArrayOutputStream;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.model.PicturesTable;
import org.apache.poi.hwpf.usermodel.CharacterRun;
import org.apache.poi.hwpf.usermodel.Paragraph;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.hwpf.usermodel.Table;
import org.apache.poi.hwpf.usermodel.TableCell;
import org.apache.poi.hwpf.usermodel.TableIterator;
import org.apache.poi.hwpf.usermodel.TableRow;
import org.w3c.dom.Document;

/**
 * @author: Chembo Huang
 * @since: May 3, 2012
 * @modified: May 3, 2012
 * @version:
 */
public class Word2Html {

	public static void main(String argv[]) {
		try {
			convert2Html("D://1.doc","D://1.html");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void writeFile(String content, String path) {
		FileOutputStream fos = null;
		BufferedWriter bw = null;
		try {
			File file = new File(path);
			fos = new FileOutputStream(file);
			bw = new BufferedWriter(new OutputStreamWriter(fos,"GB2312"));
			bw.write(content);
		} catch (FileNotFoundException fnfe) {
			fnfe.printStackTrace();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} finally {
			try {
				if (bw != null)
					bw.close();
				if (fos != null)
					fos.close();
			} catch (IOException ie) {
			}
		}
	}

	public static void convert2Html(String fileName, String outPutFile)
			throws TransformerException, IOException,
			ParserConfigurationException {
		HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(fileName));//WordToHtmlUtils.loadDoc(new FileInputStream(inputFile));
		WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(
				DocumentBuilderFactory.newInstance().newDocumentBuilder()
						.newDocument());
		 wordToHtmlConverter.setPicturesManager( new PicturesManager()
         {
             public String savePicture( byte[] content,
                     PictureType pictureType, String suggestedName,
                     float widthInches, float heightInches )
             {
                 return "test/"+suggestedName;
             }
         } );
		wordToHtmlConverter.processDocument(wordDocument);
		//save pictures
		List pics=wordDocument.getPicturesTable().getAllPictures();
		if(pics!=null){
			for(int i=0;i<pics.size();i++){
				Picture pic = (Picture)pics.get(i);
				System.out.println();
				try {
					pic.writeImageContent(new FileOutputStream("D:/test/"
							+ pic.suggestFullFileName()));
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}  
			}
		}
		Document htmlDocument = wordToHtmlConverter.getDocument();
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		DOMSource domSource = new DOMSource(htmlDocument);
		StreamResult streamResult = new StreamResult(out);

		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer serializer = tf.newTransformer();
		serializer.setOutputProperty(OutputKeys.ENCODING, "GB2312");
		serializer.setOutputProperty(OutputKeys.INDENT, "yes");
		serializer.setOutputProperty(OutputKeys.METHOD, "html");
		serializer.transform(domSource, streamResult);
		out.close();
		writeFile(new String(out.toByteArray()), outPutFile);
	}
}





  • 大小: 118.2 KB
  • 大小: 106.9 KB
分享到:
评论
21 楼 cwb520lei 2013-09-04  
wfshjkg 写道
你好,我想问下... 为什么好像这个转化在Android上面容易出现文字缺失...(主要是某些比较长的段落会出现)... GBK,UTF-8,UNICODE编码我都试过了... ...

你好,你文字丢失的问题解决了没?我也是在android运行出现这个问题。
20 楼 chembo 2013-09-02  
zhujiangtaobl0505 写道
word中的底纹怎么转化到html中,求楼主解答,急... 谢谢...

亲,这个没试过,你还是细细研究一下API文档吧。
19 楼 zhujiangtaobl0505 2013-09-02  
word中的底纹怎么转化到html中,求楼主解答,急... 谢谢...
18 楼 qingyezhu 2013-07-17  
月亮不懂夜的黑 写道
qingyezhu 写道
若是图片为emf格式的,转化后的html中的图片不显示?这怎么解决呀?谢谢

哥们你后来这问题解决没?



没有
17 楼 月亮不懂夜的黑 2013-06-14  
qingyezhu 写道
若是图片为emf格式的,转化后的html中的图片不显示?这怎么解决呀?谢谢

哥们你后来这问题解决没?
16 楼 hoversong 2013-06-14  
发现有一个问题,在两个word文件中,分别有不同的两张图片,先将第一个word转化为html,可以打开html查看,再将第二个word转为html,打开查看html文件,但这是如果打开第一个html文件会发现,图片变为第二个html中的图片了,就是说替换了图片。
我把return "test/"+suggestedName;改成return UUID.randomUUID().toString().replace("-", "")+suggestedName.substring(suggestedName.indexOf("."));

但是在pic.writeImageContent(new FileOutputStream("D:/test/" 
                            + pic.suggestFullFileName())); 获取的pic.suggestFullFileName()还是0.png
15 楼 chembo 2013-04-26  
xiaoyao1212121 写道
wfshjkg 写道
你好,我想问下... 为什么好像这个转化在Android上面容易出现文字缺失...(主要是某些比较长的段落会出现)... GBK,UTF-8,UNICODE编码我都试过了... ...

请问在android上 为什么  wordToHtmlConverter.processDocument(wordDocument); 这里就报错了......可以告诉我你们在android上怎么运行的么

抱歉,我没有在android上跑过。
14 楼 xiaoyao1212121 2013-04-26  
wfshjkg 写道
你好,我想问下... 为什么好像这个转化在Android上面容易出现文字缺失...(主要是某些比较长的段落会出现)... GBK,UTF-8,UNICODE编码我都试过了... ...

请问在android上 为什么  wordToHtmlConverter.processDocument(wordDocument); 这里就报错了......可以告诉我你们在android上怎么运行的么
13 楼 xiaoyao1212121 2013-04-26  
chembo 写道
wfshjkg 写道
你好,我想问下... 为什么好像这个转化在Android上面容易出现文字缺失...(主要是某些比较长的段落会出现)... GBK,UTF-8,UNICODE编码我都试过了... ...

这个可能要看一下poi的API和代码,可能是些参数设置问题,也可能是本身的bug,具体的你再研究一下吧。

请问在android上 为什么  wordToHtmlConverter.processDocument(wordDocument); 这里就报错了......可以告诉我你们在android上怎么运行的么
12 楼 chembo 2013-04-23  
wfshjkg 写道
你好,我想问下... 为什么好像这个转化在Android上面容易出现文字缺失...(主要是某些比较长的段落会出现)... GBK,UTF-8,UNICODE编码我都试过了... ...

这个可能要看一下poi的API和代码,可能是些参数设置问题,也可能是本身的bug,具体的你再研究一下吧。
11 楼 wfshjkg 2013-04-23  
你好,我想问下... 为什么好像这个转化在Android上面容易出现文字缺失...(主要是某些比较长的段落会出现)... GBK,UTF-8,UNICODE编码我都试过了... ...
10 楼 wlxtaking 2013-01-26  
你好,我想问下,为什么我的一直都是第一张图片显示不出来啊?
9 楼 yanhonglei 2013-01-08  
哈哈,多谢,非常好用
8 楼 chembo 2012-12-06  
zhima 写道
你好,我改动utf-8编码后,运行此类Word2Html,正常转换;但是在其他类中调用此类Word2Html时 出现文字乱码 ,不知什么原因?很纳闷 请教大侠

是的,当初我用utf-8时貌似也有乱码才改gb2312或gbk的,没细入研究。你有时间研究一下吧,估计有些地方编码hardcode了
7 楼 zhima 2012-12-05  
你好,我改动utf-8编码后,运行此类Word2Html,正常转换;但是在其他类中调用此类Word2Html时 出现文字乱码 ,不知什么原因?很纳闷 请教大侠
6 楼 qingyezhu 2012-10-24  
若是图片为emf格式的,转化后的html中的图片不显示?这怎么解决呀?谢谢
5 楼 qingyezhu 2012-09-21  
我将只有表格的Word转换了一下,结果,网页中的表格显示有问题,有的行被挤了。有的列由于文字太长,挤了相邻的列。怎么解决这个问题呀?
4 楼 qingyezhu 2012-09-12  
请问,我下了POI3.8SRC,可是有些文件并未有,我想问,怎么在 POI主页看他的SRC呀,谢谢
3 楼 qingyezhu 2012-09-12  
我找了一下,图片存储的地方不能是该项目下的“image/+图片名”,我该为某个盘下,就可以了!
2 楼 chembo 2012-09-11  
qingyezhu 写道
我将代码弄了一下,结果在 pic.writeImageContent(new FileOutputStream("D:/test/" 
105.                            + pic.suggestFullFileName())); 
,这一句上报错,FileNotFound,
请问怎么解决呀?谢谢!


找不到文件 啊
建个test文件夹在d下,再丢个1.doc进去。

相关推荐

    poi将word转换成html、样式 表格 图片处理

    在本案例中,我们关注的是如何使用Apache POI将Word文档转换为HTML格式,并且保持原有的样式、表格和图片。下面我们将详细介绍这个过程中的关键知识点。 1. **Apache POI简介** Apache POI 提供了Java API,使得...

    poi完美word转html

    1. 表格:POI能识别Word文档中的表格,并将其转换为HTML中的table元素。 2. 图片:POI能识别Word文档中的图片,并将其转换为HTML中的img元素,同时保存图片文件并引用其路径。 3. 文本样式:虽然不能完全保留所有...

    利用POI将word转换成html实现在线阅读

    这包括添加适当的CSS样式来保持原始Word文档的布局和格式。 5. **在线阅读**:将生成的HTML文件上传至服务器,并在网页中通过iframe或者直接链接的方式展示,用户即可在线预览和阅读。 在实际操作中,需要注意以下...

    poi word转html例子及jar包

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Word(.doc、.docx)、Excel(.xls、.xlsx)和PowerPoint(.ppt、.pptx)。在Java环境中,Apache POI 提供了API,使得开发者能够读取、创建...

    基于poi导出word以及图片

    在本教程中,我们将重点讨论如何利用Apache POI 3.13版本来导出Word文档,并结合图片操作。 首先,Apache POI提供了一个叫做HWPF(Horrible Word Processor Format)的API来处理老版的Word(.doc)文件,而XWPF...

    word内容提取 word转html-POI wps doc docx转html

    1. **Word内容提取**:Apache POI提供了API来访问Word文档中的文本、样式、图像和表格。通过HWPFFactory和XWPFDocument类,我们可以分别处理旧版的.doc文件和较新的.docx文件。使用这些类,可以逐段、逐行地遍历文档...

    poi3.8 doc,excel转html

    标题提到的"poi3.8 doc,excel转html",指的是使用Apache POI库的3.8版本进行Microsoft Office文档(尤其是DOC和XLS)到HTML的转换。Apache POI是一个流行的Java库,专门用于读取、写入和操作Microsoft Office格式的...

    poi解析word文档 及 试卷数学公式导入wmf图片转成png图片

    在本场景中,可能涉及读取Word文档中的文本、样式、表格、图像等元素,以便进行进一步的处理或分析。 “试卷数学公式导入wmf图片转成png图片”这部分涉及到两个技术点。首先,试卷通常包含数学公式,这些公式可能以...

    cms.rar_cms word_poi word html_poi word转HTML_poi转Word

    "cms.rar_cms word_poi word html_poi word转HTML_poi转Word"这一标题提及的CMS可能是一个特定的项目或实现,它涉及到使用Apache POI库处理Microsoft Word文档,并将这些文档转换为HTML格式以供网页展示。Apache POI...

    java+poi实现word转换html兼容03和07

    `extractTextFromOldDoc`方法处理旧版Word文档,但在这里留空,因为实际的实现可能更复杂,需要处理样式、页眉、页脚、图片等。`extractTextFromNewDoc`方法则处理.docx文件,提取其中的段落和表格,并将其转换为...

    java+poi+word转pdf的简单demo,执行转换main方法不会抛异常

    在实践中,你可能还需要处理更复杂的格式和样式转换,例如图片、页眉和页脚、页边距等。这可能需要进一步研究iText库的API来实现。确保在处理过程中正确处理异常,以保证程序的健壮性。 提供的"word2pdfdemo"压缩包...

    poi操作word表格

    Apache POI是一个开源项目,主要用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在本主题中,我们将聚焦于如何使用Apache POI来操作Word文档中的表格...

    Java Poi流根据Word模板插入相应的文本、表格和图片,并生成新的Word报告。

    在这个场景中,我们关注的是如何利用Java POI库通过Word模板生成包含特定文本、表格和图片的报告。 首先,我们需要了解Java POI中的XWPFDocument类,它是用来处理.docx文件的。XWPFDocument可以读取、修改和创建...

    poi操作word转html必须jar

    Apache POI 是一个开源项目,专门用于处理微软的Office...总之,Apache POI是一个强大的工具,它使Java开发者能够方便地处理Office文档,包括将Word转换为HTML,但可能需要一些额外的代码来处理特定的格式和样式问题。

    JAVA利用poi完成word转pdf,内容包括两个现成工具类和使用到的所有jar包

    1. 使用Apache POI的XWPF API读取Word文档,获取文档的文本、段落、表格等元素。 2. 创建一个Docx4j的WordprocessingMLPackage对象,加载POI解析出的Word文档内容。 3. 调用Docx4j的`WordprocessingMLPackage.toPDF...

    java word转html poi3.9

    在POI 3.9版本中,我们可以使用HWPF(Horrible Word Processor Format)来处理旧版的Word(.doc)文件,而XWPF则用于处理较新的Word 2007及以后版本的.docx文件。 转换Word到HTML的基本步骤如下: 1. **导入依赖**...

    java poi把word文档转化为html,支持doc。

    POI库提供API来访问Word文档的各个部分,如段落、表格、列表、图片等。 4. **使用步骤**: - 加载Word文档:使用POI的`HWPFDocument`类(针对.doc文件)或`XWPFDocument`类(针对.docx文件)打开Word文档。 - 遍历...

    java使用poi操作.doc word模板替换,循环插入表格

    本篇文章将深入探讨如何利用POI库在Word文档中进行模板替换以及循环插入表格的操作。 首先,我们需要理解Apache POI的工作原理。POI提供了HWPFOI(用于处理老版的.doc文件)和XWPF(用于处理新版的.docx文件)两个...

Global site tag (gtag.js) - Google Analytics