aspose通过开始和结束位置关键词截取word另存为新文件
关键词匹配实体类:
@Data
@EqualsAndHashCode(callSuper = false)
public class TextConfig implements Serializable {private static final long serialVersionUID = 1L;/*** 开始关键词,多个逗号分隔*/private String textStart ;/*** 结束关键词,多个逗号分隔*/private String textEnd ;/*** 包含关键词,多个逗号分隔*/private String textInclude ;/*** 不包含关键词,多个逗号分隔*/private String textExclude ;}
import com.aspose.words.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.*;@EqualsAndHashCode(callSuper = false)
@Slf4j
@Data
public class WordResolve extends Document {/*** 查找文本类型另存为word* @param filePathName 文件保存路径* @param copyFirst 是否复制关键词开始节点* @param copyLast 是否复制关键词结束节点*/@SneakyThrowspublic File findBetweenFile(TextConfig textConfig, String filePathName, boolean copyFirst, boolean copyLast) {List<Paragraph> paragraphs = getAllParagraph();Integer[] sec = findBetweenIndex(textConfig,getAllText());if(sec == null){return null;}Document doc = new Document();Body body = doc.getFirstSection().getBody();body.removeAllChildren();NodeImporter importer = new NodeImporter(this, doc, ImportFormatMode.KEEP_SOURCE_FORMATTING);Paragraph first = paragraphs.get(sec[0]);Paragraph last = paragraphs.get(sec[1]);List<CompositeNode<?>> parentNodes = new ArrayList<>(20);boolean startCopying = false;//读取文档的所有节点NodeCollection<?> allNodeList = this.getChildNodes(NodeType.ANY, true);for (int i = 0, j = allNodeList.getCount(); i < j; i++) {Node node = allNodeList.get(i);try{if (node == first) {startCopying = true;if(!copyFirst){continue;}}if (node == last && !copyLast) {// 到达结束节点后停止复制break;}if (startCopying) {boolean append = true;for (CompositeNode<?> parentNode : parentNodes) {NodeCollection<?> childNodes = parentNode.getChildNodes(node.getNodeType(), true);if(childNodes.contains(node)){append = false;break;}}if(append){try{body.appendChild(importer.importNode(node, true));}catch (Exception e){log.error("插入节点出错:{}",e.getMessage());//ignore}}}if (node == last) {// 到达结束节点后停止复制break;}}finally {if(startCopying && node.isComposite()){CompositeNode<?> compositeNode = (CompositeNode<?>) node;if(!parentNodes.contains(compositeNode)){parentNodes.add(compositeNode);}}}}File file = FileUtils.getFile(filePathName);doc.save(filePathName);return file;}/*** 查找文本类型解析规则的开始结束段落索引* @param strings word全部段落,每个段落的文本*/public Integer[] findBetweenIndex(TextConfig textConfig, List<String> strings){String textStart = textConfig.getTextStart();String textEnd = textConfig.getTextEnd();//规定开始关键词必须包含哪些文字,多个逗号分隔(作为附加判断,可为空)textInclude = StringUtil.defaultString(textConfig.getTextInclude(), "").replace(",", "");//规定结束关键词必须不包含哪些文字,多个逗号分隔(作为附加判断,可为空)textExclude = StringUtil.defaultString(textConfig.getTextExclude(), "").replace(",", "");String[] in = StringUtil.isBlank(textInclude) ? null : textInclude.split(",");String[] out = StringUtil.isBlank(textExclude) ? null : textExclude.split(",");//满足开始位置和结束位置的全部关键词索引List<Integer> startArr = new ArrayList<>();List<Integer> endArr = new ArrayList<>();for (int i = 0; i < strings.size(); i++) {String text = strings.get(i);if (text.contains(textStart)) {startArr.add(i);}if (text.contains(textEnd)) {endArr.add(i);}}//进行包含和非包含的判断过滤if(!startArr.isEmpty() && !endArr.isEmpty()){for (Integer start : startArr) {for (Integer end : endArr) {//中间至少隔了一个段落if(start + 1 < end){StringJoiner jo = new StringJoiner("\n");for (int i = start + 1; i < end; i++) {jo.add(strings.get(i));}String word = jo.toString();boolean match = true;if(in != null){for (String s : in) {if(!word.contains(s)){match = false;break;}}}if(match && out != null){for (String s : out) {if(word.contains(s)){match = false;break;}}}if(match){return new Integer[]{start,end};}}}}}return null;}/*** 拿到文档全部段落文本*/public List<String> getAllText(){List<String> strings = new ArrayList<>();getAllParagraph().forEach(a-> strings.add(StringTool.safeToString(a.getText(), "")));return strings;}/*** 拿到文档全部段落*/public List<Paragraph> getAllParagraph(){if(allParagraph == null){allParagraph = findNodeByType(NodeType.PARAGRAPH, Paragraph.class);}return allParagraph;}
}
使用方式:
word文档内容如下:
要截取标题三和标题四之间的内容,生成新的word,代码如下:
public class Test {public static void main(String[] args) throws Exception{//验证license//new AsposeLicense().validate();//读取word文件WordResolve word = new WordResolve(new File("C:\\Users\\zhou\\Desktop\\测试.docx"));TextConfig detail = new TextConfig();detail.setTextStart("poi导出大数据量问题、写入速度慢");detail.setTextEnd("国密验签失败");File betweenFile = word.findBetweenFile(detail, "C:\\Users\\zhou\\Desktop\\betweenFile.docx", false, false);System.out.println(betweenFile);}}
截取保存的文件如下:
相关文章:
aspose通过开始和结束位置关键词截取word另存为新文件
关键词匹配实体类: Data EqualsAndHashCode(callSuper false) public class TextConfig implements Serializable {private static final long serialVersionUID 1L;/*** 开始关键词,多个逗号分隔*/private String textStart ;/*** 结束关键词&#x…...
深入解析美颜SDK:绿幕抠图功能的算法原理
当下,美颜SDK绿幕抠图功能成为许多应用中不可或缺的一环。本文将深入解析美颜SDK中绿幕抠图功能的算法原理,揭示其背后的技术奥秘。 一、什么是美颜SDK绿幕抠图? 美颜SDK的绿幕抠图功能是一种通过计算机视觉技术,将视频或图像中…...
从有向带权图判断最短路径里各目标顶点顺序
对如下有向带权图,若采用迪杰斯特拉(Dijkstra)算法求从源点a到其他各顶点的最短路径,则得到的第一路径的目标顶点是b,第二条最短路径的目标顶点是c,后续得到的其余各最短路径的目标顶点依次是() A.d,e,f B.e,d,f C.f,d,e D.f,…...
鼠标驱动框架:模拟键盘按键
/* 参考: drivers\hid\usbhid\usbmouse.c */ #include <linux/kernel.h> #include <linux/slab.h> #include <linux/module.h> #include <linux/init.h> #include <linux/usb.h> #include <linux/input.h> #include <linux/hid.h>st…...
ES6之Promise的链式调用
✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…...
HTML----JavaScript操作对象BOM对象
文章目录 目录 文章目录 本章要求 一.BOM模型概述 二.BOM核心:window对象 常用属性 常用方法: confirm() 案例 open ()close()案例 setTimeout( ) 案例 setInterval( ) 案例 document对象 练习 本章要求 了解BOM模型掌握BOM模型实际应用 一.BOM模型…...
隆道数智大会回顾|第13期《如何构建绿色产业供应链新生态》(完)
本期演讲嘉宾: 史文月 采购与供应链专家 邢庆峰 品类管理和质量管理专家 刘婷婷 中兴通讯供应链规划总监 张燕华 正大生物CIO 吴树贵 隆道公司总裁 本期演讲主题: 如何构建绿色产业供应链新生态 本期内容要点: 1.供应链管理的核心问…...
粒子群优化pso结合bp神经网络优化对csv文件预测matlab(3)
1.csv数据为密西西比数据集,获取数据集可以管我要,数据集内容形式如下图: 2.代码 这里参考的是b站的一位博主。 数据集导入教程在我的另一篇文章bp写过,需要的话可以去看一下 psobp.m close all clc%读取数据 inputX; outputY;…...
软性演员-评论家算法 SAC
软性演员-评论家算法 SAC 软性演员-评论家算法 SAC优势原理软性选择模型结构目标函数重参数化熵正则化代码实现 软性演员-评论家算法 SAC 优势原理 DDPG 的问题在于,训练不稳定、收敛差、依赖超参数、不适应复杂环境。 软性演员-评论家算法 SAC,更稳定…...
Nginx多域名部署多站点
目录 1.修改配置文件nginx.conf 2. 修改hosts文件 1.修改配置文件nginx.conf 在配置文件的 server_name 处修改成自己需要的域名,然后保存退出 j 查看语法是否错误,然后重启nginx nginx -t # 查看语法是否正确 systemctl restart nginx # 重启nginx …...
Java的常规面试题
Java的面试题主要涉及Java基础知识、并发编程、集合原理、JVM原理、I/O与网络编程、设计模式、互联网常用框架等多个领域[6]。一些常见的面试问题包括: 1. 面向对象的特征:继承、封装和多态性。 2. 访问修饰符public、private、protected以及默认时的区别…...
大数据技术发展史
文章目录 Google论文HadoopHive大数据生态 Google论文 今天我们常说的大数据技术,其实起源于Google在2004年前后发表的三篇论文,也就是我们经常听到的“三驾马车”,分别是分布式文件系统GFS、大数据分布式计算框架MapReduce和NoSQL数据库系统…...
linux常见基础指令
入门常见基础指令 ls、stat、 pwd 、cd、tree、 whoami、 touch、 mkdir、 rm 、 man、 cp、mv、cat、tac、echo、>、 >>、 < 、more、 less、 head、 tail、date、 cal、 find、 which、alias、whereis、grep、zip与unzip、 tar、bc、uname、xargs... 热键Tab、…...
“人家赚那么多”系列01:如何练习?练什么?
01 如何练习?练习什么? 今年计划重点围绕「在不骗自己的前提下,如何才能把事儿彻底做好,并做得有声有色?」为主题来写点儿东西,聊聊我是怎么做的,如何通过一些有效的方法来不断优化自己的。 想把…...
【Android】使用android studio查看内置数据库信息
要使用Android Studio查看内置数据库信息,可以按照以下步骤进行操作: 打开Android Studio并打开你的项目。 在左侧的Project窗口中,找到并展开你的app模块。 找到并展开"app" > "src" > "main"文件夹。…...
PHP开发日志 ━━ 基于PHP和JS的AES相互加密解密方法详解(CryptoJS) 适合CryptoJS4.0和PHP8.0
最近客户在做安全等保,需要后台登录密码采用加密方式,原来用个base64变形一下就算了,现在不行,一定要加密加key加盐~~ 前端使用Cypto-JS加密,传输给后端使用PHP解密,当然,前端虽然有key有盐&…...
2021-01-03 excel实现列递增,行保持不变
需求:excel文档数据操作的时候发现自动递增只能实现列不变行号递增 我这里里需要的是列递增行不变 解决方式:通过一些函数的组合使用 INDIRECT("驻场明细!"&CHAR(ROW()62)&ROW(驻场明细!A$28)) INDIRECT()函数的使用: INDI…...
[Python]两个杯子取水问题
利用两个杯子巧取三升水: 今天的这个趣味数学小游戏是利用两个没有刻度的水杯,巧妙地取出三升水来。 题目的条件是:一个总容量为6升的杯子和一个总容量为5升的杯子,同时面前有无限容量的水供你使用。不借助其它任何的容器…...
C++汇编语言学习计划
前几天买了某游戏的外挂,感觉外挂在我计算机上进行了不少操作,我想一探究竟,可是只有exe,没办法,翻译成汇编我也看不懂,索性来简单学习下。访问Chatgpt4,给了如下学习计划。 要从零开始学习C生成…...
微信服务号升级订阅号条件
服务号和订阅号有什么区别?服务号转为订阅号有哪些作用?首先我们要看一下服务号和订阅号的主要区别。1、服务号推送的消息没有折叠,消息出现在聊天列表中,会像收到消息一样有提醒。而订阅号推送的消息是折叠的,“订阅号…...
SpringBoot整合mybatis多数据源
废话不多说先上结果 对应数据库 首先导入所需的mybatis、mysql和lombok依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependen…...
垃圾收集器与内存分配策略
内存分配和回收原则 对象优先在Eden区分配 大对象直接进入老年代 长期存活的对象进入老年代 什么是内存泄漏 不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出 自动垃圾回收与手动垃圾回收 自动垃圾回收:由虚拟机来自动回收对象…...
Python计算三角形的面积
Python 计算三角形的面积 以下实例为通过用户输入三角形三边长度,并计算三角形的面积: # 三角形第一边长 a 3 # 三角形第二边长 b 4 c float( input("输入三角形第三边长: ") ) # 计算半周长 s (a b c) / 2 # 计算…...
198.【2023年华为OD机试真题(C卷)】万能字符单词拼写(JavaPythonC++JS实现)
🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-万能字符单词拼写二.解题思路三.题解代码Pytho…...
Tomcat服务为什么起不来?
转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 服务跑在Tomcat下面,有时候会遇到Tomcat起不来的情况。目前为止常遇到的情况有如下几种: 1. Tomcat服务…...
计算机网络 VLAN
路由器将多个局域网连接起来,而交换机将一个局域网里的设备连接起来。 路由器的端口分配局域网的网段(子网网段),局域网的内部设备的ip都在这个网段里,再由交换机将数据派发到目的设备,交换机是按照MAC地址…...
docker搭建Dinky —— 筑梦之路
简介 Dinky 是一个 开箱即用 、易扩展 ,以 Apache Flink 为基础,连接 OLAP 和 数据湖 等众多框架的 一站式 实时计算平台,致力于 流批一体 和 湖仓一体 的探索与实践。 主要功能 其主要功能如下: 沉浸式 FlinkSQL 数据开发&#x…...
Python基础(十四、数据容器之集合Set)
文章目录 一、集合语法二、集合的基本操作添加元素删除元素随机删除元素,可获得删除的值清空取出2个集合的差集消除2个集合的差集合并2个集合集合元素个数查询元素是否存在 遍历集合集合的遍历 什么是数据容器? 数据容器是Python中用于存储和操作数据的对…...
OpenHarmony之HDF驱动框架
概述 HDF(Hardware Driver Foundation)驱动框架,为驱动开发者提供驱动框架能力,包括驱动加载、驱动服务管理、驱动消息机制和配置管理。并以组件化驱动模型作为核心设计思路,让驱动开发和部署更加规范,旨在…...
深入浅出理解TensorFlow的padding填充算法
一、参考资料 notes_on_padding_2 二、TensorFlow的padding算法 本文以TensorFlow v2.14.0版本为例,介绍TensorFlow的padding算法。 tf.nn.conv2d # https://github.com/tensorflow/tensorflow/blob/v2.14.0/tensorflow/python/ops/nn_ops.py#L2257-L2361paddi…...
微视看视频领红包下载安装/优化品牌seo关键词
Java内部类的四种分类以及作用 总结: 内部类分别有成员内部类、静态内部类、局部内部类、匿名内部类。为什么使用内部类? 1、封装性,对访问权限做限制。 2、实现多继承,每个内部类可以继承一个父类。 3、解决继承及实现接口出现同…...
wordpress发送邮箱验证码/北京seo招聘信息
中秋节快乐! 转载于:https://www.cnblogs.com/Alanf/p/9687702.html...
湖北自适应网站建设报价/广州专门做网站
2019独角兽企业重金招聘Python工程师标准>>> 本文纯粹是个整理。 以下代码和图片来自C 11右值引用。 class CMyString { public:// 构造函数CMyString(const char *pszSrc NULL){cout << "CMyString(const char *pszSrc NULL)" << endl;if …...
怎么做动态的实时更新的网站/免费平台
1. 基本语法test condition或[ condition ]使用括号方式时,条件与括号之间要加空格。2. 测试文件状态例:测试文件 scores.txe 是否可执行。 [rootlocalhost ~]# [ -x scores.txt ] [rootlocalhost ~]# echo $? 1 条件测试可以使用以下条件表达…...
广州科 外贸网站建设/seo关键词排名优化方案
1、安装插件在使用Visual Studio 2013添加ADO.NET实体数据模型新建连接时,默认是没有Mysql选项的。此时我们需要安装两个东西:1、mysql-for-visualstudio:Mysql的Visual Studio插件,推荐1.2.3版本2、mysql-connector-netÿ…...
移动网上/陕西seo主管
如何让百度搜索结果显示您的网站logo、ico、官网?非指定网站logo:一般由百度蜘蛛智能抓取,文章列表页内容页、带上图片大于121*75即可,太大太小也不行指定logo:到百度站长平台添加即可,新网站有点点难度。官…...