doc转html后添加style和导航
public static void main(String[] args) throws Exception {docxToHtml();
}
public static void docxToHtml() throws Exception {//D:\zpdtolly\工作总结文档\zpd使用文档\v4\用户使用手册\客户端使用手册String sourceFileName = "C:\\Users\\luoguoqing\\Desktop\\20230920客户端v使用手册.doc";String targetFileName = "C:\\Users\\luoguoqing\\Desktop\\20230920客户端v使用手册.html";//下载图片位置String imagePathStr = "D:/doc2htmltest/image/";String style = "body{background:#f0eeee;text-align:center;}\n" +"div{width:85%;margin:0 auto;background:#ecdfdf;text-align:left;}\n" +"* {\n" +" padding: 0;\n" +" margin: 0;\n" +" box-sizing: border-box;\n" +"}\n" +".aside {\n" +" width: 240px;\n" +" height: 100%;\n" +" position: fixed;\n" +" left: -240px;\n" +" top: 0px;\n" +" border-right: 1px solid #ccc;\n" +" -ms-transition: all 0.3s linear;\n" +" -moz-transition: all 0.3s linear;\n" +" -webkit-transition: all 0.3s linear;\n" +" transition: all 0.3s linear;\n" +"}\n" +".aside:hover{\n" +" left: 0;\n" +"}\n" +".aside:hover + .article{\n" +" padding-left: 260px;\n" +"}\n" +".nav-list{\n" +" width: 100%;\n" +" height: 100%;\n" +" overflow: auto;\n" +" padding: 10px 0px;\n" +"}\n" +".nav-mark{\n" +" position: absolute;\n" +" right: -20px;\n" +" top: 50%;\n" +" z-index: 2;\n" +" height: 80px;\n" +" width: 20px;\n" +" margin-top: -40px;\n" +" background-color: #44a7ff;\n" +" box-shadow: 2px 0px 3px #eee;\n" +" border-radius: 0 40px 40px 0;\n" +" font-size: 12px;\n" +" text-align: center;\n" +" line-height: 24px;\n" +" padding-top: 16px;\n" +" color: #fff;\n" +"}\n" +".nav {\n" +" display: block;\n" +" width: 100%;\n" +" height: 32px;\n" +" line-height: 32px;\n" +" font-size: 16px;\n" +" color: #333;\n" +" text-decoration: none;\n" +" padding-left: 20px;\n" +"}\n" +".nav:hover {\n" +" background-color: #44a7ff;\n" +" color: #fff;\n" +"}\n" +".grade2 {\n" +" text-indent: 1em;\n" +"}\n" +".grade3 {\n" +" text-indent: 2em;\n" +"}";HWPFDocument wordDocument = new HWPFDocument(new FileInputStream(sourceFileName));WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());wordToHtmlConverter.setPicturesManager((a, b, suggestedName, d, e) -> {// convertFileToBase64()out.println(suggestedName);//返回图片路径//return "image" + File.separator + suggestedName;//返回图片base64值return "data:image/"+b.getExtension().toLowerCase()+";base64,"+new String(Base64.encodeBase64(a));});wordToHtmlConverter.processDocument(wordDocument);List<Picture> pics = wordDocument.getPicturesTable().getAllPictures();out.println(pics);Iterator var8 = pics.iterator();//转换图片imgToBase64 imgToBase64pl=new imgToBase64();int i=1;while(var8.hasNext()) {Picture pic = (Picture)var8.next();//下载图片// pic.writeImageContent(new FileOutputStream(imagePathStr + pic.suggestFullFileName()));//System.out.println("第"+i++ +":"+imgToBase64pl.convertFileToBase64(imagePathStr + pic.suggestFullFileName()));}Document htmlDocument = wordToHtmlConverter.getDocument();//生成空文档DOMSource domSource = new DOMSource(htmlDocument);//获取路径下htmlStreamResult streamResult = new StreamResult(new File(targetFileName));//设置html文件规范TransformerFactory tf = TransformerFactory.newInstance();Transformer serializer = tf.newTransformer();serializer.setOutputProperty("encoding", "utf-8");serializer.setOutputProperty("indent", "yes");serializer.setOutputProperty("method", "html");serializer.transform(domSource, streamResult);out.println("doc转换完毕!"+streamResult.getSystemId());addStyleToHtml a=new addStyleToHtml();a.addstyle(targetFileName,style);}
package com.lly.demo.util;import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Node;
import org.jsoup.select.Elements;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class addStyleToHtml {public void addstyle(String targetFileName, String style) throws IOException {File htmlFile = new File(targetFileName);Document doc = Jsoup.parse(htmlFile, "UTF-8");Element head = doc.head();head.append("<style>" + style + "</style>");Element spanA = doc.select("span:contains(TOC)").first(); // 获取第一个 span 元素Element spanB = doc.select("span:contains(第1章 前言)").last().parent().parent(); // 获取最后一个 span 元素// 创建新的<aside>元素Element aside = doc.createElement("aside");aside.addClass("aside");// 创建包含目录的<div>元素Element navList = doc.createElement("div");navList.addClass("nav-list");// 创建导航元素Element navMark = doc.createElement("div");navMark.addClass("nav-mark").text("导航");Element currentElement = spanA;while (currentElement != null) {System.out.println(currentElement.outerHtml());if (spanA != null && spanB != null) {navList.appendChild(currentElement);// 将<div>元素和导航元素添加到<aside>元素中aside.appendChild(navList);aside.appendChild(navMark);// 在目录后面的元素之前插入<aside>元素spanB.before(aside);} else {System.out.println("空的");}if (currentElement == spanB) {break;}currentElement = currentElement.nextElementSibling();}Element span = doc.select("span:contains(TOC)").first();//span.remove(); // 删除span元素// 输出更新后的HTML//System.out.println(doc.html());FileWriter writer = new FileWriter(htmlFile);writer.write(doc.outerHtml());writer.close();}}
相关文章:
doc转html后添加style和导航
public static void main(String[] args) throws Exception {docxToHtml(); } public static void docxToHtml() throws Exception {//D:\zpdtolly\工作总结文档\zpd使用文档\v4\用户使用手册\客户端使用手册String sourceFileName "C:\\Users\\luoguoqing\\Desktop\\202…...
Python中跨越多个文件使用全局变量
嗨喽,大家好呀~这里是爱看美女的茜茜呐 这个琐碎的指南是关于在 Python 中跨多个文件使用全局变量。 但是在进入主题之前,让我们简单地看看全局变量和它们在多个文件中的用途。 👇 👇 👇 更多精彩机密、教程ÿ…...
设计模式 - 解释器模式
目录 一. 前言 二. 实现 三. 优缺点 一. 前言 解释器模式(Interpreter Pattern)指给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子,属于行为型设计模式。是…...
javascript禁止鼠标右键和复制功能
要禁止鼠标右键和复制功能,可以编写如下的封装函数: function preventDefaultCopy(event) {// 禁止右键 菜单和复制event.preventDefault();event.stopPropagation();return false; }// 在需要禁止复制的元素上添加该事件监听器 element.addEventListen…...
WebDAV之π-Disk派盘 + 咕咚云图
咕咚云图是一款强大的图床传图软件,它能够让您高效地对手机中的各种图片进行github传输,多个平台快速编码上传,支持远程删除不需要的图片,传输过程安全稳定,让您可以很好的进行玩机或者其他操作。 可帮你上传手机图片到图床上,并生成 markdown 链接,支持七牛云、阿里云…...
C语言-数组
C 语言支持数组数据结构,数组是一个由若干相同类型变量组成的有序集合。 这里的有序是指数组元素在内存中的存放方式是有序的,即所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素,最高的地址对应最后一个元素。 在 C 语言中&am…...
Linux UWB Stack实现——MCPS调度接口(API)
在上一篇文章中,介绍了MCPS调度接口涉及的相关数据结构实现MCPS调度接口(数据结构),本文继续介绍调度相关的方法的实现。 1. 域处理 1.1 域注册与注销 注册/注销一个mcps802154_region,分别在模块加载(mo…...
el-tree中插入图标并且带提示信息
<template><div class"left"><!-- default-expanded-keys 默认展开 --><!-- expand-on-click-node 只有点击箭头才会展开树 --><el-tree :data"list" :props"defaultProps" node-click"handleNodeClick" :…...
竞赛选题 深度学习 YOLO 实现车牌识别算法
文章目录 0 前言1 课题介绍2 算法简介2.1网络架构 3 数据准备4 模型训练5 实现效果5.1 图片识别效果5.2视频识别效果 6 部分关键代码7 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于yolov5的深度学习车牌识别系统实现 该项目较…...
Direct3D网格(一)
创建网格 我们可以用D3DXCreateMeshFVF函数创建一个"空"网格对象 ,空网格对象是指我们指定了网格的面片总数和顶点总数,然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存,之后即可手工填入网格数据。 HRESULT WINA…...
C语言打印菱形
一、运行结果图 二、源代码 # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值;int line 0;int i 0;int j 0;//获取变量值;scanf("%d", &line);//循环打印上半部分;for (i 0; i <…...
ElasticSearch搜索引擎:数据的写入流程
一、ElasticSearch 写数据的总体流程: (1)ES 客户端选择一个节点 node 发送请求过去,这个节点就是协调节点 coordinating node (2)协调节点对 document 进行路由,通过 hash 算法计算出数据应该…...
python3 调用 另外一个python脚本
3种python调用其他脚本脚本的方法_python 调用python脚本_linjingyg的博客-CSDN博客 Python之系统交互(调用系统命令)subprocess_subprocess.getoutput(cmd) 参数格式不正确-CSDN博客 subprocess.call()只能返回状态码。subprocess.getoutput(cmd)只能输出命令结果。 str(py…...
【13】c++设计模式——>简单工厂模式
工厂模式的定义 c中的工厂模式是一种创建型设计模式,它提供一种创建对象的接口,但具体创建的对象类型可以在运行时决定,这样可以将对象的创建与使用代码分离,提高代码的灵活性和可维护性。 在c中实现工厂模式,通常会定…...
系统架构设计:2 论软件设计方法及其应用
目录 一 软件设计方法 1结构化设计 2信息工程 3面向对象设计 4原型设计...
基于Winform的UDP通信
1、文件结构 2、UdpReceiver.cs using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks;namespace UDPTest.Udp {public class UdpStateEventArgs : EventArgs…...
掌握 BERT:自然语言处理 (NLP) 从初级到高级的综合指南(1)
简介 BERT(来自 Transformers 的双向编码器表示)是 Google 开发的革命性自然语言处理 (NLP) 模型。它改变了语言理解任务的格局,使机器能够理解语言的上下文和细微差别。在本文[1]中,我们将带您踏上从 BERT 基础知识到高级概念的旅…...
Linux Ftrace介绍
文章目录 一、简介二、内核函数调用跟踪参考链接: 一、简介 Ftrace 是 Linux 官方提供的跟踪工具,在 Linux 2.6.27 版本中引入。Ftrace 可在不引入任何前端工具的情况下使用,让其可以适合在任何系统环境中使用。 Ftrace 可用来快速排查以下相…...
Go语言进阶------>init()函数
Init()包初始化 执行优先级 Init()函数的执行优先级比main()函数的执行优先级要高,也就是说程序会优先执行Init()函数之后再执行main()函数. 代码如下 package mainimport "fmt"func init() {fmt.Println("执行了Init()函数") }func main() {fmt.Println…...
云计算:常用微服务框架
目录 一、理论 1.Java微服务框架 2.Go微服务框架 3.Python微服务框架 4.Node.js微服务框架 5..Net微服务框架 一、理论 1.Java微服务框架 Spring Cloud:最早最成熟,Java开源微服务框架方案 SpringBoot:全新框架,设计目的是…...
告别繁琐组态:用SVG + JavaScript 5分钟为你的工业设备创建可交互HMI组件
工业设备HMI组件开发革命:5分钟用SVGJavaScript打造智能交互界面 在工业自动化领域,人机界面(HMI)是连接设备与操作者的关键纽带。传统HMI开发往往陷入两个极端:要么使用笨重的组态软件进行繁琐配置,要么投入大量时间开发定制化界…...
告别全屏地球!用Cesium.js在地图上只显示一个县(附完整代码)
用Cesium.js实现区域聚焦:打造专属行政区划三维地图 在WebGIS开发中,我们经常遇到需要将三维地球的显示范围限定在特定行政区划内的需求。无论是为了突出展示某个城市的发展规划,还是为了制作县域级别的专题地图,区域聚焦技术都能…...
终极指南:Ghost补丁管理系统与第三方依赖维护最佳实践
终极指南:Ghost补丁管理系统与第三方依赖维护最佳实践 【免费下载链接】Ghost Independent technology for modern publishing, memberships, subscriptions and newsletters. 项目地址: https://gitcode.com/GitHub_Trending/gh/Ghost Ghost作为一款强大的现…...
DuClaw智能体:DuClaw接入钉钉
本文主要介绍如何为DuClaw配置钉钉消息渠道,配置后即可通过对应的钉钉机器人与DuClaw进行对话。 钉钉侧配置 步骤一:创建钉钉应用。 前往钉钉开发者平台(需有管理员权限),点击“创建应用”。 在左侧目录中选择“钉钉…...
手把手教你用TTL线刷救活咪咕MGV3200盒子(GK6323V100C芯片/安卓9系统)
咪咕MGV3200盒子救砖全指南:从TTL焊接到底层刷机实战 当你的咪咕MGV3200电视盒子因为一次鲁莽的卡刷操作变成"砖头",指示灯不再亮起,屏幕一片漆黑时,那种绝望感只有经历过的人才能体会。不同于普通刷机教程,…...
哔咔漫画下载器:3步打造个人离线漫画库,告别网络限制烦恼
哔咔漫画下载器:3步打造个人离线漫画库,告别网络限制烦恼 【免费下载链接】picacomic-downloader 哔咔漫画 picacomic pica漫画 bika漫画 PicACG 多线程下载器,带图形界面 带收藏夹,已打包exe 下载速度飞快 项目地址: https://g…...
实在Agent物流对账全流程自动化方案与落地案例:2026智享财务新标杆
在2026年5月这个生成式AI深度重构实体经济的关键周期,全球物流行业已全面跨入“智能体(Agent)常态化运营”时代。根据《2026年全球供应链数字化趋势报告》显示,超过65%的大型物流企业已部署了具备自主决策能力的智能体来替代传统的…...
基于PyPortal与CircuitPython的桌面空气质量监测站DIY指南
1. 项目概述:打造你的桌面级空气质量监测站如果你和我一样,对身边的空气质量有点“强迫症”,总想知道窗外空气到底怎么样,但又不想总去翻手机App,那么这个项目就是为你量身定做的。我们将利用一块名为PyPortal的开发板…...
Nacos生产级集群部署实战:从架构设计到高可用验证
1. 项目概述:为什么Nacos集群部署是微服务架构的“定海神针” 在微服务架构的实践中,服务注册与发现、配置管理是两块基石。Nacos作为Spring Cloud Alibaba生态的核心组件,集这两大功能于一身,其重要性不言而喻。当你的业务从单机…...
为OpenClaw配置Taotoken作为其AI模型供应商
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为OpenClaw配置Taotoken作为其AI模型供应商 基础教程类,指导使用OpenClaw这类Agent工具的开发者,如何将其后…...
