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

news2024/11/28 22:44:32

效果图

引入依赖

        <!-- 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;
	@PostConstruct
	public 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();
		//设置id
		ctStyle.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 defined

		style.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;
	}

}

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

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

相关文章

刷题笔记 day8

1004 最大连续1的个数 III 这道题要求将原数组中的0翻转成1&#xff0c;求出最大元素全是1的子数组长度&#xff0c;看这道题第一感觉还要将里面的0变成1&#xff0c;感觉这道题解决起来很麻烦&#xff0c;但是我们可以转变思路&#xff0c;找出其最大子数组&#xff0c;使得子…

git 版本管理工具 学习笔记

git 学习笔记 目录 一、git是什么 二、创建仓库 三、工作区域和文件状态 四、添加和提交文件 五、回退版本 &#xff08;了解&#xff09; 六、查看差异 七、删除文件 八、.gitignore文件&#xff08;了解&#xff09; 九、github ssh-key配置 十、本地仓库和远程仓库内…

Shell - 备份mysql的N种姿势

文章目录 mysqldump --help备份mysql的N种姿势 mysqldump --help mysqldump 是一个常用的命令行工具&#xff0c;用于备份和还原 MySQL 数据库。 [rootVM-24-3-centos blg]# mysqldump --help mysqldump Ver 10.13 Distrib 5.6.50, for Linux (x86_64) Copyright (c) 2000,…

node爬取中国行政区域geo数据

依赖 {"dependencies": {"axios": "^1.4.0","colors": "^1.4.0","express": "^4.18.2","fs": "^0.0.1-security"} }数据来源 https://datav.aliyun.com/portal/school/atlas/are…

数据可视化(八)堆叠图,双y轴,热力图

1.双y轴绘制 #双Y轴可视化数据分析图表 #add_subplot() dfpd.read_excel(mrbook.xlsx) x[i for i in range(1,7)] y1df[销量] y2df[rate] #用来正常显示负号 plt.rcParams[axes.unicode_minus]False figplt.figure() ax1fig.add_subplot(1,1,1)#一行一列&#xff0c;第一个区域…

《Zookeeper》从零开始学Zookeeper源码(二)之数据序列化与通信协议

目录 序列化与反序列化通信协议请求头的数据结构响应头的数据结构 序列化与反序列化 zookeeper的客户端与服务端、服务端与服务端之间会进行一系列的网络通信&#xff0c;在进行数据的传输过程中就涉及到序列化与反序列化&#xff0c;zookeeper使用Jute作为它的序列化组件&…

FreeRTOS的线程间通信

一、分类 FreeRTOS的线程间通信分为这几大类 由于我还在学习中&#xff0c;目前显从信号开始记录学习 二、逐块讲解 1、信号&#xff08;osSignalWait osSignalSet&#xff09; FreeRTOS从V8.2.0版本开始提供任务通知这个功能&#xff0c;每个任务多有一个32位的通知值&am…

OLAP ModelKit Crack,ADO.NET和IList

OLAP ModelKit Crack,ADO.NET和IList OLAP ModelKit是一个多功能的.NET OLAP组件&#xff0c;用C#编写&#xff0c;只包含100%托管代码。它具有XP主题的外观&#xff0c;并能够使用任何.NET数据源(ADO.NET和IList)。借助任何第三方组件(尤其是图表组件)呈现数据的能力扩展了产品…

flink kafka消费者如何处理kafka主题的rebalance

背景&#xff1a; 我们日常使用kafka客户端消费kafka主题的消息时&#xff0c;当消费者退出/加入消费者组&#xff0c;kafka主题分区数有变等事件发生时&#xff0c;都会导致rebalance的发生&#xff0c;此时一般情况下&#xff0c;如果我们不自己处理offset&#xff0c;我们不…

那些被忽视的Python核心功能...

最实用、最简单、最优美……近些年&#xff0c;大家学习Python的热潮从未消退&#xff1b;无论是数据分析还是科学计算都少不了Python的身影。 Python也没有让人失望&#xff0c;Java用100行代码写出的程序&#xff0c;用Python十行就能搞定&#xff01; 当你要说Hello World…

