当前位置: 首页 > news >正文

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中跨越多个文件使用全局变量

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 这个琐碎的指南是关于在 Python 中跨多个文件使用全局变量。 但是在进入主题之前&#xff0c;让我们简单地看看全局变量和它们在多个文件中的用途。 &#x1f447; &#x1f447; &#x1f447; 更多精彩机密、教程&#xff…...

设计模式 - 解释器模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 解释器模式&#xff08;Interpreter Pattern&#xff09;指给定一门语言&#xff0c;定义它的文法的一种表示&#xff0c;并定义一个解释器&#xff0c;该解释器使用该表示来解释语言中的句子&#xff0c;属于行为型设计模式。是…...

javascript禁止鼠标右键和复制功能

要禁止鼠标右键和复制功能&#xff0c;可以编写如下的封装函数&#xff1a; function preventDefaultCopy(event) {// 禁止右键 菜单和复制event.preventDefault();event.stopPropagation();return false; }// 在需要禁止复制的元素上添加该事件监听器 element.addEventListen…...

WebDAV之π-Disk派盘 + 咕咚云图

咕咚云图是一款强大的图床传图软件,它能够让您高效地对手机中的各种图片进行github传输,多个平台快速编码上传,支持远程删除不需要的图片,传输过程安全稳定,让您可以很好的进行玩机或者其他操作。 可帮你上传手机图片到图床上,并生成 markdown 链接,支持七牛云、阿里云…...

C语言-数组

C 语言支持数组数据结构&#xff0c;数组是一个由若干相同类型变量组成的有序集合。 这里的有序是指数组元素在内存中的存放方式是有序的&#xff0c;即所有的数组都是由连续的内存位置组成。最低的地址对应第一个元素&#xff0c;最高的地址对应最后一个元素。 在 C 语言中&am…...

Linux UWB Stack实现——MCPS调度接口(API)

在上一篇文章中&#xff0c;介绍了MCPS调度接口涉及的相关数据结构实现MCPS调度接口&#xff08;数据结构&#xff09;&#xff0c;本文继续介绍调度相关的方法的实现。 1. 域处理 1.1 域注册与注销 注册/注销一个mcps802154_region&#xff0c;分别在模块加载&#xff08;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 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 该项目较…...

Direct3D网格(一)

创建网格 我们可以用D3DXCreateMeshFVF函数创建一个"空"网格对象 &#xff0c;空网格对象是指我们指定了网格的面片总数和顶点总数&#xff0c;然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存&#xff0c;之后即可手工填入网格数据。 HRESULT WINA…...

C语言打印菱形

一、运行结果图 二、源代码 # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int line 0;int i 0;int j 0;//获取变量值&#xff1b;scanf("%d", &line);//循环打印上半部分&#xff1b;for (i 0; i <…...

ElasticSearch搜索引擎:数据的写入流程

一、ElasticSearch 写数据的总体流程&#xff1a; &#xff08;1&#xff09;ES 客户端选择一个节点 node 发送请求过去&#xff0c;这个节点就是协调节点 coordinating node &#xff08;2&#xff09;协调节点对 document 进行路由&#xff0c;通过 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中的工厂模式是一种创建型设计模式&#xff0c;它提供一种创建对象的接口&#xff0c;但具体创建的对象类型可以在运行时决定&#xff0c;这样可以将对象的创建与使用代码分离&#xff0c;提高代码的灵活性和可维护性。 在c中实现工厂模式&#xff0c;通常会定…...

系统架构设计: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&#xff08;来自 Transformers 的双向编码器表示&#xff09;是 Google 开发的革命性自然语言处理 (NLP) 模型。它改变了语言理解任务的格局&#xff0c;使机器能够理解语言的上下文和细微差别。在本文[1]中&#xff0c;我们将带您踏上从 BERT 基础知识到高级概念的旅…...

Linux Ftrace介绍

文章目录 一、简介二、内核函数调用跟踪参考链接&#xff1a; 一、简介 Ftrace 是 Linux 官方提供的跟踪工具&#xff0c;在 Linux 2.6.27 版本中引入。Ftrace 可在不引入任何前端工具的情况下使用&#xff0c;让其可以适合在任何系统环境中使用。 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&#xff1a;最早最成熟&#xff0c;Java开源微服务框架方案 SpringBoot&#xff1a;全新框架&#xff0c;设计目的是…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)

当我们网关配置好了&#xff0c;DNS也配置好了&#xff0c;最后在虚拟机里还是无法访问百度的网址。 第一种情况&#xff1a; 我们先考虑一下&#xff0c;网关的IP是否和虚拟机编辑器里的IP一样不&#xff0c;如果不一样需要更改一下&#xff0c;因为我们访问百度需要从物理机…...