POI word文件转html
package com.feiruo.officeConvert;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.List; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException; import org.apache.poi.hwpf.usermodel.Picture; public abstract class OfficeConvert { // 图片的存放地址
private String imgPath = null;
// 文件存放的地址
private String parentPath = null;
// 文件内容
private String fileContent = null;
private String encode = "UTF-8"; /**
* 将指定的doc文档进行格式转换
*
* @param docPath
* *.doc文档地址
*
* @throws FileNotFoundException
* @throws IOException
* @throws ParserConfigurationException
* @throws TransformerException
*/
public abstract void convert(String docPath) throws FileNotFoundException,
IOException, ParserConfigurationException, TransformerException; /**
* 将文件内容写入到磁盘
*
* @param filepath
* 保存转换文件的地址
*/
public void writeFile(String filepath) {
FileOutputStream fos = null;
BufferedWriter bw = null;
File f=new File(this.parentPath); if(!f.exists()){
f.mkdirs();
}
try {
File file = new File(filepath);
fos = new FileOutputStream(file);
bw = new BufferedWriter(new OutputStreamWriter(fos, encode));
bw.write(fileContent);
} 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 String checkSetPath(String path){
path=path.trim();
if(path.lastIndexOf("/")<path.length()-1) path+="/";
if(path.indexOf("\"")>0)path=path.replaceAll("\"", "");
if(path.indexOf(">")>0)path=path.replaceAll(">", "&gt;");
if(path.indexOf("<")>0)path=path.replaceAll("<", "&lt;");
//TODO if(path.indexOf("*")>0)path=path.replaceAll("/*", "");
return path;
}
public String getEncode() {
return encode;
} public void setEncode(String encode) {
this.encode = encode;
} /**
* 获取图片存放地址
*
* @return <strong>java.lang.String</strong>
*/
public String getImgPath() {
return imgPath;
} /**
* 设置图片的存放地址文件夹路径
*
* @param imgPath
* 设置图片的存放文件夹名称
*/
public void setImgPath(String imgPath) {
this.imgPath = checkSetPath(imgPath);
} /**
* 获取存放文件的目录地址
*
* @return <strong>java.lang.String</strong>
*/
public String getParentPath() {
return parentPath;
} /**
* 设置文件存放的路径
*
* @param parentPath
* 文件地址
*/
public void setParentPath(String parentPath) {
this.parentPath = checkSetPath(parentPath);
} /**
* 获取文件内容
*
* @return <strong>java.lang.String</strong>
*/
public String getFileContent() {
return fileContent;
}
public void setFileContent(String content){
this.fileContent=content;
}
}
package com.feiruo.officeConvert;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
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.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.PicturesManager;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.usermodel.PictureType;
import org.w3c.dom.Document; /**
* 将*.doc文档转换为*.html文件格式
*
* @author Jdk.feiruo.
* @since JDK 1.7 POI 3.8
* @version 1.0
*/
public class DocToHtml extends OfficeConvert implements IOfficeConvert {
private List<Picture> pics = null; /**
* @param parentPath
* html文件存放地址
* @param imageppth
* html图片存放地址
* @param encoding
* 设置html的编码格式
*/
public DocToHtml(String parentPath, String imageppth, String encoding) {
setParentPath(checkSetPath(parentPath));
setImgPath(checkSetPath(imageppth));
this.setEncode(encoding);
} public DocToHtml() { } /**
* 将*doc文档转为*html文件
*
* @param docPath
* *doc文档的所在地址
*
* @throws FileNotFoundException
* @throws IOException
* @throws ParserConfigurationException
* @throws TransformerException
*/
public void convert(String docPath) throws FileNotFoundException,
IOException, ParserConfigurationException, TransformerException {
HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(
docPath));
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 suggestedName;
}
});
wordToHtmlConverter.processDocument(wordDocument);
pics = wordDocument.getPicturesTable().getAllPictures(); 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, this.getEncode());
serializer.setOutputProperty(OutputKeys.INDENT, "yes");
serializer.setOutputProperty(OutputKeys.METHOD, "html");
serializer.transform(domSource, streamResult); out.close(); String htmlContent = new String(out.toByteArray());
if(htmlContent.indexOf("<img src=\"") > 0){
htmlContent=htmlContent.replaceAll("<img src=\"", "<img src=\"" + getImgPath());
}
setFileContent(htmlContent);
} @Override
public void writeWithName(String fileName) {
// 先保存文档中的图片
if (pics != null) {
File imgfile = new File(this.getParentPath() + this.getImgPath());
// 如果当前文件夹不存在,则创建新文件夹
if (!imgfile.exists())
imgfile.mkdirs();
for (int i = 0; i < pics.size(); i++) {
Picture pic = (Picture) pics.get(i);
try {
pic.writeImageContent(new FileOutputStream(imgfile + "//"
+ pic.suggestFullFileName()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 保存html源码文件
this.writeFile(getParentPath()+fileName+".html");
}
}
package com.feiruo.Test;

import java.io.FileNotFoundException;
import java.io.IOException; import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException; import com.yinhai.officeConvert.DocToHtml; public class Test{
public static void main(String[] args) {
Test t=new Test();
}
public Test(){
DocToHtml dth=new DocToHtml("C://test", "f", "UTF-8");
try {
dth.convert("D://test//test.doc");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
dth.writeWithName("feiruo");
}
}
package com.feiruo.officeConvert;

public interface IOfficeConvert {
/**
* 将文件写入到磁盘
* @param fileName 要写入文件的名称
*/
public void writeWithName(String fileName);
}

POI实现word文档转html文件的更多相关文章

  1. POI生成WORD文档

    h2:first-child, body>h1:first-child, body>h1:first-child+h2, body>h3:first-child, body>h ...

  2. POI生成word文档完整案例及讲解

    一,网上的API讲解 其实POI的生成Word文档的规则就是先把获取到的数据转成xml格式的数据,然后通过xpath解析表单式的应用取值,判断等等,然后在把取到的值放到word文档中,最后在输出来. ...

  3. 用java语言通过POI实现word文档的按标题提取

    最近有一个项目需要将一个word文档中的数据提取到数据库中.就去网上查了好多资料,最靠谱的就是用poi实现word文档的提取. 喝水不忘挖井人,我查了好多资料就这个最靠谱,我的这篇博客主要是借鉴htt ...

  4. POI 生成 word 文档 简单版(包括文字、表格、图片、字体样式设置等)

      POI 生成word 文档 一般有两种方法: ① word模板 生成word 文档 : ② 写代码直接生成 word 文档: 我这里演示的是第二种方法,即写代码生成 word文档,不多说废话,直接 ...

  5. Poi之Word文档结构介绍

    1.poi之word文档结构介绍之正文段落 一个文档包含多个段落,一个段落包含多个Runs,一个Runs包含多个Run,Run是文档的最小单元 获取所有段落:List<XWPFParagraph ...

  6. 微信公众号怎么添加附件?比如word文档,pdf文件等

    微信公众号怎么添加附件?比如word文档,pdf文件等   我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众 ...

  7. Java POI 解析word文档

    实现步骤: 1.poi实现word转html 2.模型化解析html 3.html转Map数组 Map数组(数组的操作处理不做说明) 1.导jar包. 2.代码实现 package com.web.o ...

  8. java word文档 转 html文件

    一.简介 一般word文件后缀有doc.docx两种.docx是office word 2007以及以后版本文档的扩展名:doc是office word 2003文档保存的扩展名.对于这两种格式的wo ...

  9. poi 读取word文档

    1.导入jar包 官网下载地址: https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-3.17-20170915.zip 最开始 ...

随机推荐

  1. Android手机平板两不误,使用Fragment实现兼容手机和平板的程序

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744943 记得我之前参与开发过一个华为的项目,要求程序可以支持好几种终端设备,其 ...

  2. Linux下编译LibCURL

    编译环境 操作系统: Red Hat Enterprise Linux Server release 5.4 64-bit 编译工具: gcc (GCC) 4.1.2 20080704 (Red Ha ...

  3. label标签的用法

    label 标签for属性 <h1>显式指定通过for(for的值就是对应radio的id的值)</h1> <form> <label for="m ...

  4. memwatch

    一.简介 memwatch可以跟踪程序中的内存泄漏和错误,能检测双重释放(double-free).错误释放(erroneous free).没有释放的内存(unfreed memory).溢出(Ov ...

  5. UDP程序设计

        UDP是不可靠的连接,广泛应用于各种聊天工具     使用UDP发送的信息,对方不一定会接收到.所有的信息使用数据报的形式发送出去,这就要求客户端要始终等待服务器发送的信息才能进行接收.在Ja ...

  6. HTML 表单验证和事件

    1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...

  7. webView--总结

    Anaroid WebView API详解--http://blog.csdn.net/zhangcanyan/article/details/51344090;Android5.1系统WebView ...

  8. JAVA break终止循环,与continue进入下一次循环

    一.break终止循环 在循环中,遇到break;将会跳出循环,继续往下执行代码 public class Test{ public static void main(String[] args){ ...

  9. PHP框架 Laravel Eloquent ORM 批量插入数据 && 批量更新目前没有

    foreach ($products as $v=>$a) { $count[] = array('product_name' => $a['name'], 'product_weight ...

  10. jQuery实现的鼠标滑过切换图片代码实例

    jQuery实现的鼠标滑过切换图片代码实例:有时候网页需要这样的简单效果,那就是当鼠标滑过默认图片的时候,能够实现图片的切换,可能在实际应用中,往往没有这么简单,不过大家可以自行扩展一下,下面简单介绍 ...