银河麒麟QT连接DM8数据库

1. 安装达梦8 官网下载, 按照官方文档进行安装即可. 2. 安装unixodbc 1> 下载odbc安装包 unixODBC-2.3.7pre.tar.gz 2> 解压 tar -xvf unixODBC-2.3.7pre.tar.gz3> 编译 ./configure -prefix /usr/local make && make install4> 查找配置 odbcinst -j5…

Redis集群部署(docker-compose)

更多更新信息请关注“技术客格”公众号 使用3主+3从的部署方式 一、服务器规划 序号 服务器 端口 节点名称 备注 1 192.168.1.120 6179 redis-1 2 192.168.1.1206279 redis-2 3 192.168.1.1206379 redis-3 4 192.168.1.1206479 redis-4 5 192.168.1.1206579 redis-5 6 192.…

多线程的创建,复习匿名内部类,Thread的一些方法,以及lambda的变量捕捉,join用法

一、&#x1f49b; Java的Thread类表示线程 1.创建类&#xff0c;继承Thread重写run方法 2.创建类&#xff0c;实现Runnable重写run方法 3.可以继承Thread重写run基于匿名内部类 4.实现Runnable重写run基于匿名内部类 5.lamdba表达式表示run方法的内容&#xff08;推荐&#x…

一、安全世界观

文章目录 1、 Web安全简史1.1 中国黑客简史1.2 黑客技术的发展历程1.3 web安全的兴起 2、黑帽子、白帽子3、安全的本质4、安全三要素5、如何实施安全评估5.1 资产等级划分5.2 威胁分析5.3 风险分析5.4 设计安全方案 6、白帽子兵法6.1 Secure By Default6.2 纵深防御原则6.3 数据…

在Raspberry Pi 4上安装Ubuntu 20.04 + ROS noetic(不带显示器)

在Raspberry Pi 4上安装Ubuntu 20.04 ROS noetic&#xff08;不带显示器&#xff09; 1. 所需设备 所需设备&#xff1a; 树莓派 4 B 型 wifi microSD 卡&#xff1a;最小 32GB MicroSD 转 SD 适配器 &#xff08;可选&#xff09;显示器&#xff0c;鼠标等 2. 树莓派…

积累常见的有针对性的python面试题---python面试题001

1.考点列表的.remove方法的参数是传入的对应的元素的值,而不是下标 然后再看remove这里,注意这个是,删除写的那个值,比如这里写3,就是删除3, 而不是下标. remove不是下标删除,而是内容删除. 2.元组操作,元组不支持修改,某个下标的内容 可以问他如何修改元组的某个元素 3.…

Git Submodule 更新子库失败 fatal: Unable to fetch in submodule path

编辑本地目录 .git/config 文件 在 [submodule “Assets/CommonModule”] 项下 加入 fetch refs/heads/:refs/remotes/origin/

sigmoid ReLU 等激活函数总结

sigmoid ReLU sigoid和ReLU对比 1.sigmoid有梯度消失问题&#xff1a;当sigmoid的输出非常接近0或者1时&#xff0c;区域的梯度几乎为0&#xff0c;而ReLU在正区间的梯度总为1。如果Sigmoid没有正确初始化&#xff0c;它可能在正区间得到几乎为0的梯度。使模型无法有效训练。 …

如何让子组件,router-view,呈现左右分布格局

1.用浮动进行浮动布局&#xff0c;定义一个大盒子&#xff0c;把浮动的样式写在公共样式里&#xff08;这里在main.js里定义一下全局布局&#xff09;。 2、能够在右边显示了

小研究 - MySQL 分区分表的设计及实(一)

随着信息技术的快速发展&#xff0c;数据量越来越大&#xff0c;海量的表查询操作需要消耗大量的时间&#xff0c;成为影响数据库访问性能提高的主要因素。为了提升数据库操作的查询效率和用户体验&#xff0c;在关系型数据库管理系统(MySQL)中通过 range 分区和 Merge 存储&am…