java 导出word

2023-05-16

  • 目前来看,java导出word大致有6种解决方案:

  1:Jacob是Java-COM Bridge的缩写,使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。DLL动态链接库的生成需要windows平台的支持。该方案只能在windows平台实现,是其局限性。

  2:Apache POI包括一系列的API,他的excel处理很强大,对于word还局限于读取,目前只能实现一些简单文件的操作,不能设置样式。有兴趣学习的同学,http://www.w3ii.com/zh-CN/apache_poi_word/default.html这个文档官方可以看看

  3:Java2word是一个在java程序中调用 MS Office Word 文档的组件类库)。该组件提供了一组简单的接口,以便java程序调用他的服务操作Word 文档。

  4:iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。功能强大。

  5:JSP输出样式,该方案实现简单,但是处理样式有点缺陷,简单的导出可以使用。

  6:用XML做就很简单了。Word从2003开始支持XML格式,大致的思路是先用office2003或者2007编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析FreeMarker模板并输出Doc。经测试这样方式生成的word文档完全符合office标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。

综上所述:我先使用poi做了一套导出word,但是由于页眉页脚输出打不开word,结合网上意见,决定试试freemaker导出word

可以看看这个博客,很详细https://blog.csdn.net/qq_24084925/article/details/58586615


        首先说说word和xml的关系,每个word它都对应着一个xml文件,也就是说你修改了xml,对应的word文件也就跟着修改了。通过word的保存功能可以将一个word文件保存为xml文件,该文件虽然是.xml格式的,但是直接双击打开的话还是使用word打开,所以你只能用txt将它打开,用txt打开之后将里面的一句话:<?mso-application progid="Word.Document"?>去掉,然后保存,接着就可以双击直接打开了,这样使用的就是IE打开的,就可以查看里面的节点具体的构造。

最上面的主节点是<w:wordDocument>(如果不是,你将word文件保存成xml的时候使用的是07word,选择的是:word xml文档(*.xml),你可选择word 2003 xml文档(*.xml)试试);该主节点下面有大致8个节点,其中我们要操作的就是<w:body>节点,该节点是word的正文节点,其他的节点没有去研究;<w:body>下面包含的节点可能会有:<w:p>段落节点、<w:tbl>表格节点。

1.首先编辑xml,https://segmentfault.com/a/1190000011709732 ,可以去看


保存成 abc.xml;

然后用代码编辑器打开,由于打开格式比较乱,可以先格式化之后再修改:


修改步骤如下:1.将${a.item1},被打乱的部分删掉,如下图,否则无法显示数据


2.list遍历循环输出的话要在每一行前后加上<#list 你的数据list as 转换的变量名></#list>

(3)图片的话,在模板里面先加入图片占位,打开xml文档,图片所在的位置会有一大串base64编码,将图片形成的一大串base64编码改成图片的数据变量,如${image}
clipboard.png到这里文件里面加入的<#list 你的数据list as 转换的变量名></#list>属于非法写法,还有图片的base64编码没了,所以到这里的xml文档就无法用word打开查看最终样式了。导出word的模板就形成好了

土亢

  • 图片使用base64编码,放在“yyy”的位置:“<w:binData w:name="wordml://xxx.png">yyy</w:binData>”
  • 当文档存在图片时,尤其是多张图片需要动态读取时,“wordml://${xxx}.png”中的xxx需要相应动态变化,不然图片会重复哦。
  • 单元格合并时,可在ftl里写相应判断,同上行内容使用“<w:vmerge />”或者“<w:vmerge w:val="continue"/>”来表示合并,否则,使用“<w:vmerge w:val="restart"/>”来另起新行。这里注意的是“vmerge”都是小写,学习过程中在网上看到是“vMerge”,合并不起作用,排查了半天错。

    <#assign tempName=""/>
    ...
    <#if tempName!=Table.name>
      <w:vmerge w:val="restart"/>
      <#assign tempName=Table.name/>
    <#else>
      <w:vmerge />
    </#if>







本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java 导出word 的相关文章

