当前位置: 首页 > news >正文

java 使用zxing生成条形码(可自定义文字位置、边框样式)

最新工作中遇到生成条形码的需求,经过一番摸索之后找到了zxing这个工具类,实现效果如下:

在这里插入图片描述

首先引入依赖:
<!--    条形码生成器    --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.0.0</version></dependency>
1234567891011AI写代码
工具类实现
public class GoogleBarCodeUtils {/*** 条形码宽度*/private static final int WIDTH = 440;/*** 条形码高度*/private static final int HEIGHT = 100;/*** 加文字 条形码*/private static final int WORDHEIGHT = 240;/*** 右上角文字*/private static final String RIGHT_UP_WORDS = "营销服务中心";/*** 条形码右下角第一段文字*/private static final String RIGHT_DOWN_FIRST_WORDS = "所属单位: xxxxx公司";private static final String RIGHT_DOWN_SECOND_WORDS = "生产厂家: xxxxxxxx有限公司";/*** 条形码左下角第一段文字*/private static final String LEFT_DOWN_FIRST_WORDS = "设备类型: xxxxxx";private static final String LEFT_DOWN_SECOND_WORDS = "准确度等级: xxxxx";/*** 设置 条形码参数*/private static Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>() {private static final long serialVersionUID = 1L;{// 设置编码方式put(EncodeHintType.CHARACTER_SET, "utf-8");//容错级别 这里选用最高级H级别put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);put(EncodeHintType.MARGIN, 0);}};/*** 生成 图片缓冲** @param vaNumber VA 码* @return 返回BufferedImage* @author myc*/public static BufferedImage getBarCode(String vaNumber) {try {Code128Writer writer = new Code128Writer();// 编码内容, 编码类型, 宽度, 高度, 设置参数BitMatrix bitMatrix = writer.encode(vaNumber, BarcodeFormat.CODE_128, WIDTH, HEIGHT, hints);return MatrixToImageWriter.toBufferedImage(bitMatrix);} catch (WriterException e) {e.printStackTrace();}return null;}/*** 把带logo的二维码下面加上文字** @param image   条形码图片* @param equipNo 设备编号* @return 返回BufferedImage* @author myc*/public static BufferedImage insertWords(BufferedImage image,String equipNo) {// 新的图片,把带logo的二维码下面加上文字if (StringUtils.isNotEmpty(equipNo)) {BufferedImage outImage = new BufferedImage(WIDTH, WORDHEIGHT, BufferedImage.TYPE_INT_RGB);Graphics2D g2d = outImage.createGraphics();// 抗锯齿setGraphics2D(g2d);// 设置白色setColorWhite(g2d);//设置边框setDrawRect(g2d);// 设置虚线边框setDrawRectDottedLine(g2d);// 画条形码到新的面板g2d.drawImage(image, 10, 40, image.getWidth() - 20, image.getHeight(), null);// 画文字到新的面板Color color = new Color(0, 0, 0);g2d.setColor(color);// 字体、字型、字号g2d.setFont(new Font("微软雅黑", Font.PLAIN, 12));//文字长度String str = equipNo.replace("", "  ").trim();int strWidth = g2d.getFontMetrics().stringWidth(str);//总长度减去文字长度的一半  (居中显示)
//            int wordStartX=(WIDTH - strWidth) / 2;int wordStartX = (WIDTH - strWidth) / 2;//height + (outImage.getHeight() - height) / 2 + 12int wordStartY = HEIGHT + 20;//右上角文字长度int rightUpWordsWidth = WIDTH - g2d.getFontMetrics().stringWidth(RIGHT_UP_WORDS);//左上角文字长度String printDate = "打印日期 " + DateUtil.getCurrentTime("yyyy-MM-dd");int leftUpWordsWidth = WIDTH - g2d.getFontMetrics().stringWidth(printDate);//左下角第一 文字长度int leftDownFirstWordsWidth = WIDTH - 20 - g2d.getFontMetrics().stringWidth(LEFT_DOWN_FIRST_WORDS);// 画文字-上部分g2d.drawString(RIGHT_UP_WORDS, 20, 30);g2d.drawString(printDate, leftUpWordsWidth - 20, 30);//文字-下部分g2d.drawString(str, wordStartX, wordStartY + 38);g2d.drawString(RIGHT_DOWN_FIRST_WORDS, 20, wordStartY + 56);g2d.drawString(RIGHT_DOWN_SECOND_WORDS, 20, wordStartY + 76);g2d.drawString(LEFT_DOWN_FIRST_WORDS, leftDownFirstWordsWidth, wordStartY + 56);g2d.drawString(LEFT_DOWN_SECOND_WORDS, leftDownFirstWordsWidth, wordStartY + 76);g2d.dispose();outImage.flush();return outImage;}return null;}/*** 设置 Graphics2D 属性  (抗锯齿)** @param g2d Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制*/private static void setGraphics2D(Graphics2D g2d) {g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);g2d.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_DEFAULT);Stroke s = new BasicStroke(1, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);g2d.setStroke(s);}/*** 设置背景为白色** @param g2d Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制*/private static void setColorWhite(Graphics2D g2d) {g2d.setColor(Color.WHITE);//填充整个屏幕g2d.fillRect(0, 0, 600, 600);//设置笔刷g2d.setColor(Color.BLACK);}/*** 设置边框** @param g2d Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制*/private static void setDrawRect(Graphics2D g2d) {//设置笔刷g2d.setColor(Color.DARK_GRAY);g2d.drawRect(5, 5, 425, 220);}/*** 设置边框虚线点** @param g2d Graphics2D提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制*/private static void setDrawRectDottedLine(Graphics2D g2d) {//设置笔刷g2d.setColor(Color.BLUE);BasicStroke stroke = new BasicStroke(0.5f, BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND, 0.5f, new float[]{1, 4}, 0.5f);g2d.setStroke(stroke);g2d.drawRect(0, 0, 435, 230);}
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182AI写代码
在处理最外层虚线点边框时,遇到了一些问题,然后把可能用到的整理如下:
  1. Graphics2D drawString 画 字符串
  2. Graphics2D setBackground(Color.WHITE) + clearRect(0, 0, 120, 60) --> 画背景图(大小充满整张图片)
  3. Graphics2D setStroke 设定画笔的粗细以及颜色,线条的特征,比如实线、虚线
  4. Graphics2D drawRect 画 矩形,以整张图片的大小为数据
设置虚线我们用到的是 setStroke 和 drawRect 方法函数,主要我们要了解stroke的设置,每个属性的含义:

BasicStroke(float width, int cap, int join, float miterlimit,float dash[], float dash_phase)

width: 线条的宽度;
cap:线条充满的幅度  CAP_BUTT, CAP_ROUND or CAP_SQUARE;
jion:线端交接的形状:比如圆角  JOIN_ROUND、三角  JOIN_MITER、平滑  JOIN_BEVEL ;
miterlimit: 配合JOIN_MITER使用,防止三角边的长度过长;
dash[]: 虚线的定义:“线+缺口+线+缺口+线+缺口… 比如: new float[] { 1, 4};
dash_phase 线条的偏移:与虚线有关,按照api定义,比如虚线 { 1, 4 }, 第一根线长 1,如何dash_phase为4,那么,整条虚线向后迁移;
123456AI写代码

main 方法测试:

public static void main(String[] args) throws IOException {BufferedImage image = insertWords(getBarCode("34101020100000112340"), "34101020100000112340");ImageIO.write(image, "jpg", new File("E:/barcode.png"));}
1234AI写代码

结果如图:
在这里插入图片描述

webController接口: 后端生成文件流传给前端处理

