Wiki文档转换为Word技术
一、技术背景与目标
二、代码逻辑与技术要点解析
(一)WikiToHtml:生成单个HTML文件
WikiToHtml类的核心功能是将分散的Wiki HTML文件整合为一个单一的HTML文件,同时生成导航结构以便在Word中浏览。
1. 清理与初始化
clearn方法通过检查文件是否存在并删除它们来实现这一功能:
<span style="color:#060607"><span style="background-color:#ffffff"><span style="background-color:#fafafa"><span style="color:#383a42"><code class="language-java"><span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">void</span> <span style="color:#4078f2">clearn</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span> <span style="color:#383a42">{</span><span style="color:#b76b01">File</span> filehhc <span style="color:#4078f2">=</span> <span style="color:#a626a4">new</span> <span style="color:#b76b01">File</span><span style="color:#383a42">(</span>hhcurl<span style="color:#383a42">)</span><span style="color:#383a42">;</span><span style="color:#a626a4">if</span> <span style="color:#383a42">(</span>filehhc<span style="color:#383a42">.</span><span style="color:#4078f2">exists</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span><span style="color:#383a42">)</span> <span style="color:#383a42">{</span>filehhc<span style="color:#383a42">.</span><span style="color:#4078f2">delete</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span><span style="color:#383a42">;</span><span style="color:#383a42">}</span><em><span style="color:#a0a1a7">// 其他文件的清理逻辑...</span></em>
<span style="color:#383a42">}</span></code></span></span></span></span> 2. 文件遍历与路径收集
getFile方法递归遍历指定目录,收集所有HTML文件的路径,并将这些路径存储到一个StringBuffer中:
<span style="color:#060607"><span style="background-color:#ffffff"><span style="background-color:#fafafa"><span style="color:#383a42"><code class="language-java"><span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">void</span> <span style="color:#4078f2">getFile</span><span style="color:#383a42">(</span><span style="color:#b76b01">File</span> file<span style="color:#383a42">,</span> <span style="color:#b76b01">StringBuffer</span> str<span style="color:#383a42">)</span> <span style="color:#383a42">{</span><span style="color:#b76b01">File</span><span style="color:#383a42">[</span><span style="color:#383a42">]</span> fileitem <span style="color:#4078f2">=</span> file<span style="color:#383a42">.</span><span style="color:#4078f2">listFiles</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span><span style="color:#383a42">;</span><span style="color:#a626a4">for</span> <span style="color:#383a42">(</span><span style="color:#a626a4">int</span> i <span style="color:#4078f2">=</span> <span style="color:#b76b01">0</span><span style="color:#383a42">;</span> i <span style="color:#4078f2"><</span> fileitem<span style="color:#383a42">.</span>length<span style="color:#383a42">;</span> i<span style="color:#4078f2">++</span><span style="color:#383a42">)</span> <span style="color:#383a42">{</span><span style="color:#a626a4">if</span> <span style="color:#383a42">(</span>fileitem<span style="color:#383a42">[</span>i<span style="color:#383a42">]</span><span style="color:#383a42">.</span><span style="color:#4078f2">isDirectory</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span><span style="color:#383a42">)</span> <span style="color:#383a42">{</span><span style="color:#4078f2">getFile</span><span style="color:#383a42">(</span>fileitem<span style="color:#383a42">[</span>i<span style="color:#383a42">]</span><span style="color:#383a42">,</span> str<span style="color:#383a42">)</span><span style="color:#383a42">;</span><span style="color:#383a42">}</span> <span style="color:#a626a4">else</span> <span style="color:#383a42">{</span><span style="color:#a626a4">try</span> <span style="color:#383a42">{</span>str<span style="color:#383a42">.</span><span style="color:#4078f2">append</span><span style="color:#383a42">(</span>fileitem<span style="color:#383a42">[</span>i<span style="color:#383a42">]</span><span style="color:#383a42">.</span><span style="color:#4078f2">getCanonicalPath</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span> <span style="color:#4078f2">+</span> <span style="color:#50a14f">"\r\n"</span><span style="color:#383a42">)</span><span style="color:#383a42">;</span><span style="color:#383a42">}</span> <span style="color:#a626a4">catch</span> <span style="color:#383a42">(</span><span style="color:#b76b01">IOException</span> e<span style="color:#383a42">)</span> <span style="color:#383a42">{</span>e<span style="color:#383a42">.</span><span style="color:#4078f2">printStackTrace</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span><span style="color:#383a42">;</span><span style="color:#a626a4">if</span> <span style="color:#383a42">(</span>log <span style="color:#4078f2">!=</span> <span style="color:#a626a4">null</span><span style="color:#383a42">)</span> <span style="color:#383a42">{</span>log<span style="color:#383a42">.</span><span style="color:#4078f2">addLog</span><span style="color:#383a42">(</span>e<span style="color:#383a42">.</span><span style="color:#4078f2">getMessage</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span><span style="color:#383a42">)</span><span style="color:#383a42">;</span><span style="color:#383a42">}</span><span style="color:#383a42">}</span><span style="color:#383a42">}</span><span style="color:#383a42">}</span>
<span style="color:#383a42">}</span></code></span></span></span></span> 3. HTML内容整合
modifyHtml方法负责处理每个HTML文件,移除不需要的元素(如页眉、页脚、附件等),并调整样式以适应Word的显示需求:
<span style="color:#060607"><span style="background-color:#ffffff"><span style="background-color:#fafafa"><span style="color:#383a42"><code class="language-java"><span style="color:#a626a4">public</span> <span style="color:#a626a4">static</span> <span style="color:#a626a4">void</span> <span style="color:#4078f2">modifyHtml</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span> <span style="color:#383a42">{</span><span style="color:#b76b01">File</span> homeFile <span style="color:#4078f2">=</span> <span style="color:#a626a4">new</span> <span style="color:#b76b01">File</span><span style="color:#383a42">(</span>home<span style="color:#383a42">)</span><span style="color:#383a42">;</span><span style="color:#b76b01">File</span><span style="color:#383a42">[</span><span style="color:#383a42">]</span> htmlFile <span style="color:#4078f2">=</span> homeFile<span style="color:#383a42">.</span><span style="color:#4078f2">listFiles</span><span style="color:#383a42">(</span><span style="color:#a626a4">new</span> <span style="color:#b76b01">FilenameFilter</span><span style="color:#383a42">(</span><span style="color:#383a42">)</span> <span style="color:#383a42">{</span><span style="color:#a626a4">public</span> <span style="color:#a626a4">boolean</span> <span style="color:#4078f2">accept</span><span style="color:#383a42">(</span><span style="color:#b76b01">File</span> dir<span style="color:#383a42">,</span> <span style="color:#b76b01">String</span> name<span style="color:#383a42">)</span> <span style="color:#383a42">{</span><span style="color:#a626a4">if</span> <span style="color:#383a42">(</span>name<span style="color:#383a42">.</span><span style="color:#4078f2">lastIndexOf</span><span style="color:#383a42">(</span><span style="color:#50a14f">".html"</span><span style="color:#383a42">)</span> <span style="color:#4078f2">!=</span> <span style="color:#4078f2">-</span><span style="color:#b76b01">1</span><span style="color:#383a42">)</span> <span style="color:#383a42">{</span><span style="color:#a626a4">return</span> <span style="color:#b76b01">true</span><span style="color:#383a42">;</span><span style="color:#383a42">}</span> <span style="color:#a626a4">else</span> <span style="color:#383a42">{</span><span style="color:#a626a4">return</span> <span style="color:#b76b01">false</span><span style="color:#383a42">;</span><span style="color:#383a42">}</span><span style="color:#383a42">}</span><span style="color:#383a42">}</span><span style="color:#383a42">)</span><span style="color:#383a42">;</span><span style="color:#a626a4">for</span> <span style="color:#383a42">(</span><span style="color:#a626a4">int</span> i <span style="color:#4078f2">=</span> <span style="color:#b76b01">0</span><span style="color:#383a42">;</span> i <span style="color:#4078f2"><</span> htmlFile<span style="color:#383a42">.</span>length<span style="color:#383a42">;</span> i<span style="color:#4078f2">++</span><span style="color:#383a42">)</span> <span style="color:#383a42">{</span><span style="color:#b76b01">File</span> html <span style="color:#4078f2">=</span> htmlFile<span style="color:#383a42">[</span>i<span style="color:#383a42">]</span><span style="color:#383a42">;</span><span style="color:#b76b01">Document</span> doc <span style="color:#4078f2">=</span> <span style="color:#b76b01">Jsoup</span><span style="color:#383a42">.</span><span style="color:#4078f2">parse</span><span style="color:#383a42">(</span>html<span style="color:#383a42">,</span> <span style="color:#50a14f">"UTF-8"</span><span style="color:#383a42">,</span> <span style="color:#50a14f相关文章:
Wiki文档转换为Word技术
一、技术背景与目标 Wiki系统导出的文档通常以HTML格式存在,且内容分散在多个文件中,每个页面对应一个HTML文件。然而,Microsoft Word(Word)在处理HTML文件时,仅支持单个HTML文件的导入。因此,为了将Wiki导出的内容转换为Word可识别的格式,必须将分散的HTML文件整合为一…...
1.【线性代数】——方程组的几何解释
一 方程组的几何解释 概述举例举例一1. matrix2.row picture3.column picture 概述 三种表示方法 matrixrow picturecolumn picture 举例 举例一 { 2 x − y 0 − x 2 y 3 \begin{cases} 2x - y 0 \\ -x 2y 3 \end{cases} {2x−y0−x2y3 1. matrix [ 2 − 1 − 1 …...
力扣1448. 统计二叉树中好节点的数目
Problem: 1448. 统计二叉树中好节点的数目 文章目录 题目描述思路复杂度Code 题目描述 思路 对二叉树进行先序遍历,边遍历边对比并更新当前路径上的最大值pathMax,若当pathMax小于等于当前节点值,则好节点的数目加一 复杂度 时间复杂度: O (…...
【C#零基础从入门到精通】(二)——C#注释和命名法详解
【C#零基础从入门到精通】(二)——C#注释和命名法详解 C# 中的注释 定义 在 C# 里,注释是一种特殊的代码文本,它不会被编译器执行,主要用于对代码进行解释、说明,帮助开发者更好地理解代码的功能、用途、实现思路以及注意事项等,提升代码的可读性和可维护性。 注释类型…...
SQLServer的创建,表创建,主键,约束,模糊查询
设置 注意: 设置完成之后 重新启动 创建数据库 注意: 这个目标路径必须要有该文件名的文件夹 -- 指向 master 数据库,告诉它我们要创建一个新的数据库操作了 use master go-- 创建数据库 create database StudentManageDB on primary (-- 以下四个组成部分缺一不可…...
DeepSeek深度思考:客户端(Android/iOS)架构设计指南
目标读者:中高级开发者、架构师 适用场景:大型复杂应用开发、跨团队协作、长期维护迭代 一、架构设计核心原则 1.模块化(Modularization) 横向拆分:按功能边界划分(如登录、支付、消息模块)纵向…...
亚远景-精通ASPICE:专业咨询助力汽车软件开发高效合规
在竞争日益激烈的汽车行业,软件开发已成为决定成败的关键因素。ASPICE(汽车软件过程改进和能力确定) 作为行业公认的软件开发框架,为汽车制造商和供应商提供了实现高效、合规开发的路线图。 然而,ASPICE 的实施并非易…...
OpenCV 相机标定流程指南
OpenCV 相机标定流程指南 前置准备标定流程结果输出与验证建议源代码 OpenCV 相机标定流程指南 https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html https://learnopencv.com/camera-calibration-using-opencv/ 前置准备 制作标定板:生成高精度棋…...
项目场景拷打
补偿事务解决超卖 通过补偿事务避免超卖问题,可以通过以下几种方式实现: 1. 使用数据库事务与锁机制 事务管理:将库存扣减和订单生成操作放在同一个数据库事务中,确保操作的原子性。如果事务中任何一个步骤失败,则整…...
Vue2生命周期面试题
在 Vue 2 中,this.$el 和 this.$data 都是 Vue 实例的属性,代表不同的内容。 1. this.$el this.$el 是 Vue 实例的根 DOM 元素,它指向 Vue 实例所控制的根节点元素。在 Vue 中,el 是在 Vue 实例创建时,指定的根元素&…...
【每日一题 | 2025】2.3 ~ 2.9
个人主页:GUIQU. 归属专栏:每日一题 文章目录 1. 【2.3】P8784 [蓝桥杯 2022 省 B] 积木画2. 【2.4】P8656 [蓝桥杯 2017 国 B] 对局匹配3. 【2.5】[ABC365D] AtCoder Janken 34. 【2.6】P8703 [蓝桥杯 2019 国 B] 最优包含5. 【2.7】P8624 [蓝桥杯 2015…...
使用OpenGL自己定义一个button,响应鼠标消息:掠过、点击、拖动
button需要有一个外观 外观 大小跟随窗口改变,采用纯色背景、纯色文字 文字 大小跟随窗口改变 button需要获得鼠标消息 掠过 鼠标掠过时 button 出现阴影,鼠标掠过后 button 阴影消失 点击 点击后进入相应事件 拖动 改变图标所在位置 需要在g…...
C# 上位机--变量
C# 上位机--变量 在 C# 上位机开发领域,变量是构建程序逻辑的基础元素之一。它就像是一个容器,用于存储各种类型的数据,从简单的数值到复杂的对象。正确理解和使用变量,对于开发出高效、稳定且易于维护的上位机程序至关重要。本文…...
网络安全检查漏洞内容回复 网络安全的漏洞
的核心目标是保障业务系统的可持续性和数据的安全性,而这两点的主要威胁来自于蠕虫的暴发、黑客的攻击、拒绝服务攻击、木马。蠕虫、黑客攻击问题都和漏洞紧密联系在一起,一旦有重大安全漏洞出现,整个互联网就会面临一次重大挑战。虽然传统木…...
【GIS】本地部署nominatim地理编码服务
参考:https://www.cnblogs.com/nonkicat/p/17222677.html docker 部署命令 4.5 版本 docker 用不了,需要用 4.0 版本 docker run -it -e PBF_PATH/data/你的osm文件.osm.pbf -e FREEZEtrue -e POSTGRES_MAX_CONNECTIONS100 -p 6666:8080 --…...
HTML之JavaScript对象声明
HTML之JavaScript对象声明 常用:方式1:new Object() 创建一个空对象方式2:{属性名:属性值,属性名:属性值,...函数名:function(){}} 创建一个对象<!DOCTYPE html> <html lang"en"> <head><meta charset&quo…...
PyCharm结合DeepSeek-R1
PyCharm结合DeepSeek-R1,打造专属 AI 编程助手 在程序员的日常工作中,提高编程效率、快速解决代码问题是重中之重。今天给大家分享一个强强联合的组合 ——PyCharm 插件 Continue 与 DeepSeek-R1,它们能帮你打造出强大的个人 AI 编程助手。 …...
innovus如何分步长func和dft时钟
在Innovus工具中,分步处理功能时钟(func clock)和DFT时钟(如扫描测试时钟)需要结合设计模式(Function Mode和DFT Mode)进行约束定义、时钟树综合(CTS)和时序分析。跟随分…...
1.1 单元测试核心原则
单元测试核心原则 单元测试是软件质量保障的第一道防线,其核心目标是通过最小粒度的测试验证代码逻辑的正确性。以下是编写高质量单元测试必须遵循的六大原则,结合Mockito的应用场景进行解析: 1. 快速反馈(Fast) 原则…...
前端智能识别解析粘贴板内容
原理分析 说白了就是解析特定格式的文字,并将处理好的内容回填到需要的表单中。 为了程序的健壮性,我们解析时需要考虑多种情况。 1、文字行数 单行和多行的解析可以分开 单行的情况如下面这种, 姓名: 七七 电话:788 邮箱&…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