随机推荐

  • Ubuntu 下忘记用户名和登录密码的解决方法(已经实践过,踩过坑)

    1 首先重启 长按 shift 键 xff08 多次连击esc也可以 xff09 上下箭头选择Advanced options for Ubuntu xff0c enter键进入 2 选择后缀带 xff08 recovery mode xf
  • Unity+Android GET和POST方式的简单实现API请求(人像动漫化)

    Unity与Android的简单交互 xff0c Unity打开Android相册并调用 前端时间本想着去弄个小工具 xff0c 就是图文生成视频 xff0c 可是这个的API接口的调用的测试权限死活申请不下来 xff0c 只能放弃 xff
  • 手写生产者/消费者模式(三种方式)

    1 生产者 消费者模式介绍 这种模式满足三点要求 xff1a xff08 1 xff09 生产者生产数据到缓冲区中 xff0c 消费者从缓冲区中取数据 xff08 2 xff09 缓冲区满时 xff0c 生产者线程阻塞 xff0c 进入等待
  • jar包完全解读

    本文抄自 xff1a jar包的一些事儿 前言 xff1a 作为java程序员 xff0c 日常工作就是打jar包 xff0c 可是对jar包的了解有多少呢 xff1f 一 什么是jar包 jar包就是 Java Archive File
  • 面试经历---YY欢聚时代(2015年11月21日上午初试、25日下午复试)

    YY欢聚时代一年多前去面试过一次 xff0c 当时鄙视了 xff0c 在现在的公司呆了1年半了 xff0c 感觉做得很不爽 xff0c 而且薪资又不满意 xff0c 所以想找个新工作 xff0c 就想去YY面试 下面将两次YY面试的经历写出
  • jenkins下载安装及环境搭建

    文章目录 jenkins下载首次启动jenkins环境配置 jenkins下载 jenkins官网下载 xff0c 输入jenkins io xff0c 出现如下界面 xff1a 点击下载 xff0c 往下滑 xff1a 选择这个war包下
  • Testng学习笔记(一)

    目录 TestNg简介1 TestNG使用流程1 1TestNG安装及使用1 2创建maven项目 xff0c 进行POM配置1 3 创建Test类1 4添加测试方法 2 TestNG常用注解及生命周期2 1常用注解2 2TestNG注解的
  • (史上最详细的解释看过来)深入理解函数栈帧

    函数的调用过程 xff08 栈帧 xff09 话说 xff0c 什么是函数栈帧 xff1f 我之前也是一脸懵逼的 xff08 xff09 xff0c 举个栗子 xff0c 先看一段简单的代码 xff1a span class token m
  • main函数参数及可变参数列表解析

    main函数的参数解析 平时写main函数大多都是int main xff0c 然后误以为main函数是没有参数的 xff0c 但在有些书上又看到main括号里有三个不怎么看的懂的参数 xff0c 其实仔细研究就会发现 xff0c main
  • 给定一棵二叉树,判断它是否是镜像对称的

    给定一个二叉树 xff0c 检查它是否是镜像对称的 在这里先解释一下镜像对称的概念 xff0c 顾名思义 xff0c 就像人站在镜子前面面对自己一样 xff0c 看到的一切都是对称的 镜中的反射与现实中的人具有相同的头部 xff0c 但反射
  • 判断一棵二叉树是否是平衡二叉树

    我们先来整理一下什么是平衡二叉树 xff1f 满足以下两点的就是平衡二叉树 xff1a 1 左右子树的高度差不能超过1 2 左右子树也是平衡二叉树 需要注意的是空树也是平衡二叉树 例如下面这棵树就不是平衡二叉树 因为对于B来说左右子树高度超
  • Fiddler实现手机抓包入门配置

    emmm 在此之前我也只是听过抓包抓包 xff0c 但是没有真正的接触到 xff0c Fiddler是一款很强大的抓包工具了 xff0c 但是一开始很多人可能会想我一样走上歧途 xff0c 所以在此总结一下 xff0c 希望看到的朋友少走弯
  • Idea使用Maven连接MySQL数据库

    连接MySQL数据库的步骤 xff1a 1 添加数据库 2 填写连接信息如图 3 填写连接信息完之后 xff0c 需要记一下jar包的位置 xff0c 用于添加jar包 4 显示jar包信息 5 添加文件夹命名java xff0c 并将其设
  • mybatis generator 生成中文字段注释

    首先 xff0c 试了好几次 xff0c 重写 DefaultCommentGenerator xff0c 创建MyCommentGenerator类实现CommentGenerator接口 xff0c 都是按照网上的方案来的 xff0c
  • org/apache/velocity/context/Context

    mybatisplus generator AutoGenerator 生成文件时报错如下 xff1a 请输入表名 xff1a alarm 14 38 28 569 main DEBUG com baomidou mybatisplus g
  • NVIDIA开源NeMo,CUDA,pytorch安装使用过程踩坑总结

    说明 Nemo cpu版本直接看文章最后一部分 xff08 linux版本的 xff09 xff0c windows下安装的话要先安装CUDA来支持GPU xff0c 在安装pytorch 在安装nemo 但是还是出问题了 xff0c 不建
  • 网络url转文件

    首先是获取springboot resource下面的文件 String fileUrl 61 ResourceUtils getURL 34 classpath 34 getPath 43 34 test txt 34 File file
  • ByteBuffer和String互转

    Charset charset 61 StandardCharsets UTF 8 String str 61 34 kj你好呀 kjlkjlkjlk 34 ByteBuffer buffer 61 ByteBuffer allocate
  • @Test单元测试注入bean 3种方式

    1 64 ContextConfiguration 64 ContextConfiguration Spring整合JUnit4测试时 xff0c 使用注解引入多个配置文件 64 RunWith SpringJUnit4ClassRunne
  • java 导出word

    目前来看 xff0c java导出word大致有6种解决方案 xff1a 1 xff1a Jacob是Java COM Bridge的缩写 xff0c 使用Jacob自带的DLL动态链接库 xff0c 并通过JNI的方式实现了在Java平台