POI 处理word 文档中 文本框模板
最近处理word模板中发现存在文本框类型的模板,以前从未处理过只能百度一下了,结果大部分出现的都是https://jingyan.baidu.com/article/e4d08ffdd352690fd2f60d8b.html 这种情况的,大多数针对的都是固定的文档格式,感觉很难弄明白,官网也直指大概提了一下,并没有明显的demo,不过从侧面来讲倒是提供了解决的办法,只能靠自己了,首先需要处理的模板后缀名称改成rar格式,本身word就是一堆xml的集合,在解压之后找到对应的document.xml,这个就是对应的整个文档结构了,慢慢遍历自己的节点,找打需要修改的地方,一层一层的去寻找,然后移动对应的XmlCursor到制定位置,去寻找,整个过程很浪费耐心,所以处理之前一定要格式化好的xml,网上有在线的工具,我只是把自己处理的过程分享一下,因为我是替换的文本,所以结构先列出来
public static List<String>patternList=new ArrayList();
//需要处理的节点名称
static {
patternList.add("mc:AlternateContent");
patternList.add("mc:Choice");
patternList.add("w:drawing");
patternList.add("wp:anchor");
patternList.add("a:graphic");
patternList.add("a:graphicData");
patternList.add("wps:wsp");
patternList.add("wps:txbx");
patternList.add("w:txbxContent");
patternList.add("w:p");
patternList.add("w:r");
patternList.add("w:t");
}
里面包含每一需要处理的节点的名称,然后就是进行回朔找到patternList中最后一个元素位置,也就是w:t的位置,当XmlCursor光标移动到对应的位置就可以执行正常的替换工作,
详细代码如下
public static void changeTextBox( XWPFDocument document,Map<String, String>map) {
for(XWPFParagraph paragraph:document.getParagraphs())
for(XmlObject object:paragraph.getCTP().getRArray())
{
XmlCursor cursor = object.newCursor();
eachchild(cursor, 0,map);
}
}
//回朔查找,因为并不是每一个文本框中只有一个可替换的地方
public static void eachchild(XmlCursor cursor,int start,Map<String, String>map) {
//预计子节点个数应该是小于10个节点
for(int i=0;i<10;i++)
{
//如果可以移动到子节点i
if(cursor.toChild(i)) {
//如果移动到达的子节点正好是按照顺序是需要的节点 则继续前往下一层
if(cursor.getDomNode().getNodeName().equals(patternList.get(start))) {
if(start==patternList.size()-1) {
String reString=cursor.getTextValue();
for(String e:map.keySet()) {
if(reString.contains(e)) {
// 执行替换
reString=reString.replaceAll(e, map.get(e));
}
}
//bingo 设置替换节点内容
cursor.setTextValue(reString);
}
//继续下一层 遍历
eachchild(cursor,start+1,map);
}else {
cursor.toParent();
}
}
}
// 此处很重要,如果命中或者未命中都需要 遍历其他节点
cursor.toParent();
}
PS:整个代码就是这个样子了,其他的自行补充完整,图片这一块懒得去处理了,只是提供一个大概的解决思路。提供的信息不多,相信你搜索到这篇文章的时候,很多预备知识都已经知道了,我就不再累述。如有问题请私信联系,当然更期待有心人能够补充的更加详细更加完整。转载注明出处,谢谢!
POI 处理word 文档中 文本框模板相关推荐
- java利用POI替换word文档中的标签
java利用POI替换word文档中的标签 <dependency><groupId>org.apache.poi</groupId><artifactId& ...
- java poi在word文档中插入图片后文件无法打开
错误情况 POI生成的word文档包含图片时用office打开失败,提示错误.但是用wps却可以打开. 原因分析 这是因为poi本身的问题,单纯的插入图片是不显示的,可以使用如下处理方式createP ...
- Python批量检查docx文档中文本框的内容是否正确
推荐教材:<Python程序设计基础与应用>(ISBN:9787111606178),董付国,机械工业出版社,2018.8出版,2021.7第12次印刷 图书详情: 配套资源: 用书教师可 ...
- poi 删除 word文档中的图片
代码片 XWPFDocument doc =WordUtil.createSimpleWord(file, word);//file 对应的文件模板,word传递参数的实体对象List<XWPF ...
- POI对word文档中的指定内容添加批注
public static void main(String[] args) throws Exception {InputStream is = new FileInputStream(new Fi ...
- Poi 设置word文档中的表格边框
https://blog.csdn.net/qq_31189355/article/details/80438506 下面代码分别设置XWPFTable上下左右实线黑色边框,放到头部定义就好.定义完成 ...
- Word控件Spire.Doc 【文本】教程(5) ;从 Word 文档中的文本框中提取文本
文本框的目的是允许用户输入程序要使用的文本信息.也可以从文本框中提取现有的文本信息.以下指南重点介绍如何通过Spire.Doc for .NET从 C# 中 Word 文档的文本框中提取文本. Spi ...
- 使用poi操作word文档实现套打功能
使用poi操作word文档实现套打功能 本文目的是为了分享一个实现套打功能,但是不同于简单的word的文本替换而是采用poi对word的文本框就行操作实现的功能: poi中各种jar的说明 套打的实现 ...
- POI生成word文档,图片显示为空白或不显示
我想要用java,通过poi实现word文档中插入文字和图片来发送邮箱附件.但是发现在对word操作中,图片是白的,size如果设置小了直接没有图片. 经过百度 参考解决 Java poi 3.8 ...
- Python读取\修改word文档中的文本框内容
本文所指的 word文档,都是docx结尾的,如果是doc结尾的,请参考上篇:点我 我们绝大多数的需求都是 利用python-docx 来读取word文档中的内容,进而再对内容进行其他处理,如下代码, ...
最新文章
- 1024 | 不加班,带你们一起薅当当的羊毛!
- hadoop 第一课 启动dfs 文件系统
- SAP QM 采样方案的c1 d1 c2 d2 --多重采样
- 从零开始单排学设计模式「策略模式」黑铁 II
- 上海人工智能实验室刘宇:从感知AI的发展理解决策AI的未来
- Numpy-随机生成以及矩阵的运算
- linux kvm百度云,容器与云|如何在 Ubuntu Linux 上使用 KVM 云镜像
- IMA文件如何打开,winimage使用方
- 最简单的java代码【java基本语法】
- 记一次wireshark抓取QQ好友IP和火绒抓取微信IP
- CS61A 计算机程序的构造与解释 课程介绍及课程学习总结
- 主机安全扫描入门-用Java封装Nmap
- Apache DolphinSchedulerShenYu(Incubating)联合 Meetup,暖春 3 月与你相约!
- iphone个系列尺寸_iPhone9只是套模iPhone8,这些才是iPhone经典款,你用过哪些?
- Windows系统下隐藏的文件
- matlab选址与GIS选址,ArcGIS入门教程(13)——多条件学校选址分析
- 做私域最常犯的四个错误
- 在物理机上安装虚拟机
- 玩客云 Armbian Linux
- 符号拓展指令CBW、CWD、CDQ、CWDE、CDQE