Java处理doc类型的Word文档转换成html(按顺序保留格式+图片)

这篇具有很好参考价值的文章主要介绍了Java处理doc类型的Word文档转换成html(按顺序保留格式+图片)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最新有个新需求,就是doc文档转换html内容倒不是很难,给大家分享一下,总体思路就是按doc转html的思路来走,唯一缺点是不会自动转换图片,图片是要手动转成base64,默认是有html、body、head、meta等等标签,我这里都用正则处理掉了。

需要注意的是:

.docx 格式的 Word 文档是一种基于 XML 和 ZIP 压缩技术的文件格式,其文件结构相对固定并且较为简单,可以通过一些开源的 JavaScript 库进行解析和转换(推荐使用mammoth.js在前端即可完成Word转换html的操作,但是目前的mammoth版本只支持docx,后续可能会支持解析doc的功能)。
·
.doc 格式的 Word 文档是一种相对来说版本比较老一点并且是二进制格式的文件,文件结构比较复杂,具有较高的私有性和细节,需要专用微软 Office 应用程序才能完整读取,所以一般如果要对doc文档进行转换内容时,最好是使用java处理,比较容易一些。

具体引用jar包如下,一共6个:
1、poi-4.1.2.jar
2、poi-ooxml-4.1.2.jar
3、poi-scratchpad-4.1.2.jar

poi的版本必须一致,不然会有问题,一般情况下如果用到poi互相依赖,最好是要做到poi版本一致,不仅针对这个转换html中,其他地方也是一样。

4、fr.opensagres.poi.xwpf.converter.xhtml-2.0.2.jar
5、commons-math3-3.6.1.jar
6、commons-collections4-4.4.jar

jar包下载如果本地没有可以去中央仓库下载,直接搜索就行,比较方便,有pom也有jar

java doc 转html,Word文档处理,word,html,前端

总体流程和思路:

1、创建 File 对象,将要转换的 Word 文档的路径传入文件对象中。

2、使用 FileInputStream 对象读取 Word 文档文件。

3、构建 HWPFDocument 对象,该对象是 Apache POI 库中的类,用于读取 .doc 格式的 Word 文档。

4、构建 WordToHtmlConverter 对象,并将 DocumentBuilderFactory、DocumentBuilder 和 Document 对象传递给构造函数。

5、解析 Word 文档并将解析结果存储到 Document 对象中。

6、创建 Transformer 对象,用于将 Document 对象转换为 HTML 格式,并设置输出格式、字符编码等。

7、使用 DOMSource 对象将 Document 对象中的内容提供给 Transformer 对象。

8、创建 ByteArrayOutputStream 对象,并将结果存储到该流中。

9、使用 StreamResult 指定输出流,将转换后的结果写入到 ByteArrayOutputStream 中。

10、将 ByteArrayOutputStream 对象转换为字符串并输出。

需要注意的是,此示例中使用的是 HWPFDocument 类,而不是 XWPFDocument 类
这意味着该示例只能处理 .doc 格式的 Word 文档。如果需要处理 .docx 格式的 Word 文档,则需要使用 XWPFDocument 类。

java代码如下:

import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Picture;
import org.apache.poi.hwpf.converter.WordToHtmlConverter;
import org.w3c.dom.Document;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
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;

public class DocToHtml {

