使用 POI 在 Word 中重新开始编号、自定义标题格式
效果图

引入依赖
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>ooxml-schemas</artifactId><version>1.4</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</version></dependency>
示例代码
import cn.hutool.core.date.DateTime;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.time.LocalDateTime;@Component
public class CreateTestWordUtil {private static CreateTestWordUtil createJGWordUtil;int numLevel = 0; //编号String filePath;String filename;@PostConstructpublic void init() {createJGWordUtil = this;}/*** @param styles 样式* @param strStyleId 标题id* @param headingLevel 标题级别* @param pointSize 字体大小(/2)* @param hexColor 字体颜色* @param typefaceName 字体名称(默认微软雅黑)*/public void createHeadingStyle(XWPFStyles styles, String strStyleId,int headingLevel, int pointSize, String hexColor, String typefaceName) {//创建样式CTStyle ctStyle = CTStyle.Factory.newInstance();//设置idctStyle.setStyleId(strStyleId);CTString styleName = CTString.Factory.newInstance();styleName.setVal(strStyleId);ctStyle.setName(styleName);CTDecimalNumber indentNumber = CTDecimalNumber.Factory.newInstance();indentNumber.setVal(BigInteger.valueOf(headingLevel));// 数字越低在格式栏中越突出ctStyle.setUiPriority(indentNumber);CTOnOff onoffnull = CTOnOff.Factory.newInstance();ctStyle.setUnhideWhenUsed(onoffnull);// 样式将显示在“格式”栏中ctStyle.setQFormat(onoffnull);// 样式定义给定级别的标题if (headingLevel != 0) {CTPPr ppr = CTPPr.Factory.newInstance();ppr.setOutlineLvl(indentNumber);ctStyle.setPPr(ppr);}XWPFStyle style = new XWPFStyle(ctStyle);CTHpsMeasure size = CTHpsMeasure.Factory.newInstance();size.setVal(new BigInteger(String.valueOf(pointSize)));CTHpsMeasure size2 = CTHpsMeasure.Factory.newInstance();size2.setVal(new BigInteger(String.valueOf(pointSize)));CTFonts fonts = CTFonts.Factory.newInstance();if (typefaceName == null || typefaceName.equals("")) typefaceName = "微软雅黑";fonts.setAscii(typefaceName); //字体CTRPr rpr = CTRPr.Factory.newInstance();rpr.setRFonts(fonts);rpr.setSz(size);rpr.setSzCs(size2); //字体大小CTColor color = CTColor.Factory.newInstance();color.setVal(hexToBytes(hexColor));rpr.setColor(color); //字体颜色style.getCTStyle().setRPr(rpr);// is a null op if already definedstyle.setType(STStyleType.PARAGRAPH);styles.addStyle(style);}public void writeWordAQJG() {// 文档生成方法XWPFDocument doc = new XWPFDocument();XWPFStyles xwpfStyles = doc.createStyles();CTFonts fonts = CTFonts.Factory.newInstance();fonts.setAscii("微软雅黑");fonts.setEastAsia("微软雅黑");fonts.setHAnsi("微软雅黑");xwpfStyles.setDefaultFonts(fonts);createHeadingStyle(xwpfStyles, "标题 1", 1, 32, "000000", "微软雅黑");createHeadingStyle(xwpfStyles, "标题 2", 2, 28, "000000", "微软雅黑");createHeadingStyle(xwpfStyles, "正文", 0, 24, "000000", "微软雅黑");XWPFParagraph xwpfParagraphtop = doc.createParagraph(); // 创建段落xwpfParagraphtop.setFontAlignment(2);xwpfParagraphtop.setStyle("标题 1");XWPFRun xwpfRuntop = xwpfParagraphtop.createRun(); // 创建段落文本xwpfRuntop.setText(String.format("标题")); // 设置文本
// xwpfRuntop.setFontFamily("微软雅黑");xwpfRuntop.setBold(true);xwpfRuntop.setFontSize(24);
// xwpfRuntop.addBreak();// 换行xwpfRuntop.addTab();XWPFParagraph xwpfParagraphtop1 = doc.createParagraph(); // 创建段落xwpfParagraphtop1.setFontAlignment(3);xwpfParagraphtop1.setStyle("正文");XWPFRun xwpfRuntop1 = xwpfParagraphtop1.createRun(); // 创建段落文本xwpfRuntop1.setText("- abcd"); // 设置文本
// xwpfRuntop1.setFontSize(12);
// xwpfRuntop1.addBreak();// 换行xwpfRuntop1.addTab();FileOutputStream out = null; // 创建输出流try {//需要的配置项writeItemBGGS(doc);writeItemNGDWQK(doc);writeItemNGZCQK(doc);writeItemDDZLQK(doc);if (System.getProperty("os.name").toLowerCase().contains("linux")) {filePath = "/usr/local/createfile/weekly/";} else {filePath = "D:\\hian\\createfile\\weekly\\";}filename = LocalDateTime.now().getYear() + "年" + LocalDateTime.now().getMonth().getValue() + "月-" + DateTime.now().getTime();File file = new File(filePath + filename + ".docx");if (!file.exists()) {file.getParentFile().mkdirs();file.createNewFile();}out = new FileOutputStream(file);doc.write(out);} catch (Exception e) {e.printStackTrace();} finally {if (out != null) {try {doc.close();out.close();} catch (IOException e) {e.printStackTrace();}}}}public void writeItemBGGS(XWPFDocument doc) {//编号等级CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();cTAbstractNum.setAbstractNumId(BigInteger.valueOf(10));CTLvl cTLvl = cTAbstractNum.addNewLvl();cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);cTLvl.addNewLvlText().setVal("%1.");cTLvl.addNewStart().setVal(BigInteger.valueOf(1));XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);XWPFNumbering numbering = doc.createNumbering();BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);BigInteger numID = numbering.addNum(abstractNumID);XWPFParagraph xwpfParagraphtext = doc.createParagraph(); // 创建段落xwpfParagraphtext.setAlignment(ParagraphAlignment.LEFT);xwpfParagraphtext.setNumID(numID);xwpfParagraphtext.setStyle("标题 1");XWPFRun xwpfRuntext = xwpfParagraphtext.createRun(); // 创建段落文本xwpfRuntext.setText("标题");xwpfRuntext.setBold(true);XWPFParagraph xwpfParagraphtext1 = doc.createParagraph(); // 创建段落XWPFRun xwpfRuntext1 = xwpfParagraphtext1.createRun(); // 创建段落文本xwpfRuntext1.setStyle("正文");xwpfRuntext1.setText("abcd");xwpfRuntext1.addBreak();// 换行numLevel++;}public void writeItemNGDWQK(XWPFDocument doc) {//编号等级CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();cTAbstractNum.setAbstractNumId(BigInteger.valueOf(10));CTLvl cTLvl = cTAbstractNum.addNewLvl();cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);cTLvl.addNewLvlText().setVal("%1.");cTLvl.addNewStart().setVal(BigInteger.valueOf(1));XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);XWPFNumbering numbering = doc.createNumbering();BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);BigInteger numID = numbering.addNum(abstractNumID);XWPFParagraph xwpfParagraphtext = doc.createParagraph(); // 创建段落xwpfParagraphtext.setAlignment(ParagraphAlignment.LEFT);xwpfParagraphtext.setNumID(numID);xwpfParagraphtext.setStyle("标题 1");XWPFRun xwpfRuntext = xwpfParagraphtext.createRun(); // 创建段落文本xwpfRuntext.setText("标题");xwpfRuntext.setBold(true);XWPFParagraph xwpfParagraphtext1 = doc.createParagraph(); // 创建段落XWPFRun xwpfRuntext1 = xwpfParagraphtext1.createRun(); // 创建段落文本xwpfRuntext1.setStyle("正文");xwpfRuntext1.setText("abcd");xwpfRuntext1.addBreak();// 换行numLevel++;}public void writeItemNGZCQK(XWPFDocument doc) {//编号等级CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();cTAbstractNum.setAbstractNumId(BigInteger.valueOf(10));CTLvl cTLvl = cTAbstractNum.addNewLvl();cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);cTLvl.addNewLvlText().setVal("%1.");cTLvl.addNewStart().setVal(BigInteger.valueOf(1));XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);XWPFNumbering numbering = doc.createNumbering();BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);BigInteger numID = numbering.addNum(abstractNumID);XWPFParagraph xwpfParagraphtext = doc.createParagraph(); // 创建段落xwpfParagraphtext.setAlignment(ParagraphAlignment.LEFT);xwpfParagraphtext.setNumID(numID);xwpfParagraphtext.setStyle("标题 1");XWPFRun xwpfRuntext = xwpfParagraphtext.createRun(); // 创建段落文本xwpfRuntext.setText("标题");xwpfRuntext.setBold(true);numLevel++;writeItemZCRRQK(doc);writeItemGFXZC(doc);writeItemXTHGQK(doc);}public void writeItemDDZLQK(XWPFDocument doc) {//编号等级CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();cTAbstractNum.setAbstractNumId(BigInteger.valueOf(10));CTLvl cTLvl = cTAbstractNum.addNewLvl();cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);cTLvl.addNewLvlText().setVal("%1.");cTLvl.addNewStart().setVal(BigInteger.valueOf(1));XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);XWPFNumbering numbering = doc.createNumbering();BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);BigInteger numID = numbering.addNum(abstractNumID);XWPFParagraph xwpfParagraphtext = doc.createParagraph(); // 创建段落xwpfParagraphtext.setAlignment(ParagraphAlignment.LEFT);xwpfParagraphtext.setNumID(numID);xwpfParagraphtext.setStyle("标题 1");XWPFRun xwpfRuntext = xwpfParagraphtext.createRun(); // 创建段落文本xwpfRuntext.setText("标题");xwpfRuntext.setBold(true);numLevel++;writeItemZLLXTJ(doc);writeItemZLXYTJ(doc);}public void writeItemZCRRQK(XWPFDocument doc) {//编号等级CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();cTAbstractNum.setAbstractNumId(BigInteger.valueOf(13));CTLvl cTLvl = cTAbstractNum.addNewLvl();cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);cTLvl.addNewLvlText().setVal(numLevel + ".%1");cTLvl.addNewStart().setVal(BigInteger.valueOf(1));XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);XWPFNumbering numbering = doc.createNumbering();BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);BigInteger numID = numbering.addNum(abstractNumID);XWPFParagraph xwpfParagraphtext = doc.createParagraph(); // 创建标题段落xwpfParagraphtext.setNumID(numID);xwpfParagraphtext.setStyle("标题 2");XWPFRun xwpfRuntext = xwpfParagraphtext.createRun(); // 创建段落文本xwpfRuntext.setText("标题");xwpfRuntext.setBold(true);XWPFParagraph xwpfParagraphtext1 = doc.createParagraph(); // 创建段落XWPFRun xwpfRuntext1 = xwpfParagraphtext1.createRun(); // 创建段落文本xwpfRuntext1.setStyle("正文");xwpfRuntext1.setText(String.format("abcd:"));
// xwpfRuntext1.addTab();
// xwpfRuntext1.addBreak();// 换行}public void writeItemGFXZC(XWPFDocument doc) {//编号等级CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();cTAbstractNum.setAbstractNumId(BigInteger.valueOf(13));CTLvl cTLvl = cTAbstractNum.addNewLvl();cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);cTLvl.addNewLvlText().setVal(numLevel + ".%1");cTLvl.addNewStart().setVal(BigInteger.valueOf(1));XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);XWPFNumbering numbering = doc.createNumbering();BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);BigInteger numID = numbering.addNum(abstractNumID);XWPFParagraph xwpfParagraphtext = doc.createParagraph(); // 创建标题段落xwpfParagraphtext.setNumID(numID);xwpfParagraphtext.setStyle("标题 2");XWPFRun xwpfRuntext = xwpfParagraphtext.createRun(); // 创建段落文本xwpfRuntext.setText("标题");xwpfRuntext.setBold(true);}public void writeItemXTHGQK(XWPFDocument doc) {//编号等级CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();cTAbstractNum.setAbstractNumId(BigInteger.valueOf(13));CTLvl cTLvl = cTAbstractNum.addNewLvl();cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);cTLvl.addNewLvlText().setVal(numLevel + ".%1");cTLvl.addNewStart().setVal(BigInteger.valueOf(1));XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);XWPFNumbering numbering = doc.createNumbering();BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);BigInteger numID = numbering.addNum(abstractNumID);XWPFParagraph xwpfParagraphtext = doc.createParagraph(); // 创建标题段落xwpfParagraphtext.setNumID(numID);xwpfParagraphtext.setStyle("标题 2");XWPFRun xwpfRuntext = xwpfParagraphtext.createRun(); // 创建段落文本xwpfRuntext.setText("标题");xwpfRuntext.setBold(true);}public void writeItemZLLXTJ(XWPFDocument doc) {//编号等级CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();cTAbstractNum.setAbstractNumId(BigInteger.valueOf(14));CTLvl cTLvl = cTAbstractNum.addNewLvl();cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);cTLvl.addNewLvlText().setVal(numLevel + ".%1");cTLvl.addNewStart().setVal(BigInteger.valueOf(1));XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);XWPFNumbering numbering = doc.createNumbering();BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);BigInteger numID = numbering.addNum(abstractNumID);XWPFParagraph xwpfParagraphtext = doc.createParagraph(); // 创建标题段落xwpfParagraphtext.setNumID(numID);xwpfParagraphtext.setStyle("标题 2");XWPFRun xwpfRuntext = xwpfParagraphtext.createRun(); // 创建段落文本xwpfRuntext.setText("标题");xwpfRuntext.setBold(true);}public void writeItemZLXYTJ(XWPFDocument doc) {//编号等级CTAbstractNum cTAbstractNum = CTAbstractNum.Factory.newInstance();cTAbstractNum.setAbstractNumId(BigInteger.valueOf(14));CTLvl cTLvl = cTAbstractNum.addNewLvl();cTLvl.addNewNumFmt().setVal(STNumberFormat.DECIMAL);cTLvl.addNewLvlText().setVal(numLevel + ".%1");cTLvl.addNewStart().setVal(BigInteger.valueOf(1));XWPFAbstractNum abstractNum = new XWPFAbstractNum(cTAbstractNum);XWPFNumbering numbering = doc.createNumbering();BigInteger abstractNumID = numbering.addAbstractNum(abstractNum);BigInteger numID = numbering.addNum(abstractNumID);XWPFParagraph xwpfParagraphtext = doc.createParagraph(); // 创建标题段落xwpfParagraphtext.setNumID(numID);xwpfParagraphtext.setStyle("标题 2");XWPFRun xwpfRuntext = xwpfParagraphtext.createRun(); // 创建段落文本xwpfRuntext.setText("标题");xwpfRuntext.setBold(true);XWPFParagraph xwpfParagraphtext1 = doc.createParagraph(); // 创建段落XWPFRun xwpfRuntext1 = xwpfParagraphtext1.createRun(); // 创建段落文本xwpfRuntext1.setStyle("正文");xwpfRuntext1.setText(String.format("abc"));}public static byte[] hexToBytes(String hexString) {HexBinaryAdapter adapter = new HexBinaryAdapter();byte[] bytes = adapter.unmarshal(hexString);return bytes;}}
相关文章:
使用 POI 在 Word 中重新开始编号、自定义标题格式
效果图 引入依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><!-- https…...
【java】default/private/public/protected比较
访问修饰符 访问修饰符本类同包子类其他privateYdefaultYYprotectedYYYpublicYYYY 总结: private、default、proteced、public访问范围依次增大、限制能力依次减弱;被private修饰的成员只能在本类中调用;default是默认类型,成员…...
面试热题(最长上升子序列)
给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 输入࿱…...
Vue 简版文件预览笔记
简版文件预览笔记 调用方法 <script lang"ts" setup>import {exportFileData,preViewFile,} from /xxx/tools.ts;import {fileDownload,} from /api/xxx/xx;// 预览方法const handleViewBtn () > {const filePath 获取预览地址;const urlFormat 获取预…...
数据结构--栈和队列
文章目录 栈的概念和结构栈的实现栈的数据结构栈的初始化和销毁出栈和入栈获取栈顶、大小,判空 队列的概念和结构队列的实现队列的数据结构队列的初始化和销毁队列的插入 队列的删除获取队头和队尾的数据获取队列长度和判空 栈和队列的一些题目1.有效的括号2.用队列…...
泰国的区块链和NFT市场调研
泰国的区块链和NFT市场调研 基本介绍 参考: https://zh.wikipedia.org/zh-hans/%E6%B3%B0%E5%9B%BD参考: https://hktdc.infogram.com/thsc–1h7k2303zo75v2x zz制度: 君主立宪制(议会制) 国王: 玛哈哇集拉…...
精彩回顾 | D-Day深圳 上海站:高频策略研发再提速
上周末,DolphinDB 分别在上海及深圳成功举办了两场 D-Day 分享会,来自国内头部券商、公募基金以及多家私募机构的数十位核心策略研发、数据分析专家们分享了 DolphinDB 在量化交易各个环节的使用经验,并基于与同类技术栈的优劣势对比…...
新法!《个人信息保护合规审计管理办法(征求意见稿)》解读
8月3日,依据《中华人民共和国个人信息保护法》等法律法规,国家互联网信息办公室起草了《个人信息保护合规审计管理办法(征求意见稿)》(下文简称“办法”),并向社会公开征求意见。 据悉ÿ…...
南大通用数据库-Gbase-8a-学习-37-delete误删数据恢复方法
一、前提 在delete误删数据之后,没有再对此表进行其他ddl、dml和load等操作,可以使用手动切换AB版本的方式来进行数据恢复。 二、环境 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数…...
【高光谱图像的去噪算法】通过全变异最小化对受激拉曼光谱图像进行去噪研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
UEditorPlus v3.3.0 图片上传压缩重构,UI优化,升级基础组件
UEditor是由百度开发的所见即所得的开源富文本编辑器,基于MIT开源协议,该富文本编辑器帮助不少网站开发者解决富文本编辑器的难点。 UEditorPlus 是有 ModStart 团队基于 UEditor 二次开发的富文本编辑器,主要做了样式的定制,更符…...
百度翻译API整合SpringBoot
案例背景,按照官方给的Demo,实在是太啰嗦了, 大致步骤 封装数据>签名>发送请求, 仔细一看劈里啪啦一大堆,最后还要手动关流关连接,难道整合到SpringBoot项目里面我还得为内存管理考虑 所以就有了如下需求 使用 RestTemplate的对象进行发送请求数据,RestTemplate由s…...
Spring @Primary、@Order、JSR @Priority作用与区别
前言 Primary、Order、Priority三个注解很常见,关于它们的异同,这里做个总结。 Primary、Order、Priority Primary Spring Primary控制注入优先级。 Order Spring Order控制注入到List中的排序,值越小优先级越高,不能是负数&am…...
【Mac】mac 系统下格式化U盘或移动硬盘为ext4格式
1. 打开终端,安装 homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"2. 安装之后再次运行此命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"…...
ubuntu20.4 sgx环境配置
一、driver安装 1.在该下载地址将3个.bin文件下载下来,下载地址:https://download.01.org/intel-sgx/latest/linux-latest/distro/ubuntu20.04-server/ 2.到下载文件夹下输入下面命令,以赋予.bin文件的执行权限 sudo chmod 777 sgx_linux_x64…...
01.图片下拉触底分页加载每张图片
需求点分析 图片列表滚动触底的逻辑 将图片id组成的一维数组根据指定个数一组拆分为二维数组定义一个索引初始值为-1,图片列表滚动触底,索引值自增,然后将拆分好的图片id二位数组对应的数据读出来放到图片id的数组图片根据列表新增的id取读取…...
“精准学习嵌入式开发:明确目标,提升技能“
嵌入式领域涵盖广泛,不可能一次性掌握所有知识。因此,明确学习目标和方向非常重要。选择感兴趣且与职业发展相关的领域进行深入学习是明智之举。 嵌入式技术在不断发展,过去与现在存在差异。选择学习当前行业的主流技术和趋势是明智选择。掌…...
C语言--联合体-共用体
有时候同一个内存空间存放类型不同,不同类型的变量共享一块空间 像结构体,但是有区别 1、 结构体元素有各自单独空间, 共用体元素共享空间,空间大小由最大类型确定 同一块空间,有时候存放char类型、有时候存放int型&am…...
echarts实现中国地图下钻进入下一级行政区(地图钻取)
获取geo数据: 可以使用node爬虫获取数据 最好多爬几遍,因为有时候会获取错误 实现逻辑 拥有geo数据后 请求geo数据注册地图 registerMap配置echarts增加事件监听(点击事件) 如果点击了,回到第一步。功能就是循环以…...
从0到1学会手写操作系统,我只用了2个小时
黑马嵌入式教程再出力作 重磅发布第三弹 《自己动手写嵌入式操作系统》 问:嵌入式开发不是只学单片机就行?为什么要学操作系统? 答:年轻人,别把路走窄了。且听我说↓↓↓ 嵌入式产品分为两大类:一类简单…...
Android + OpenCV 实战指南:从环境搭建到图像处理(超详细)
1. Android与OpenCV环境搭建全攻略 第一次接触OpenCV的Android开发者往往会卡在环境配置这一步。我当年踩过的坑现在可以帮你完美避开。OpenCV作为计算机视觉领域的瑞士军刀,在移动端同样能发挥强大威力,但首先得让它跑起来。 核心工具准备: …...
IndexTTS2快速搭建指南:最新V23镜像,情感语音合成效果展示
IndexTTS2快速搭建指南:最新V23镜像,情感语音合成效果展示 1. 引言 1.1 为什么选择IndexTTS2 V23 IndexTTS2 V23版本是目前最先进的语音合成工具之一,特别适合需要高质量、情感丰富的语音生成场景。这个版本最大的亮点在于情感控制能力的全面…...
Linux环境下CTC语音唤醒模型的一键部署教程
Linux环境下CTC语音唤醒模型的一键部署教程 1. 引言 语音唤醒技术现在越来越普及了,就像我们平时对智能音箱说"小爱同学"或者"天猫精灵"一样,设备听到特定关键词就会激活响应。今天要介绍的是一个专门为移动端设计的CTC语音唤醒模…...
Ollama部署EmbeddingGemma-300m常见问题全解:从报错到实战
Ollama部署EmbeddingGemma-300m常见问题全解:从报错到实战 1. 为什么选择EmbeddingGemma-300m? EmbeddingGemma-300m是谷歌推出的轻量级文本嵌入模型,仅有3亿参数却继承了Gemini系列模型的强大能力。这个模型特别适合需要在本地环境部署语义…...
Redis AOF 文件优化技巧
Redis作为高性能内存数据库,其持久化机制中的AOF(Append Only File)通过记录写操作命令确保数据安全,但随着运行时间增长,AOF文件可能膨胀至GB级别,影响性能。本文将分享几个关键优化技巧,帮助开…...
Zynq UltraScale+ PL中断深度解析:从硬件连接到软件响应的完整链路
Zynq UltraScale PL中断深度解析:从硬件连接到软件响应的完整链路 在异构计算架构中,中断机制如同神经系统般连接着可编程逻辑(PL)与处理系统(PS)。当工程师需要实现微秒级实时响应或构建高可靠性系统时&am…...
AI原生敏捷开发落地指南(Gartner 2024验证:交付周期压缩63%的关键转折点)
第一章:AI原生敏捷开发的范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 传统敏捷开发以人为核心、迭代交付为特征,而AI原生敏捷开发则将大模型能力深度嵌入需求分析、测试生成、代码补全与运维反馈闭环中,形成“感知—推理—执行—…...
2、 Verilog 代码规范
分类 Verilog 教程高级篇 不经意间看到几年前自己写的 FGPA 设计,代码风格勉强说的过去,但是逻辑设计方面的安全隐患比比皆是。许多初学者编写 Verilog 代码,基本都是按照 C 语言的思维和风格去设计,造成了很多不规范的共性问题。…...
不用二维码、不用车载定位,这篇论文把 AGV 视觉导航换了个思路
这篇 AGV 视觉论文很有意思:车上几乎不装定位传感器,靠“车间上方一只相机”也能导航? 摘要 这次换一篇和前面几篇都不重复的 AGV 视觉论文,不讲托盘检测、不讲叉车装卸、也不讲天花板视觉里程计,而是分析一篇很有“工…...
Java Stream API 的底层逻辑
Java Stream API的底层逻辑探秘 Java Stream API自Java 8引入后,彻底改变了集合操作的方式。它通过声明式编程风格,将复杂的迭代逻辑简化为链式调用,同时隐藏了底层实现的复杂性。但Stream并非简单的语法糖,其背后融合了惰性求值…...
