java中,怎样用最简单方法实现写word文档

news2024/11/18 13:26:11

在跨平台环境中实现写word时,如果用现成的库,就会涉及跨平台兼容性问题,比如在安卓与java中实现写word的功能。还有一个问题就是,完全用程序生成word文档,工作量较大。所以采用了模板替换的方法。

docx文档本质就是一个zip文件,只要将它的扩展名改成zip,就能解压出一系列的xml文件与图片文件,它的目录结构如下:

  1. [Content_Types].xml:定义了文档中所有文件的 MIME 类型。

  2. _rels/:包含了文档的元数据和关系信息,有一个特殊的文件 .rels,定义了文档的内部链接和外部链接。

  3. docProps/:这个文件夹包含文档的属性信息,如标题、作者、主题等。

    • app.xml:包含应用程序特定的属性;
    • core.xml:包含核心属性,如标题、作者、创建日期等;
    • custom.xml:包含自定义元数据。
  4. word/:这个文件夹包含文档的主要内容和设置。

    • document.xml:这是文档的主要 XML 文件,包含了文本、样式、段落、表格和其他内容;
    • footer1.xml:页脚;
    • header1.xml:页眉;
    • styles.xml:包含文档中使用的样式定义;
    • settings.xml:包含文档的设置,如页面布局、标题等;
    • fontTable.xml:包含文档中使用的字体列表;
    • numbering.xml:包含文档中的编号格式定义;
    • theme/:包含文档的主题信息,如颜色方案、字体方案等;
    • media/:包含文档中使用的图像和其他媒体文件。

DOCX 文件的 XML 结构是层次化的,通常以 w:document 作为根元素,然后包含以下主要部分:

  • w:body:包含文档的主体内容,如段落 (w:p)、表格 (w:tbl)、图片 (w:drawing) 等;
  • w:p:段落元素,包含文本和格式化信息;
  • w:r:运行元素,表示文本的一段连续区域,可以包含文本 (w:t) 和格式化信息;
  • w:t:文本元素,包含实际的文本内容;
  • w:tbl:表格;
  • w:tr,w:tc:表格中的行与列。

每个 XML 文件都遵循 OOXML 的命名空间规则,并且使用特定的 XML 模式进行定义。

主要内容在word目录下,通常关注word目录下的document.xml,header1.xml、footer1.xml以及media子目录下的图片文件。

在程序中产生的数据,通常是规则的,比如表格数据(如下图),非常适合传给freemarker,由它替换到word目录下三个xml文件以及media子目录下的文件。注意:图片不能用base64格式,需要将它转成二进制格式,一个小遗憾,如果能用,模板定义就更简单了。

模板制作方法也很简单:用office或wps写一个文档,定义好格式,在需要占位的地方写上特定的内容(只要在xml中容易找到就可以)。然后将docx扩展名改成zip,解压后,在word目录下的document.xml,header1.xml、footer1.xml中,将内容都改成指定的占位符就行了。

freemarker的语法这里就不介绍了。freemarker在安卓中有点点问题,具体不记得了。我用的是js,把几个xml文档改成js程序,样例如下:

var xml=[];
xml.push(`....`);
if(conditions...) xml.push(`....`)
.....
xml.join('');//输出最后的内容

把它们放到一个js引擎中,比如graalvm的js引擎,安卓上的quickjs引擎等,因为都是基本js语法,不会有兼容性问题。js执行的最终输出结果就是所需的xml文档。

生成完毕,按原来的结构压缩成zip包,再改成docx扩展名就可以了。

至简网格的服务器要在java与安卓中都能运行,兼容性就是个大问题,并且资源占用不可能像普通服务器那样没有节制,所以用的就是这种方法。因为本身要用js引擎做接口实现的扩展,所以js引擎是必须的,顺带着,部分模板就用js实现拼接。

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

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

相关文章

BUUCTF [GUET-CTF2019]zips 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 得到一个attachment.zip文件 解题思路: 1、解压attachment.zip,得到222.zip文件。尝试解压需要密码,使用Ziperello爆破密码…

C语言学习笔记-- 3.4.2实型变量

1.实型数据在内存中的存放形式(了解) 实型数据一般占4个字节(32位)内存空间。按指数形式存储。 2.实型变量的分类(掌握) 实型变量分为:单精度(float型)、双精度&#…

在线思维导图编辑!3个AI思维导图生成软件推荐!

思维导图,一种以创新为驱动的视觉化思考工具,已经渗透到我们日常生活和工作的各个角落。当我们需要整理思绪、规划项目或者梳理信息时,思维导图总能提供极大的帮助。 近些年随着云服务等基础设施的完善,我们可以看到越来越多提供…

new CCDIKSolver( OOI.kira, iks ); // 创建逆运动学求解器

