Java实现word、pdf转html保留格式

一、word转html

依赖:

XML 复制代码
<properties>
    <poi.version>5.2.3</poi.version>
    <xhtml.version>2.0.4</xhtml.version>
</properties>

<!--word转html-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>${poi.version}</version>
</dependency>
<!--word转html-->
<dependency>
    <groupId>fr.opensagres.xdocreport</groupId>
    <artifactId>fr.opensagres.poi.xwpf.converter.xhtml</artifactId>
    <version>${xhtml.version}</version>
</dependency>
<!--处理office文档表格相关 2007+版-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>${poi.version}</version>
</dependency>
<!--处理office文档表格相关 2003版-->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>${poi.version}</version>
</dependency>

代码:

java 复制代码
import fr.opensagres.poi.xwpf.converter.xhtml.Base64EmbedImgManager;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLConverter;
import fr.opensagres.poi.xwpf.converter.xhtml.XHTMLOptions;
import org.apache.commons.codec.binary.Base64;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.net.URL;

public class WordUtil {

    public static String wordToHtml(String fileUrl,String fileSuffix) throws Exception {
        URL url = new URL(fileUrl);
        try (InputStream inputStream = url.openStream()) {
            if(fileSuffix.equals(".docx") || fileSuffix.equals(".DOCX")){
                return word2007ToHtml(inputStream);
            } else if (fileSuffix.equals(".doc") || fileSuffix.equals(".DOC")) {
                return word2003ToHtml(inputStream);
            }else{
                throw new RuntimeException("错误的文件后缀");
            }
        } catch (RuntimeException e) {
            throw new RuntimeException(e.getMessage());
        }
    }

    /**
     * word2007转换成html
     * 对于docx,可以用下面这种方式:
     * @throws Exception
     */
    public static String word2007ToHtml(InputStream inputStream) {
        try (ByteArrayOutputStream htmlStream = new ByteArrayOutputStream();
             XWPFDocument docxDocument = new XWPFDocument(inputStream)) {
            XHTMLOptions options = XHTMLOptions.create();
            // 是否忽略未使用的样式
            options.setIgnoreStylesIfUnused(false);
            // 设置片段模式,<div>标签包裹
            options.setFragment(true);
            // 图片转base64
            options.setImageManager(new Base64EmbedImgManager());
            // 转换htm1
            XHTMLConverter.getInstance().convert(docxDocument, htmlStream, options);
            return htmlStream.toString();
        } catch (Exception e) {
            System.out.println("Word转Html过程出现异常!");
            throw new RuntimeException(e.getMessage());
        }
    }
    /**
     * word2003转换成html
     * 对于doc,可以用下面这种方式:
     * @throws Exception
     */
    public static String word2003ToHtml(InputStream inputStream ) throws Exception {
        try (StringWriter writer = new StringWriter();
             HWPFDocument document = new HWPFDocument(inputStream)) {
            WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
            //将图片转成base64的格式
            wordToHtmlConverter.setPicturesManager((bytes, pictureType, s, v, v1) -> "data:image/png;base64," + Base64.encodeBase64String(bytes));
            wordToHtmlConverter.processDocument(document);
            org.w3c.dom.Document htmlDocument = wordToHtmlConverter.getDocument();
            DOMSource domSource = new DOMSource(htmlDocument);
            TransformerFactory factory = TransformerFactory.newInstance();
            Transformer serializer = factory.newTransformer();
            serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");
            serializer.setOutputProperty(OutputKeys.INDENT, "yes");
            serializer.setOutputProperty(OutputKeys.METHOD, "html");
            serializer.transform(domSource, new StreamResult(writer));
            return writer.toString();
        } catch (Exception e) {
            System.out.println("Word转Html过程出现异常!");
            throw new RuntimeException(e.getMessage());
        }
    }

}

来源博客:Java实现word转html_java word转html-CSDN博客

二、pdf转html

依赖:

XML 复制代码
        <dependency>
            <groupId>net.sf.cssbox</groupId>
            <artifactId>pdf2dom</artifactId>
        </dependency>

        <dependency>
            <groupId>net.mabboud.fontverter</groupId>
            <artifactId>FontVerter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.reflections</groupId>
            <artifactId>reflections</artifactId>
        </dependency>
        <!--pdf转文本-->
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
        </dependency>

代码:

java 复制代码
import org.apache.pdfbox.pdmodel.PDDocument;
import org.fit.pdfdom.PDFDomTree;

import java.io.*;
import java.net.URL;

public class PDFUtil {
    public static String pdfToHtml(String fileUrl) throws IOException {
        URL url = new URL(fileUrl);
        try (InputStream inputStream = url.openStream()){
            return pdfToHtml(inputStream);
        }catch (Exception e){
            throw new IOException(e.getMessage());
        }
    }
    public static String pdfToHtml(InputStream inputStream) throws IOException {
        String outFilePath = "mypdf.html";
        String pdfContent = "";
        PDDocument document = PDDocument.load(inputStream);
        Writer writer = new PrintWriter(outFilePath, "UTF-8");
        new PDFDomTree().writeText(document, writer);
        writer.close();
        document.close();
        // 获取html内容
        try (BufferedReader reader = new BufferedReader(new FileReader(outFilePath))) {
            StringBuilder htmlContent = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                htmlContent.append(line).append("\n"); // 追加每一行内容,并添加换行符
            }
            pdfContent = String.valueOf(htmlContent);
            return pdfContent;
        } catch (IOException e) {
            e.printStackTrace();
            System.err.println("读取 HTML 文件时出错。");
        }
        return null;
    }
}

来源博客:使用Java实现PDF到HTML的转换_java pdf转html-CSDN博客

相关推荐
shushangyun_3 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..3 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
学渣超3 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构
掉鱼的猫4 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·llm·aigc
带刺的坐椅4 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·ai·llm·agent·solon-ai
c238564 小时前
互斥锁高频面试题全解:从基础概念到底层实现,一文通关
java·c++·面试·职场和发展
error:(4 小时前
【系统与实战双精通】VS Code 调试 ROS2 Python 节点与 Launch 系统指南
android·java·python
Tian_Hang5 小时前
Eclipse Ditto 的权限策略
java·服务器·前端·网络·ide·ubuntu·eclipse
小蓝波5 小时前
docker 的命令
java·docker·容器
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题 第155题】【06_Spring篇】第15题:Spring 如何解决循环依赖问题?
java·spring·循环依赖·三级缓存·aop代理