    /**
     * 传递文件路径
     * @param filePath 文件路径
     * @return 返回html标签
     */
    public static String inputDocPath(String filePath) {
        File file = new File(filePath);
        try {
            FileInputStream inputStream = new FileInputStream(file);
            HWPFDocument hwpfDocument = new HWPFDocument(inputStream);

            // 提取图像数据并转换为 BASE64 编码字符串
            List<Picture> pictures = hwpfDocument.getPicturesTable().getAllPictures();
            List<String> base64ImageStrings = new ArrayList<>();
            for (Picture picture : pictures) {
                byte[] imageData = picture.getContent();
                String base64ImageString = "data:image/png;base64," + Base64.getEncoder().encodeToString(imageData);
                base64ImageStrings.add(base64ImageString);
            }

            // 转换为 HTML 文本
            WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
            wordToHtmlConverter.processDocument(hwpfDocument);
            Document document = wordToHtmlConverter.getDocument();
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty(OutputKeys.METHOD, "html");
            transformer.transform(new DOMSource(document), new StreamResult(outputStream));
            String html = outputStream.toString("UTF-8");

            //查找所有图片
            List<String> matches = findMatchesToPic(html);

            //查找无用标签并替换成空,用自己写入的标签
            html = findMatchesToLable(html);
            // 在 HTML 中插入图像
            // 替换图片链接为 base64 编码
            for (int i = 0; i < base64ImageStrings.size(); i++) {
                html = html.replace(matches.get(i), "<img src=\"" + base64ImageStrings.get(i) + "\">");
            }

            return html;

        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    //查找所有图片集合
    private static List<String> findMatchesToPic(String input) {
        List<String> matches = new ArrayList<>();
        Pattern pattern = Pattern.compile("<!--.*?-->");
        Matcher matcher = pattern.matcher(input);
        while (matcher.find()) {
            String match = matcher.group();
            matches.add(match);
        }
        return matches;
    }

    //查找没用的标签,并替换
    private static String findMatchesToLable(String html) {
        Pattern pattern = Pattern.compile("<META.*?>", Pattern.DOTALL);
        Matcher matcher = pattern.matcher(html);
        if (matcher.find()) {
            html = html.replace(matcher.group(), "");
        }

        Pattern patternMeta = Pattern.compile("<meta.*?>", Pattern.DOTALL);
        Matcher matcherMeta = patternMeta.matcher(html);
        if (matcherMeta.find()) {
            html = html.replace(matcherMeta.group(), "");
        }

        Pattern patternBody = Pattern.compile("<body.*?>", Pattern.DOTALL);
        Matcher matcherBody = patternBody.matcher(html);
        if (matcherBody.find()) {
            html = html.replace(matcherBody.group(), "");
        }

        Pattern patternStyle = Pattern.compile("<style.*?</style>", Pattern.DOTALL);
        Matcher matcherStyle = patternStyle.matcher(html);
        if (matcherStyle.find()) {
            html = html.replace(matcherStyle.group(), "");
        }

        html = html.replace("<html>", "");
        html = html.replace("<head>", "");
        html = html.replace("</head>", "");
        html = html.replace("</body>", "");
        html = html.replace("</html>", "");

        return html;
    }


}

将Word文档转换为HTML有许多方法,其中基于Apache POI和HSSF的方式就是其中一种。

优点:

1、准确度高:使用java的Apache POI和HSSF,可以更准确地提取一份 Microsoft Word
·
2、文档的内容。这种方式的特点是能够完美保留 Word 文档的大部分格式,包括样式、标题、字体、表格、图像等等。
·
3、可定制性强:将 Word 文档转换为 HTML 可以实现高度的可定制化,特别是针对文字内容的处理。使用此方法,开发人员可以从文档中提取仅所需的部分,并将其转换为 HTML。
·
4、应用场景广泛:可以将 Word 文档转换为 HTML 以便于在线发布、在线查看或轻松共享。

缺点:

1、格式兼容性问题:某些 Word 版本中的内容无法精确保留,因为 Apache POIC 的一些功能可能在某些版本的 Word 中不支持。
·
2、转换时间长:对于大型文件来说,这种转换可能需要花费更长的时间以完成其处理。较大的文档可能会导致性能问题,并且需要更多的计算资源来完成其转换。

总之,将 Word 文档转换为 HTML 有其一些优点和缺点。 这种转换方法是一种可行的方式,但在处理一些格式或较大的文档方面可能存在局限性或成本问题。如果对文档的格式和内容要求较高,建议考虑使用高级的第三方工具或者云服务来处理。文章来源地址https://www.toymoban.com/news/detail-768387.html

到了这里,关于Java处理doc类型的Word文档转换成html(按顺序保留格式+图片)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java【代码 16】将word、excel文件转换为pdf格式和将pdf文档转换为image格式工具类分享(Gitee源码)aspose转换中文乱码问题处理

    感谢小伙伴儿的分享: ● 不羁 ● 郭中天 整合调整后的工具类Gitee地址:https://gitee.com/yuanzhengme/java_application_aspose_demo ● WordToPdfUtil用于将word文档转换为pdf格式的工具类 ● ExcelToPdfUtil用于将excel文档转换为pdf格式的工具类 ● PdfToImageUtil用于将pdf文档转换为image格式的工具类

    2024年01月24日
    浏览(85)
  • Java基础篇_1.2——保留关键字、基本数据类型、基本数据类型之间的转换

    目录 一、保留 二、Java的基本数据类型 三、引用数据类型  四、基本数据类型间的转换  隐含强制类型转换 数值之间的合法转换 Java该语言是用 Unicode 字符集编写的。 Java是预先定义的具有特别意义的标识符,也被称为Java保留字,Java不能用作变量名、方

    2024年02月14日
    浏览(54)
  • Word控件Spire.Doc 【列表】教程:在 Word 文档中插入列表

    Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转换和打印Word/PDF/Excel等格式文件处

    2024年02月06日
    浏览(53)
  • 如何将doc格式文档转换为txt的文档

    今天的办公环境中,我们常常会遇到需要将doc格式的文档转换为txt格式的文档的情况。这种情况下,我们需要一些便捷的工具来帮助我们解决这个问题。下面,我将向大家介绍三种将doc格式的文档转换为txt格式的文档的方法。 第一种方法是使用在线文档转换工具、APP。目前,

    2024年02月06日
    浏览(72)
  • Java实现Word文档转PDF,PDF转Word,PDF转Excel,PDF转换工具

    java实现word文档转PDF,PDF转word 解决只能转换4页问题 解决每页头部存在水印问题 引入依赖 破解的jar包 链接: https://pan.baidu.com/s/1MO8OBuf4FQ937R9KDtofPQ 提取码: 4tsn 源码路径:https://download.csdn.net/download/weixin_43992507/88215577 像流读取文件这些要关闭释放,不然异常报错文件的读取不会

    2024年02月13日
    浏览(55)
  • Springboot + Vue 上传Word、PDF文档并保留内部格式

    因为业务需求,上传Word文件需要编辑,但如果使用Blob方式,在数据库里存文件,就会造成格式消失。所以修改思路:上传文件到服务器本地,保证数据存储的完整性。 就是常规的传文件 这此采用的思路就是 把文件读取后,写入相对路径,考虑到文件业务误传,服务器源文

    2024年02月17日
    浏览(257)
  • Word控件Spire.Doc 【超链接】教程(3):在C#中查找word文档中的超链接

    Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转换和打印Word/PDF/Excel等格式文件处

    2024年02月04日
    浏览(48)
  • Vue3——html-doc-ja(html导出为word的js库)

    官方地址  html-doc-js - npm 在 exportWord 方法执行时,将页面中mjx-assistive-mml 节点清除即可,如下图所示

    2024年04月14日
    浏览(41)
  • Word 2019打开.doc文档后图片和公式不显示(呈现为白框)的解决办法

    当使用WPS对文档编辑后,在其中添加了公式或图片后,在Word2019打开的时候,有时会遇到公式和图片无法正常显示,本文介绍其解决办法。 1.打开 WORD 2019,点击菜单中的“文件”; 2.点击“选项” 3.点击“高级” 4.找到“显示图片框”,去掉前面的对勾“√” 整个过程如图

    2024年02月13日
    浏览(57)
  • PDF 书签制作和 Word 文档转 PDF 生成书签保留目录超链接的方法

    根据 PDF 文档创建性质来制作书签 由可编辑文档创建 由不可编辑的图片创建 一、Word 文档目录转 PDF 生成书签 Word自带转换为PDF同时生成目录书签(office 2010 以后均支持) 打开 Word 文档,选择【文件】–【另存为 Adobe PDF】 –【选项】 –【将Word 标题转换为书签(H)】 在已安

    2024年02月04日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包