demo案例 new CCDIKSolver(OOI.kira, iks); 在使用某个特定的库或框架来创建一个逆运动学(Inverse Kinematics, IK)求解器实例。逆运动学在机器人学、动画和计算机图形学等领域中非常重要,它用于根据期望的末端执行器(如机器人的…

【IOT】OrangePi+HomeAssistant+Yolov5智能家居融合

前言 本文将以OrangePi AIpro为基础,在此基础构建HomeAssistant、YOLO目标检测实现智能家居更加灵活智能的场景实现。 表头表头设备OrangePi AIpro(8T)系统版本Ubuntu 22.04.4 LTSCPU4核64位处理器 AI处理器AI算力AI算力 8TOPS算力接口HDMI2、GPIO接口、Type-C、M.2…

复购率下降是什么原因导致的?三个步骤直击复购率下降根源

在商业运营中,回购率的波动往往能够直观地反映出客户对品牌和产品的忠诚程度。一个健康的回购率可以为企业带来稳定的收入流,同时也是品牌口碑和市场影响力的有力证明。但是,当企业面临回购率下降的情况时,这通常是一个警示信号&a…

c++(六)

c(六) 多态概念在c中是如何实现多态静态多态(绑定)动态多态(绑定) 动态多态的实现原理动态内存分配中遇到的问题 重载、重定义、重写的区别抽象类接口类---抽象类空类对象的内存大小explicitfinal修饰类修饰…

串口调试助手中文乱码 解决方案

输出乱码 一般,当串口调试助手输出乱码时,可能有以下几个原因: 波特率设置错误:串口通信需要保证发送和接收的设备使用相同的波特率。请检查串口调试助手和目标设备的波特率设置是否一致。 数据位、停止位或校验位设置错误&…

java Web开发中采用Servlet登录验证,中文用户名始终提示“用户名密码错误”以及输出中文乱码问题

采用Servlet登录验证,中文乱码问题解决 在Java Web开发中,往往采用Servlet完成前后端直接的控制和处理,例如:用户登录验证功能。 在采用如下Servle源码t完成用户名登录验证时,只要用户名涉及中文,对于正确…

kafka-偏移量图解

生产者偏移量:生产者发送消息时写入到哪个位置(主题的每个分区会存储一个 leo 即将写入消息的偏移量),每次写完消息 leo 会 1 消费者偏移量:消费者从哪个位置开始消费消息,小于等于 leo,每个组…

电脑怎么清理c盘垃圾文件 电脑运行内存不足怎么清理

和Windows系统电脑文件分区不同,苹果电脑并不分区,默认只有C盘,当C盘垃圾文件过多,电脑运行内存不足时,手动清理电脑垃圾文件毫无头绪,可以尝试使用苹果电脑清理软件——CleanMyMac来清理 。 一、电脑怎么…

Stable Diffusion WebUI详细使用指南

Stable Diffusion WebUI(AUTOMATIC1111,简称A1111)是一个为高级用户设计的图形用户界面(GUI),它提供了丰富的功能和灵活性,以满足复杂和高级的图像生成需求。由于其强大的功能和社区的活跃参与&…

618局外人抖音:别人挤压商家“拼价格”,它默默联合商家“抢用户”?

文|新熔财经 作者|宏一 “618”来临之际,各电商平台和短视频平台早已打响了“促销大战”。不过,今年各大平台都更积极适应新的消费形式,调整了“大促动作”。 比如淘宝、京东带头取消了沿用十年之久的预售机制&…

【JS红宝书学习笔记】第4章 变量、作用域和内存

第4章 变量、作用域和内存 1. 原始值和引用值(面试题) ECMAScript 变量可以包含两种不同类型的数据:原始值和引用值。原始值(primitive value)就是最简单的数据(Undefined、Null、Boolean、Number、Strin…

windows上安装miniforge和jupyterlab

1,下载miniforge3 GitHub - conda-forge/miniforge: A conda-forge distribution. 下载下来后傻瓜式安装就可以了 配置环境变量,在系统环境变量的path添加下列就行了,根据自己的路径修改 2,创建虚拟环境 conda create -n test …

1比1万地形图符号库分享

我们在《1:2.5万、1:5万、1:10万军用地形图图式》一文中,为大家分享过军用地形图式。 还在《超实用三调符号库分享下载》一文中,为大家分享过三调符号库。 现在再为你分享一个1比1万的地形图符号库,请在文末查看符号…

四象限桌面怎么制作 结合桌面便签更高效

在繁忙的工作中,我们经常面临各种任务和项目的挑战,如何高效地管理这些任务成为提升工作效率的关键。这时候,四象限时间管理法就显得尤为重要。 四象限,即将工作按照紧急与重要程度分为四类:紧急且重要、紧急不重要、…

怎么从视频中提取音频?这里有三种提取妙招

怎么从视频中提取音频?在数字媒体日益丰富的今天,视频内容成为了信息传播的重要形式。但有时我们可能只需要视频中的音频部分,用于制作播客、音乐剪辑或语音分析等。幸运的是,技术的发展为我们提供了多种从视频中高效提取音频的方…

今日好料推荐(大数据湖体系规划)

今日好料推荐(大数据湖体系规划) 参考资料在文末获取,关注我,获取优质资源。 大数据湖体系规划 一、大数据湖简介 大数据湖(Data Lake)是一个集中式的存储库,用于存储来自各种来源的结构化和…

人工智能应用-实验5-BP 神经网络分类手写数据集

文章目录 🧡🧡实验内容🧡🧡🧡🧡代码🧡🧡🧡🧡分析结果🧡🧡🧡🧡实验总结🧡🧡 &#x1f9…