    @RequestMapping("/getBarCode")@ApiOperation(value = "生成条形码")public void getBarCode(@RequestParam("equipNo") Long equipId,HttpServletResponse response) throws IOException {// 设置响应流信息response.setContentType("image/jpg");response.setHeader("Pragma", "no-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);OutputStream stream = response.getOutputStream();BufferedImage image = GoogleBarCodeUtils.insertWords(            GoogleBarCodeUtils.getBarCode(String.valueOf(equipNo)),equipNo);        ImageIO.write(image, "jpg", stream);}
1234567891011AI写代码
前端Vue调用后端接口:
 // 点击打印条形码handlePrintOne(row) {log('row',row)this.barCodeRow = row;let equipNo = row.equipNo;axios.request({url: Global.BASE_API_URL + '/file/getBarCode',responseType: 'blob',method: 'post',params:{equipNo}}).then(res => {let blob = new Blob([res.data],{type: "image/png"});let url = window.URL.createObjectURL(blob);this.barCodeUrl=url;this.dialogImgVisible = true}), (error) => {this.$message({type: 'warning',message: '系统错误,请联系管理员!'});}},
12345678910111213141516171819202122AI写代码

效果如图:
在这里插入图片描述

点击下载按钮进行条形码的本地下载
handleDownload(){// 生成一个a元素let a = document.createElement("a");// 创建一个单击事件let event = new MouseEvent("click");// 设置图片名称a.download = this.barCodeRow.equipNo || "条形码";// 将生成的URL设置为a.href属性a.href = this.barCodeUrl;// 触发a的单击事件a.dispatchEvent(event);this.dialogImgVisible = false;},
12345678910111213AI写代码

在这里插入图片描述

到这里就是我对zxing生成条形码操作的简单理解和实现,欢迎随时进行交流和补充。

转至:https://blog.csdn.net/qq_40230848/article/details/121520931

相关文章:

java 使用zxing生成条形码(可自定义文字位置、边框样式)

最新工作中遇到生成条形码的需求&#xff0c;经过一番摸索之后找到了zxing这个工具类&#xff0c;实现效果如下&#xff1a; 首先引入依赖&#xff1a; <!-- 条形码生成器 --><dependency><groupId>com.google.zxing</groupId><artifactId&g…...

4.3/Q1,Charls最新文章解读

文章题目&#xff1a;Longitudinal trajectories of disability index and associated factors in Chinese older adults DOI&#xff1a;10.1016/j.jnha.2025.100530 中文标题&#xff1a;中国老年人残疾指数纵向轨迹及相关因素 发表杂志&#xff1a;J Nutr Health Aging 影响…...

CSS- 2.1 实战之图文混排、表格、表单、学校官网一级导航栏

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 系…...

Android studio 实现弹出表单编辑界面

方法 1&#xff1a;使用 AlertDialog&#xff08;简单表单&#xff09; 适用于简单的表单场景。 1. 创建表单布局&#xff08;XML&#xff09; 在 res/layout 中新建 dialog_form.xml&#xff1a; <?xml version"1.0" encoding"utf-8"?> <L…...

涂色不踩雷:如何优雅解决 LeetCode 栅栏涂色问题

文章目录 摘要描述例子&#xff1a; 题解答案&#xff08;Swift&#xff09;题解代码分析动态规划核心思路初始条件 示例测试及结果示例 1&#xff1a;示例 2&#xff1a;示例 3&#xff1a; 时间复杂度空间复杂度总结实际场景联系 摘要 在用户体验和界面设计中&#xff0c;颜…...

WL-G4048 Multi-Port PCIe 4.0 Switch

系列文章目录 文章目录 系列文章目录《WL-G4048 Multi-Port PCIe 4.0 Switch数据手册》总结一、芯片介绍二、芯片规格介绍&#xff08;一&#xff09;功能指标&#xff08;二&#xff09;管理调试和监控&#xff08;三&#xff09;参考时钟&#xff08;四&#xff09;系统复位 …...

基于Huber函数和最大相关熵的抗差滤波算法

最大熵滤波&#xff08;Maximum Entropy Filtering&#xff09;常用于信号处理中的谱估计和噪声抑制&#xff0c;尤其适用于短数据序列的高分辨率谱分析。 一、最大熵滤波算法原理 核心思想&#xff1a;在满足已知自相关函数约束的条件下&#xff0c;使信号的熵最大化。 数学形…...

力扣-39.组合总和

题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被…...

医学图像分析中的大规模基准测试与增强迁移学习|文献速递-深度学习医疗AI最新文献

Title 题目 Large-scale benchmarking and boosting transfer learning for medical imageanalysis 医学图像分析中的大规模基准测试与增强迁移学习 01 文献速递介绍 将在大规模摄影数据集&#xff08;如ImageNet&#xff09;上预训练的模型微调至医学图像领域&#xff08…...

深入浅出横向联邦学习、纵向联邦学习、联邦迁移学习

深入浅出解析横向联邦学习&#xff08;Horizontal Federated Learning&#xff09;、纵向联邦学习&#xff08;Vertical Federated Learning&#xff09;和联邦迁移学习&#xff08;Federated Transfer Learning&#xff09; 有多个机构&#xff08;比如几家不同的银行&#x…...

vue复杂数据类型多层嵌套的监听

vue复杂数据类型多层嵌套的监听 本来看前辈的做法是watch的嵌套&#xff0c;遇到这种复杂的数据结构还是不多&#xff0c;分享一下前辈的做法 let stopChildWatchList [] // 用于存放每个子监听器watch(() > data,(val) > {// 清除旧监听stopChildWatchList.forEach(…...

windows系统中下载好node无法使用npm

原因是 Windows PowerShell禁用导致的npm无法正常使用 解决方法管理员打开Windows PowerShell 输入Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 按Y 确认就解决了...

使用 Docker 部署 React + Nginx 应用教程

目录 1. 创建react项目结构2. 创建 .dockerignore3. 创建 Dockerfile4. 创建 nginx.conf5. 构建和运行6. 常用命令 1. 创建react项目结构 2. 创建 .dockerignore # 依赖目录 node_modules npm-debug.log# 构建输出 dist build# 开发环境文件 .git .gitignore .env .env.local …...

顶层设计-IM系统架构

一、系统总体架构概览 即时通讯&#xff08;IM&#xff09;系统的核心目标&#xff0c;是让用户可以随时随地稳定地发送和接收消息。为了支撑成千上万用户同时在线交流&#xff0c;我们需要将整个系统划分成多个专职模块&#xff0c;每个模块只负责一件事情&#xff0c;彼此协同…...

Maven Deploy的依赖与引用方的依赖不同

提供的依赖&#xff1a;dependency:tree - com.alibaba.csp:sentinel-springboot-starter:jar:3.0.1-SNAPSHOT:compile [INFO] | - com.alibaba.csp:sentinel-datasource-nacos:jar:3.0.1:compile [INFO] | - com.alibaba.csp:sentinel-datasource-extension:jar:3.0.1:compil…...

如何让 Google 收录 Github Pages 个人博客

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 如何确认自己的网站有没有被 google 收录 假设网址是&#xff1a;https://cyrus-studio.github.io/blog 搜索&#xff1a;site:https://cyrus-studio.github…...

物体雅克比、空间雅克比、解析雅克比、几何雅克比

在机器人学中&#xff0c;雅可比矩阵是连接广义坐标速度与末端执行器速度的关键工具。根据应用场景和参考系的不同&#xff0c;雅可比矩阵可分为物体雅可比&#xff08;Body Jacobian&#xff09;、空间雅可比&#xff08;Space Jacobian&#xff09;、解析雅可比&#xff08;A…...

PCL PolygonMesh 与 TextureMesh 源码阅读与简单测试

Title: PCL PolygonMesh 与 TextureMesh 源码阅读与简单测试 文章目录 I . PolygonMesh1. PolygonMesh 结构体2. Vertices 结构体与点云索引3. 测试 PolygonMesh II. TextureMesh1. TextureMesh 结构体2. TexMaterial 结构体3. 纹理坐标与纹理坐标索引4. 测试 TextureMesh 以下…...

CSS面试题汇总

在前端开发领域&#xff0c;CSS 是一项不可或缺的技术。无论是页面布局、样式设计还是动画效果&#xff0c;CSS 都扮演着重要的角色。因此&#xff0c;在前端面试中&#xff0c;CSS 相关的知识点往往是面试官重点考察的内容。为了帮助大家更好地准备面试&#xff0c;本文汇总了…...

光谱相机的空间分辨率和时间分辨率

一、空间分辨率 ‌定义与参数‌ ‌概念‌&#xff1a;指单个像素对应实际地物的最小尺寸&#xff0c;常用地面采样距离&#xff08;GSD&#xff0c;单位&#xff1a;米&#xff09;或像素大小&#xff08;单位&#xff1a;微米&#xff09;表示。 ‌分类‌&#xff1a; 高空…...

【研0学习计划表】

前言 以下学习计划并不固定&#xff1a; 1.若当前阶段的学习任务学习结束&#xff0c;对下一阶段的学习计划进行适当调整&#xff0c;提前进入下一阶段学习任务。 若当前阶段学习任务未完成&#xff0c;则根据每一阶段的学习情况&#xff0c;进行学习总结&#xff0c;然后对下…...

还没用过智能文档编辑器吗?带有AI插件的ONLYOFFICE介绍

在当今激烈的数字化竞争中&#xff0c;文档处理效率直接影响企业的决策与响应速度。然而&#xff0c;许多办公平台仅支持基础流程&#xff0c;查阅、批注和修改仍需借助外部工具&#xff0c;增加了操作复杂性和沟通成本。本文将探讨如何在自己的网站、平台、系统或者服务中集成…...

机器学习前言2

1.机器学习 2.机器学习模型 3.模型评价方法 4.如何选择合适的模型 介绍 机器学习&#xff08;Machine Learning, ML&#xff09;是人工智能&#xff08;AI&#xff09;的核心分支&#xff0c;致力于通过数据和算法让计算机系统自动“学习”并改进性能&#xff0c;而无需显式编…...

在多个SpringBoot程序中./相对路径下隐患、文件覆盖问题

概述 两个 Spring Boot 应用生成的配置文件被覆盖&#xff0c;是因为 ​相对路径的解析依赖于当前工作目录&#xff08;Working Directory&#xff09;​&#xff0c;而你可能在运行应用时未正确设置各自的工作目录。以下是具体原因和解决方案&#xff1a; 原因分析 ​相对路径…...

弦理论的额外维度指的是什么,宇宙中有何依据

弦理论中的额外维度是解释微观世界与宏观宇宙矛盾的关键假设之一。它们并非科幻中的平行宇宙&#xff0c;而是通过严谨的数学框架提出&#xff0c;并可能留下可观测的宇宙学痕迹。以下是具体解析&#xff1a; 一、弦理论为何需要额外维度&#xff1f; 数学自洽性要求 弦理论中…...

FC7300 GPT MCAL 配置引导

一、配置约束 FCPIT:仅FC7240型号芯片支持。如果GPT模块与PWM/ICU/OCU模块使用相同的FTU实例,配置工具将报告一个错误。如果GPT通道使用FTU,时钟源来自PCC,则GptFtuChannelClkSrc必须选择GPT_FTU_BUS_CLK。二、MCU 组件 - 配置WDG采用的定时器时钟 Examle:WDG选用AONTIMER…...

LangFlow技术深度解析:可视化编排LangChain应用的新范式 -(2)流编辑器系统

Flow Editor System | langflow-ai/langflow | DeepWiki 流编辑器系统 相关源文件 流编辑器系统是 Langflow 的核心交互式组件&#xff0c;允许用户直观地创建、编辑和管理 LLM 驱动的应用程序。它提供了一个直观的画布&#xff0c;用户可以在其中添加节点、将其与边缘连接并…...

okcc呼叫中心系统搭建的方案方式

传统企业呼叫中心多采用 PC和手机软件&#xff0c;很难与客户保持良好的沟通。因此&#xff0c;需要建设一套呼叫中心系统来实现与客户实时有效沟通。那么&#xff0c;呼叫中心搭建的方案方式有哪些呢?下面详细介绍一下。 呼叫中心系统的搭建方式需根据企业规模、预算和业务需…...

asp.net IHttpHandler 对分块传输编码的支持,IIs web服务器后端技术

IHttpHandler&#xff0c;不支持分块传输编码&#xff08;Chunked Transfer&#xff09;吧&#xff1f; IHttpHandler 对分块传输编码的支持 实际上&#xff0c;IHttpHandler 完全支持分块传输编码&#xff08;Chunked Transfer Encoding&#xff09;&#xff0c;但具体行为取…...

芍药BAHD酰基转移酶-文献精读128

PoDPBT, a BAHD acyltransferase, catalyses the benzoylation in paeoniflorin biosynthesis in Paeonia ostii PoDPBT&#xff0c;一种BAHD酰基转移酶&#xff0c;在芍药&#xff08;Paeonia ostii&#xff09;中催化芍药苷生物合成中的苯甲酰化反应。 摘要 PoDPBT是属于BA…...

GTS-400 系列运动控制器板卡介绍(三十三)---运动程序单线程累加求和

运动控制器函数库的使用 运动控制器驱动程序、dll 文件、例程、Demo 等相关文件请通过固高科技官网下载,网 址为:www.googoltech.com.cn/pro_view-3.html 1 Windows 系统下动态链接库的使用 在 Windows 系统下使用运动控制器,首先要安装驱动程序。在安装前需要提前下载运动…...

C# 面向对象 构造函数带参无参细节解析

继承类构造时会先调用基类构造函数&#xff0c;不显式调用基类构造函数时&#xff0c;默认调用基类无参构造函数&#xff0c;但如果基类没有写无参构造函数&#xff0c;会无法调用从而报错&#xff1b;此时&#xff0c;要么显式的调用基类构造函数&#xff0c;并按其格式带上参…...

数字化工厂升级引擎:Modbus TCP转Profinet网关助力打造柔性生产系统

在当今的工业自动化领域&#xff0c;通信协议扮演着至关重要的角色。Modbus TCP和Profinet是两种广泛使用的工业通信协议&#xff0c;它们分别在不同的应用场景中发挥着重要作用。然而&#xff0c;有时我们可能需要将这两种协议进行转换&#xff0c;以实现不同设备之间的无缝通…...

【编译原理】词法分析器

//简单实现&#xff0c;伪代码 int code,value; strToken :" "; //置strToken为空串 GetChar();GetBC(); if(IsLetter()) beginwhile(IsLetter() or IsDigit())beginConcat();GetChar();endRetract();code:Reserve();if(code0)beginvalue:InsertId(strToken);retu…...

记录一次vue项目页面内嵌iframe页面实现跨域上传和下载附件的功能

功能背景&#xff1a;项目部署在外网&#xff0c;然后其中有一个功能需要上传下载附件&#xff0c;附件是上传到华为云对象存储服务OBS中&#xff08;私有云&#xff09;&#xff0c;所以采用iframe嵌套页面的方式解决跨域问题。 实现思路&#xff1a; 1、父窗口封装一个组件专…...

【Win32 API】 lstrcpyA()

作用 将字符串复制到指定的字符串缓冲区。 函数 LPSTR lstrcpyA(LPSTR lpString1, LPCSTR lpString2); 参数 lpString1 类型&#xff1a;LPTSTR 一个缓冲区&#xff0c;用于接收由 lpString2 参数指向的字符串的内容。 缓冲区必须足够大才能包含字符串&#xff0c;包括终止…...

报表控件stimulsoft教程:如何在报表和仪表板中创建热图

Stimulsoft Ultimate &#xff08;原Stimulsoft Reports.Ultimate&#xff09;是用于创建报表和仪表板的通用工具集。该产品包括用于WinForms、ASP.NET、.NET Core、JavaScript、WPF、PHP、Java和其他环境的完整工具集。无需比较产品功能&#xff0c;Stimulsoft Ultimate包含了…...

Axure疑难杂症:剖析面包屑导航“用户不迷路”(玩转导航)

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:剖析面包屑导航“用户不迷路” 主要内容:面包屑导航各种做法 应用场景:页面导航、页面路径、用户选择路径、…...

中exec()函数因$imagePath参数导致的命令注入漏洞

exec(zbarimg -q . $imagePath, $barcodeList, $returnVar); 针对PHP中exec()函数因$imagePath参数导致的命令注入漏洞&#xff0c;以下是安全解决方案和最佳实践&#xff1a; 一、漏洞原理分析 直接拼接用户输入$imagePath到系统命令中&#xff0c;攻击者可通过注入特殊字…...

HTML常用标签用法全解析:构建语义化网页的核心指南

HTML作为网页开发的基石&#xff0c;其标签的合理使用直接影响页面的可读性、SEO效果及维护性。本文系统梳理HTML核心标签的用法&#xff0c;结合语义化设计原则与实战示例&#xff0c;助你构建规范、高效的网页结构。 一、基础结构与排版标签 1.1 文档结构 <!DOCTYPE htm…...

【Linux】动静态库链接原理

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲Linux——动静态库链接原理 &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C学习笔记&#xff0c;C语言入门基础…...

Axure设计的“广东省网络信息化大数据平台”数据可视化大屏

在数据驱动决策的时代&#xff0c;数据可视化大屏成为了展示数据、洞察趋势的重要工具。今天&#xff0c;让我们一同深入了解由Axure设计的“广东省网络信息化大数据平台”数据可视化大屏&#xff0c;看看它如何通过精心的布局和丰富的图表类型&#xff0c;将复杂的数据以直观易…...

linux安装宝塔面板到数据盘

操作很简单&#xff0c;假如数据盘挂载在cipan1&#xff0c;在数据盘新建目录www&#xff0c;为了方便对应。 执行一下命令&#xff0c;创建软连接 ln -s /cipan1/www www 此时&#xff0c;根目录就出现了www文件夹 下面正常安装宝塔即可...

数学实验(Matlab编程基础)

一、函数文件 Matlab编程基础 Matlab作为一种广泛应用于科学计算的工具软件&#xff0c;不仅具有强大的数值计算、符号计算、矩阵运算能力和丰富的绘图功能&#xff0c;同时也具有和C、FORTRAN等高级语言一样进行程序设计 利用Matlab的程序控制功能&#xff0c;可以将有关Ma…...

不同坐标系下MATLAB绘制阵列的方向图

不同坐标系下MATLAB绘制阵列的方向图 球坐标系&#xff0c;极坐标系、直角坐标系 文章目录 前言一、极坐标系二、球坐标系三、直角坐标系总结 前言 \;\;\;\;\; 在阵列信号处理和天线设计中&#xff0c;方向图&#xff08;Pattern&#xff09;是描述波束形成性能的关键工具&…...

python可视化:北方省市人口流动与春运数据综合分析5

python可视化&#xff1a;北方省市人口流动与春运数据综合分析5 一、北方省市常住人口数据及变化趋势&#xff08;2023-2024第一季度&#xff09; 1. 主要城市常住人口数据&#xff08;按城市等级分类&#xff09; 城市类型2023Q1常住人口(万)2024Q1常住人口(万)变化量(万)变…...

Java并发编程-线程池(四)

文章目录 线程池实现原理WorkerWorker 核心设计总结 runWorker(Worker w)总结 线程池实现原理 上一篇我们看了 addWork 方法&#xff0c;那接下来就让我们详细看看内部类Worker。 Worker private final class Workerextends AbstractQueuedSynchronizerimplements Runnable …...

力扣热题——最长相邻不相等子序列 |

题目要求从字符串数组 words 中选出一个最长的子序列&#xff0c;使得该子序列中相邻字符串对应的 groups 数组中的值不同。通过贪心算法&#xff0c;可以高效地解决该问题。具体步骤为&#xff1a;初始化一个结果列表&#xff0c;遍历 words 数组&#xff0c;检查当前字符串的…...

筑牢信息安全防线:涉密计算机与互联网隔离的理论实践与风险防控

在数字化时代&#xff0c;信息安全已成为国家安全体系的重要组成部分。涉密计算机作为承载敏感信息的核心载体&#xff0c;其安全防护工作直接关系到国家利益与社会稳定。违规连接互联网这一行为&#xff0c;如同在严密的防护体系中打开一扇危险的"暗门"&#xff0c;…...

sqli-labs靶场29-31关(http参数污染)

目录 前言 less29&#xff08;单引号http参数污染&#xff09; less30&#xff08;双引号http参数污染&#xff09; less31(双引号括号http参数污染) 前言 在JSP中&#xff0c;使用request.getParameter("id")获取请求参数时&#xff0c;如果存在多个同名参数&a…...