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

一、word转html

依赖:

<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>

代码:

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);// 图片转base64options.setImageManager(new Base64EmbedImgManager());// 转换htm1XHTMLConverter.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

依赖:

        <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>

 代码:

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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89434.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于51单片机和16X16点阵屏、矩阵按键的小游戏《俄罗斯方块》

目录系列文章目录前言一、效果展示二、原理分析三、各模块代码1、16X16点阵屏&#xff08;MAX7219驱动&#xff09;2、矩阵按键3、定时器0四、主函数总结系列文章目录 前言 《俄罗斯方块》&#xff0c;一款经典的、怀旧的小游戏&#xff0c;单片机入门必写程序。 有两个版本&…

Stable Diffusion Windows本地部署超详细教程(手动+自动+整合包三种方式)

Stable Diffusion Windows 本地部署超详细教程 (手动 自动 整合包三种方式) 一、引言 我们可以通过官方网站 Stability AI&#xff0c;以及 Dream Studio、Replicate、Playground AI 、Baseten 等网站在线体验 Stable Diffusion 的巨大威力。相比于集成在网络平台的 SD 或者…

sqli-labs靶场通关笔记:第29-31关 HTTP参数污染

第29关 HTTP参数污染本关设置了web应用防火墙&#xff08;WAF&#xff09;&#xff0c;利用白名单保护机制来检测和拦截恶意请求。看本关源代码。<?php //including the Mysql connect parameters. include("../sql-connections/sql-connect.php"); //disable er…

Vuex 基本概念

参照官网整理总结vuex语法。 计划日期&#xff1a; Vuex基础部分&#xff1a;2022年2月20日——2022年2月28日 Vuex源码相关实践&#xff1a;待定 Vuex拓展&#xff1a;待定 写完后&#xff0c;会发到仓库地址&#xff1a;待定 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模…

深入理解Linux文件操作:stdin/stdout/stderr与C语言文件函数全解析

目录 一、stdin、stdout 和 stderr 详解 二、文件打开方式 三、C语言文件操作函数详解 1、文件操作概述 2、文件操作函数分类表 1. 文件打开与关闭 2. 字符读写函数 3. 字符串读写函数 4. 格式化读写函数 5. 二进制读写函数 6. 文件定位函数 7. 文件状态与错误检测…

【自用】JavaSE--集合框架(一)--Collection集合体系

概述之前学的ArrayList就是集合的一种&#xff0c;是一种容器&#xff0c;可以往里面存东西&#xff0c;大小可变Collection集合体系Collection的常用方法以后Collection体系的集合都可以用下图的方法注意toArray方法的数组类型是Object&#xff0c;这样就可以接收任意类型的数…

电脑视频常用几种接口

传输信号类型 DP&#xff08;DisplayPort&#xff09;主要用于传输数字视频和音频信号&#xff0c;支持高分辨率和高刷新率。HDMI&#xff08;High-Definition Multimedia Interface&#xff09;同样传输数字音视频信号&#xff0c;但更偏向消费电子领域&#xff0c;如电视、游…

CherryStudio+playwright-mcp-server实现AI自动化

目录 1、CherryStudio安装与配置 1.1什么是CherryStudio 1.2安装 1.3配置 2、playwright-mcp-server的安装与配置 3、执行测试与结果 1、CherryStudio安装与配置 1.1什么是CherryStudio Cherry Studio 是一款集多模型对话、知识库管理、AI 绘画、翻译等功能于一体的全能 …

深入了解 find_element 方法:Web 自动化定位元素的核心​

在 Web 自动化测试领域&#xff0c;元素定位是实现各类操作的基础&#xff0c;而find_element方法正是 Selenium 等自动化工具中用于定位单个元素的核心方法。掌握它的使用技巧&#xff0c;能让我们更精准、高效地操控网页元素&#xff0c;为自动化测试脚本的编写打下坚实基础。…

从零开始的云计算生活——第三十三天,关山阻隔,ELK日志分析

目录 一.故事背景 二、Elasticsearch 全面概述 1、核心定位 2、核心特性 a. 分布式架构 b. 高性能原理 c. 数据模型创新 3、核心技术组件 4、核心应用场景 a. 企业级搜索 b. 可观测性 c. 安全分析&#xff08;SIEM&#xff09; 5、版本演进关键特性 6、核心优势…

