poi

使用xdocreport实现word转html

2022-04-06  本文已影响0人  任未然

一. 概述

现在企业系统很多都有在线编辑的需求, 很多都是采用富文本方案解决(因为免费且简单), 但企业很多文件都是word文档编写的, 让他们重新在富文本写一遍加上格式调整,这是非常大的工作量. 这时候就会提出word文档导入了, 因为富文本是html格式的, 所以word导入就要转html. 查阅了网上很多开源的解决方案, 但基本都没有能把格式转换的很完美的, 最后选了xdocreport, XDocReport是开源框架中转换格式比较好的, 建议word文档格式用.docx

二. 使用

2.1 引入依赖

        <dependency>
            <groupId>fr.opensagres.xdocreport</groupId>
            <artifactId>fr.opensagres.poi.xwpf.converter.xhtml</artifactId>
            <version>2.0.2</version>
        </dependency>

注意: fr.opensagres.poi.xwpf.converter.xhtml已经包含org.apache.poi, 如果转换报错,可能是你单独引入的poi包版本过低, 请升级到4.0.1以上

2.2 docx转html

import fr.opensagres.poi.xwpf.converter.core.ImageManager;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.junit.Test;

import java.io.*;

public class WordToHtml {


    /**
     * 将Word2007+转成Html
     * 
     * @throws Exception
     */
    @Test
    public void word2007ToHtml() throws Exception {
        File file = new File("~/123.docx");
        /* 判断是否为docx文件 */
        if (file.getName().endsWith(".docx") || file.getName().endsWith(".DOCX")) {
            // 1) 加载docx文档生成 XWPFDocument 对象
            XWPFDocument document = new XWPFDocument(new FileInputStream(file));
            // 2) 设置装换参数
            XHTMLOptions xhtmlOptions = XHTMLOptions.create();
            
            // 设置图片管理器,把图片上传到服务器
            xhtmlOptions.setImageManager(new ImageManager(new File(""),""){
                // 图片访问路径
                private String imageUrl;

                @Override
                public void extract(String imagePath, byte[] imageData) throws IOException {
                    // 上传文件,设置图片url.  imageData:图片数据
                    imageUrl = "http://hello_world/demo.png";
                }

                @Override
                public String resolve(String uri) {
                    // 返回图片访问路径
                    return imageUrl;
                }
            });

            // 转html输出
            OutputStream out = new FileOutputStream("~/123.html");
            XHTMLConverter.getInstance().convert(document, out, xhtmlOptions);
        } else {
            System.out.println("Enter only as MS Office 2007+ files");
        }
        System.out.println("转换结束");
    }
}
上一篇下一篇

猜你喜欢

热点阅读