深入理解 Spring Boot Starter 的生成机制

在使用 Spring Boot 进行开发时&#xff0c;我们常常会引入诸如 spring-boot-starter-web、spring-boot-starter-data-jpa 等依赖&#xff0c;从而快速开启相关功能模块。但你是否思考过这些 Starter 是如何构建的&#xff1f;如果我们要开发自己的 Starter&#xff0c;又该如何…

阿里云-通义灵码:隐私保护机制—为数据安全筑起铜墙铁壁

免责声明&#xff1a;此篇文章所有内容皆是本人实验&#xff0c;并非广告推广&#xff0c;并非抄袭&#xff0c;该系列继续~每日一句不要感叹自己的平凡&#xff0c;即便是最暗的星星&#xff0c;相与无边的黑暗已是耀眼。一.引言在这个数据如同空气般渗透到生活每个角落的时代…

最小生成树算法详解

最小生成树算法详解一、最小生成树基础概念1.1 生成树与最小生成树1.2 核心性质1.3 应用场景二、Prim 算法&#xff1a;从顶点出发的“生长式”构建2.1 算法原理2.2 Java 代码实现&#xff08;邻接矩阵版&#xff09;2.3 复杂度分析三、Kruskal 算法&#xff1a;按边权排序的“…

YOLO 目标检测的改进方法

YOLO目标检测的改进方法可以从模型架构、训练策略、损失函数等多个方面入手&#xff0c;以下是一些常见的改进方法方向及参考文献&#xff1a; 模型架构改进 骨干网络替换&#xff1a;使用更轻量或更强大的网络替换原始骨干网络。轻量级网络如MobileNetV3、ShuffleNetV2等适合…

C++ 程序 AddressSanitizer:DEADLYSIGNAL

GCC && G 操作系统&#xff1a;Ubuntu 22.04 现象&#xff1a;C程序编译时开启ASAN&#xff0c;运行时有几率会出现大量AddressSanitizer:DEADLYSIGNAL 参考文章&#xff1a; https://stackoverflow.com/questions/77894856/possible-bug-in-gcc-sanitizers https://st…

【强化学习】实际部署

环境 Gymnasium 作为环境接口&#xff0c; PyBullet作为物理仿真平台&#xff0c; Stable Baselines3 用于训练算法。 测试框架搭建 以pybullet自带的Cart-pole-v1为例 安装依赖&#xff1a;确保安装了 Gymnasium 和 SB3 ( pip install gymnasium stable-baselines3 ).初始化环…

集训Demo4

创建数据库创建项目基本和视频中的一样我给User添加了vip这个属性&#xff0c;想实现两个令牌通过访问的案例&#xff0c;但遇到了问题一个令牌是密码加用户名的map数组这是它的获取、验证逻辑获取验证另一个令牌是Int vip这是自己写的另一套密钥和方法获取但在验证这里有问题头…

深度优化:Java 慢查询排查与性能调优实战

文章目录&#x1f680; 深度优化&#xff1a;Java 慢查询排查与性能调优实战&#x1f6a8;1. 事故全景&#xff1a;从告警到定位&#x1f575;️‍♂️1.1 事故时间线&#x1f4ca; 1.2 关键指标异常&#x1f6e0;️ 1.3 排查工具链&#x1f50d; 2. 深度剖析&#xff1a;MySQL…

TF-IDF(Term Frequency - Inverse Document Frequency)

TF-IDF&#xff08;Term Frequency - Inverse Document Frequency&#xff09;是一种在信息检索与文本挖掘中非常常用的关键词提取方法&#xff0c;用于衡量一个词在文档集合中的重要性。它的核心思想是&#xff1a;如果一个词在某个文档中出现得频繁&#xff0c;同时在其他文档…

Chrome紧急更新,谷歌修复正遭活跃利用的关键零日漏洞

谷歌已针对桌面版Chrome发布重要稳定渠道更新&#xff08;版本138.0.7204.157/.158&#xff09;&#xff0c;修复了六个安全漏洞&#xff0c;其中包括一个已被实际利用的漏洞。该更新正在向Windows、Mac和Linux平台推送&#xff0c;预计未来数日或数周内将通过自动更新完成部署…