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

如何使用Java生成pdf报告

文章目录

      • 一、环境准备与Maven依赖说明
      • 二、核心代码解析
        • 1. 基础文档创建
        • 2. 中文字体处理
        • 3. 复杂表格创建
        • 4. 图片插入
      • 三、完整代码示例
      • 四、最终效果

这篇主要说一下如何使用Java生成pdf,包括标题,文字,图片,表格的插入和调整等相关内容。

一、环境准备与Maven依赖说明

这里我使用的是iTextPDF,依次添加下面的依赖

核心依赖说明:

        <!-- pdf:start --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.11</version></dependency><!-- 支持中文 --><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency><!-- 支持css样式渲染 --><dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf-itext5</artifactId><version>9.1.16</version></dependency><!-- 转换html为标准xhtml包 --><dependency><groupId>net.sf.jtidy</groupId><artifactId>jtidy</artifactId><version>r938</version></dependency><dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.5.3</version></dependency><!-- Jetty WebSocket支持 --><dependency><groupId>org.eclipse.jetty.websocket</groupId><artifactId>javax-websocket-server-impl</artifactId><version>9.4.44.v20210927</version></dependency><dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-webapp</artifactId><version>9.4.44.v20210927</version></dependency><!-- Apache HttpClient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency>

二、核心代码解析

1. 基础文档创建

文档的创建:

// 创建A4文档,设置页边距(左、右、上、下)
Document document = new Document(PageSize.A4, 40, 40, 40, 40);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);// 必须显式打开文档
document.open();
2. 中文字体处理

字体调整:

// 使用内置STSong-Light字体
BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font bodyFont = new Font(bf, 12);// 推荐做法:使用外部字体文件
BaseFont externalFont = BaseFont.createFont("fonts/SourceHanSansCN-Regular.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
3. 复杂表格创建

表格创建:

// 创建5列表格,设置列宽比例
float[] colWidths = {2f, 1.5f, 1.5f, 1.5f, 1.5f};
PdfPTable table = new PdfPTable(colWidths);// 设置表格占页面宽度的100%
table.setWidthPercentage(100);// 添加表头
addTableHeader(table, new String[]{"指标", "Q1", "Q2", "Q3", "Q4"}, headerFont);// 添加数据行
addTableRow(table, new String[]{"响应时间(ms)", "230", "180", "150", "120"}, bodyFont);
4. 图片插入

插入本地图片:

// 推荐使用相对路径
String imagePath = "src/main/resources/charts/tech_trend.png";// 自动缩放适应宽度
Image image = Image.getInstance(imagePath);
image.scaleToFit(document.getPageSize().getWidth() - 80, Float.MAX_VALUE);
image.setAlignment(Image.ALIGN_CENTER);// 添加图片描述
Paragraph caption = new Paragraph("图1 2023年季度性能趋势对比", captionFont);
caption.setAlignment(Element.ALIGN_CENTER);
document.add(caption);
document.add(image);

三、完整代码示例

下面是完整的代码示例,可以直接调整使用


import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.draw.LineSeparator;
import com.ruoyi.RuoYiApplication;
import com.ruoyi.common.utils.http.HttpUtils;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.io.*;
import java.text.ParseException;@RunWith(SpringRunner.class)
@SpringBootTest(classes= RuoYiApplication.class)
public class pdfDemoTest5 {/*** PDF生成- 公司年度技术报告*/@Testpublic void generateDemoPdf() throws Exception {// 文档设置(调整页边距)Document document = new Document(PageSize.A4, 40, 40, 40, 40);PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("tech_report_demo.pdf"));// 创建中文字体BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 定义字体样式Font redTitleFont = new Font(bf, 20, Font.BOLD, BaseColor.RED);Font programFont = new Font(bf, 16, Font.BOLD);Font sectionFont = new Font(bf, 14, Font.BOLD);Font bodyFont = new Font(bf, 12);Font tableHeaderFont = new Font(bf, 12, Font.BOLD);Font contactFont = new Font(bf, 11, Font.BOLD);document.open();// ========== 标题区块 ==========Paragraph program = new Paragraph();program.add(new Chunk("2023年度技术发展报告\n", programFont));program.add(new Chunk("科技创新与数字化转型", programFont));program.setAlignment(Element.ALIGN_CENTER);program.setSpacingAfter(15f);document.add(program);// 红色主标题(带下划线)Paragraph mainTitle = new Paragraph("技术研发中心年度报告", redTitleFont);mainTitle.setAlignment(Element.ALIGN_CENTER);mainTitle.setSpacingAfter(10f);document.add(mainTitle);// ========== 期号信息 ==========Paragraph issue = new Paragraph();issue.add(new Chunk("[2023]年度报告", bodyFont));issue.add(new Chunk("                                   ", bodyFont)); // 空格占位issue.add(new Chunk("发布日期:[2024]年[1]月[15]日", bodyFont));issue.setAlignment(Element.ALIGN_RIGHT);document.add(issue);// 添加下划线效果Chunk underline = new Chunk(new LineSeparator(1.5f, 100f, BaseColor.RED, Element.ALIGN_CENTER, -1));document.add(underline);// ========== 报告标题 ==========Paragraph reportTitle = new Paragraph("2023年度技术研发成果与2024年展望",sectionFont);reportTitle.setAlignment(Element.ALIGN_CENTER);reportTitle.setSpacingBefore(15f);reportTitle.setSpacingAfter(20f);document.add(reportTitle);// ========== 正文内容 ==========// 年度总结部分addSection(document, "1. 年度技术成果总结", sectionFont,"2023年,我司在人工智能、大数据分析和云计算领域取得了显著进展。主要成果包括完成了新一代智能分析平台的开发,实现了数据处理效率提升300%;发布了基于机器学习的预测模型,准确率达到行业领先水平;完成了核心系统的云原生改造,系统稳定性提升至99.99%。", bodyFont);// 技术指标部分addSection(document, "2. 关键技术指标", sectionFont, "", bodyFont);// 表格样式优化float[] colWidths = {2f, 1.5f, 1.5f, 1.5f, 1.5f};// 创建表格标题Paragraph tableCaption = new Paragraph("表1 2023年关键技术指标对比", bodyFont);tableCaption.setAlignment(Element.ALIGN_CENTER);tableCaption.setSpacingBefore(10f);tableCaption.setSpacingAfter(5f);document.add(tableCaption);// 创建表格createComparisonTable(document,new String[]{"系统响应时间(ms)", "230", "180", "150", "120"},new String[]{"数据处理量(TB/天)", "5.2", "8.7", "12.4", "15.8"},colWidths, tableHeaderFont, bodyFont);// ========== 技术趋势图 ==========Paragraph imageParagraph = new Paragraph();imageParagraph.setSpacingBefore(20f);imageParagraph.add(new Chunk("图1 2023年技术发展趋势", bodyFont));imageParagraph.setAlignment(Element.ALIGN_CENTER);document.add(imageParagraph);// 插入本地图片(示例)String localImagePath = "D:\\test.jpg";Image localImage = Image.getInstance(localImagePath);localImage.scaleToFit(400, 250);localImage.setAlignment(Image.ALIGN_CENTER);document.add(localImage);// ========== 未来展望 ==========addSection(document, "3. 2024年技术发展规划", sectionFont,"2024年,我们将重点布局以下领域:\n\n" +"• 人工智能:深化自然语言处理技术应用\n" +"• 边缘计算:构建分布式计算网络\n" +"• 数据安全:实施零信任安全架构\n" +"• 云原生:全面容器化改造\n\n" +"预计2024年研发投入将增长30%,重点培养高端技术人才50名。", bodyFont);// ========== 联系方式 ==========Paragraph contacts = new Paragraph();contacts.add(new Chunk("技术咨询:", contactFont));contacts.add(new Chunk(" 400-123-4567   ", bodyFont));contacts.add(new Chunk("电子邮箱:", contactFont));contacts.add(new Chunk("tech@company.com\n", bodyFont));contacts.add(new Chunk("公司地址:", contactFont));contacts.add(new Chunk("北京市海淀区科技园区88号 创新大厦B座", bodyFont));contacts.setSpacingBefore(20f);document.add(contacts);document.close();}// 辅助方法:添加章节private void addSection(Document doc, String title, Font titleFont, String content, Font bodyFont) {try {Paragraph section = new Paragraph(title, titleFont);section.setSpacingBefore(15f);doc.add(section);if(!content.isEmpty()) {Paragraph text = new Paragraph(content, bodyFont);text.setSpacingAfter(15f);doc.add(text);}} catch (DocumentException e) {e.printStackTrace();}}// 辅助方法:创建对比表格private void createComparisonTable(Document doc,String[] row1, String[] row2,float[] colWidths, Font headerFont, Font bodyFont) {try {PdfPTable table = new PdfPTable(colWidths);table.setWidthPercentage(100);table.setSpacingBefore(0f); // 标题与表格的间距由外部控制table.setSpacingAfter(15f);// 表头addTableHeader(table, new String[]{"省份", "河南省", "河北省", "山东省", "江苏省", "安徽省"}, headerFont);// 数据行addTableRow(table, row1, bodyFont);addTableRow(table, row2, bodyFont);doc.add(table);} catch (DocumentException e) {e.printStackTrace();}}// 辅助方法:添加表头private void addTableHeader(PdfPTable table, String[] headers, Font font) {for (String header : headers) {PdfPCell cell = new PdfPCell(new Paragraph(header, font));cell.setBackgroundColor(new BaseColor(240, 240, 240));cell.setPadding(5);cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);}}// 辅助方法:添加表格行private void addTableRow(PdfPTable table, String[] data, Font font) {for (String item : data) {PdfPCell cell = new PdfPCell(new Paragraph(item, font));cell.setPadding(5);cell.setHorizontalAlignment(Element.ALIGN_CENTER);table.addCell(cell);}}}

四、最终效果

这个就是上面代码生成的最终的pdf的效果图

在这里插入图片描述

相关文章:

如何使用Java生成pdf报告

文章目录 一、环境准备与Maven依赖说明二、核心代码解析1. 基础文档创建2. 中文字体处理3. 复杂表格创建4. 图片插入 三、完整代码示例四、最终效果 这篇主要说一下如何使用Java生成pdf&#xff0c;包括标题&#xff0c;文字&#xff0c;图片&#xff0c;表格的插入和调整等相关…...

Memory模块是agent的一个关键组件

Memory 2.6.1 简介 在Agent系统中&#xff0c;Memory模块是一个关键的组件&#xff0c;其主要功能是存储和检索信息&#xff0c;以支持agent的学习和决策过程。该模块模拟人类记忆的某些特征&#xff0c;能够动态地保存和更新信息&#xff0c;使agent能够利用过去的经验进行推…...

初级社会工作者考试难点总结

初级社会工作者考试难点总结 初级社会工作者&#xff08;助理社会工作师&#xff09;考试是进入社会工作行业的入门级资格认证&#xff0c;考试内容涵盖社会工作理论、实务技能及相关法规政策。虽然考试难度相对适中&#xff0c;但部分知识点和题型仍让考生感到棘手。本文总结…...

mapbox进阶,手写放大镜功能

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.1 ☘️mapboxgl.Map style属性二、🍀手写放大镜功能1. ☘️实现思路2. ☘️…...

EasyRTC嵌入式音视频通信SDK一对一音视频通信,打造远程办公/医疗/教育等场景解决方案

一、方案概述​ 数字技术发展促使在线教育、远程医疗等行业对一对一实时音视频通信需求激增。传统方式存在低延迟、高画质及多场景适配不足等问题&#xff0c;而EasyRTC凭借音视频处理、高效信令交互与智能网络适配技术&#xff0c;打造稳定低延迟通信&#xff0c;满足基础通信…...

微信小程序中,解决lottie动画在真机不显示的问题

api部分 export function getRainInfo() {return onlineRequest({url: /ball/recruit/getRainInfo,method: get}); }data存储json数据 data&#xff1a;{rainJson:{} }onLoad方法获取json数据 onLoad(options) {let that thisgetRainInfo().then((res)>{that.setData({r…...

基于Flink的数据中台管理平台

基于Flink做的数据中台工程项目。数据从source到clickhouse全流程的验证。集成元数据管、数据资产、数据发现功能&#xff0c;自主管理元数据变更&#xff0c;集成元数据版本管理。 同时&#xff0c;对整个大数据集群使用到的组件或者是工具进行管理。比如nacos、kafka、zookee…...

Flink-Yarn运行模式

Yarn的部署过程 Yarn上部署的过程是&#xff1a;客户端把Flink应用提交给Yarn的ResourceManager,Yarn的ResourceManager会向Yarn的NodeManager申请容器&#xff0c;在这些容器上&#xff0c;Flink会部署JobManager和TaskManager的实例&#xff0c;从而启动集群&#xff0c;Flin…...

Java---斐波那契那数列

一、斐波那契数列的定义与起源 1. 数学定义 斐波那契数列&#xff08;Fibonacci Sequence&#xff09;又称黄金分割数列&#xff0c;其定义为&#xff1a; 初始项&#xff1a; F(0)0F(1)1 递推公式&#xff1a; 当 n≥2 时&#xff0c;F(n)F(n−1)F(n−2) 前 10 项数列&…...

通过AIoTedge或ThingsKit物联网平台内置的Node-RED读取OPC-UA

《通过AIoTedge或ThingsKit物联网平台内置的Node-RED读取OPC-UA》 一、引言 随着工业物联网&#xff08;IIoT&#xff09;的快速发展&#xff0c;设备之间的互联互通变得至关重要。OPC-UA&#xff08;Open Platform Communications Unified Architecture&#xff09;作为一种…...

《大模型开源与闭源的深度博弈:科技新生态下的权衡与抉择》

开源智能体大模型的核心魅力&#xff0c;在于它构建起了一个全球开发者共同参与的超级协作网络。想象一下&#xff0c;来自世界各个角落的开发者、研究者&#xff0c;无论身处繁华都市还是偏远小镇&#xff0c;只要心怀对技术的热爱与追求&#xff0c;就能加入到这场技术狂欢中…...

genicamtl_lmi_gocator_objectmodel3d

目录 一、在halcon中找不到genicamtl_lmi_gocator_objectmodel3d例程二、在halcon中运行genicamtl_lmi_gocator_objectmodel3d&#xff0c;该如何配置三、代码分段详解&#xff08;一&#xff09;传感器连接四、代码分段详解&#xff08;二&#xff09;采集图像并显示五、代码分…...

Node.js 24发布:性能与安全双提升

在科技的迅速发展中&#xff0c;Node.js作为一个备受青睐的开源跨平台Java运行环境&#xff0c;近日迎来了其24.0版本的正式发布。此次更新不仅承诺提升性能和安全性&#xff0c;还为开发者提供了更为顺畅的开发体验&#xff0c;值得我们深入探讨。 Node.js 24.0的最大亮点之一…...

是德科技 | 单通道448G未来之路:PAM4? PAM6? PAM8?

内容来源&#xff1a;是德科技 随着数据中心规模的不断扩大以及AI大模型等技术的兴起&#xff0c;市场对高速、大容量数据传输的需求日益增长。例如&#xff0c;AI训练集群中GPU等设备之间的互联需要更高的传输速率来提升效率。在技术升级方面&#xff0c;SerDes技术的不断进步…...

Dify智能体开发实践

1.聊天助⼿&#xff1a;创建技术⽀持问答机器⼈&#xff0c;通过提示词约束回答范围并引导追问澄清。 1.提示词 &#xff08;1&#xff09;技术支持机器人提示词 你是一位专业的技术支持机器人&#xff0c;专门为公司的各类技术产品和服务提供支持。你的回答范围严格限制在以下…...

网络安全之APP渗透测试总结

1、脱壳 360免费版加固&#xff0c;frida-dexdump、blackdex都可以脱掉。这里就不演示了 GitHub - hluwa/frida-dexdump: A frida tool to dump dex in memory to support security engineers analyzing malware. 2、密码泄露 经过对app登录界面&#xff0c;有对密码强度进行…...

笔记:NAT

一、NAT 的基本概念 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09; 是一种在 IP 网络中重新映射 IP 地址的技术&#xff0c;主要用于解决 IPv4 地址短缺问题&#xff0c;同时提供一定的网络安全防护作用。 功能&#xff1a; 将内部网络&am…...

民锋视角下的多因子金融分析模型实践

在当前金融市场环境中&#xff0c;数据粒度与因子建模逐渐成为提升交易系统稳定性的重要方式。民锋长期专注于模型优化与策略深度挖掘&#xff0c;提出了一套适用于中短周期的数据判断体系&#xff0c;核心在于“多因子融合动态调权”。 具体而言&#xff0c;民锋的分析框架常…...

ThinkPHP 根据路由文件获取路由列表

定义一个路由变量 比如我们要获取admin的路由 $routeFile "admin.php"; 清除路由 调用 Route::clear() 方法&#xff0c;清除当前已定义的所有路由。 Route::clear();设置路由懒加载 调用 Route::lazy(false) 方法&#xff0c;禁用路由的懒加载功能,选择立即加…...

算法打卡第三天

10.长度最小的子数组 &#xff08;力扣209题&#xff09; 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度**。**如果不存在符合条件的子…...

04_spring容器管理单例多例

文章目录 1. 单例&#xff08;Singleton&#xff09;2. 多例&#xff08;Prototype&#xff09;3. 使用场景4. 注意事项 在Spring框架中&#xff0c;Spring容器负责创建、配置和管理应用程序中的bean。关于单例&#xff08;Singleton&#xff09;和多例&#xff08;Prototype&a…...

算法C++最大公约数

原理 代码实现 #include <stdio.h>// 递归版本 int gcd_recursive(int a, int b) {if (b 0) return a; // 终止条件&#xff1a;余数为0时&#xff0c;除数即为GCDreturn gcd_recursive(b, a % b); // 递归调用&#xff0c;更新为(b, a%b) }// 迭代版本 int gcd_iterat…...

在 Ubuntu 下通过 C APP程序实现串口发送数据并接收返回数据

一、前言 使用 C 应用进行串口调用需要手动配置串口的各项参数&#xff0c;并且 Ubuntu 下的串口是通过读写文件实现的&#xff0c;所以还需要设置权限。 二、源码分析 serial.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <…...

ubuntu24.04+RTX5090D 显卡驱动安装

初步准备 Ubuntu默认内核太旧&#xff0c;用mainline工具安装新版&#xff1a; sudo add-apt-repository ppa:cappelikan/ppa sudo apt update && sudo apt full-upgrade sudo apt install -y mainline mainline list # 查看可用内核列表 mainline install 6.13 # 安装…...

ubuntu22.04上运行opentcs6.4版本

1、下载github上的源码&#xff1a; openTCS - Downloads 2、安装java21 我的版本是&#xff1a;java --version java 21.0.6 2025-01-21 LTS Java(TM) SE Runtime Environment (build 21.0.68-LTS-188) Java HotSpot(TM) 64-Bit Server VM (build 21.0.68-LTS-188, mixed mo…...

labelme进行关键点标注并转换为yolo格式

目录 1、labelme安装和打开2、边界框和关键点标注3、将lamelme的json格式转成yolo可以使用的txt格式4、将数据和标签按照9比1分为训练集和测试集 1、labelme安装和打开 在python3.9及以上环境中安装labelme&#xff0c;labelme要用到pyqt&#xff0c;所以在使用labelme之前要安…...

每日算法-250521

每日算法学习 大家好&#xff01;这是我今天的算法练习记录&#xff0c;分享四道 LeetCode 题目的解题思路和代码。希望能对大家有所帮助&#xff01; 219. 存在重复元素 II 题目 思路 哈希表 利用哈希表来存储数组中元素及其最近出现的索引。 解题过程 当我们遍历数组 num…...

正大模型视角下的高频交易因子构建策略研究

正大模型视角下的高频交易因子构建策略研究 在金融衍生品交易体系中&#xff0c;数据主导型模型逐渐成为核心竞争力。以正大为代表的量化团队&#xff0c;通过大量历史数据研究&#xff0c;构建出一套基于高频因子的模型框架&#xff0c;从成交节奏、盘口行为、价格波动等维度动…...

Babylon.js学习之路《八、动画基础:关键帧动画与缓动效果》

文章目录 1. 引言&#xff1a;动画在3D场景中的核心作用2. 关键帧动画基础2.1 键帧动画原理2.2 创建简单关键帧动画 3. 缓动函数&#xff08;Easing Functions&#xff09;3.1 缓动函数的作用3.2 应用缓动函数 4. 复杂动画&#xff1a;多属性联动与序列控制4.1 同时控制位置、旋…...

小满未满,是成长的序章

节气小满&#xff0c;昭示着奋斗正当时&#xff0c;Codigger 怀揣热忱&#xff0c;在代码的天地里披荆斩棘&#xff0c;向着圆满目标大步迈进 。...

JavaWeb 开发流程

项目建立 SpringBoot框架构建 Spring Boot 是基于 Spring 框架的开源 Java 基础框架&#xff0c;用于创建独立、生产级的基于 Spring Framework 的应用程序。 我们可以使用IDEA建立SpringBoot框架。 语言选择Java&#xff0c;类型选择Maven&#xff0c;JDK和Java要保持一致&…...

Cmake 使用教程

介绍 CMake 是一个开源、跨平台的构建系统&#xff0c;主要用于软件的构建、测试和打包。CMake 使用平台无关的配置文件 CMakeLists.txt 来控制软件的编译过程&#xff0c;并生成适用于不同编译器环境的项目文件。例如&#xff0c;它可以生成 Unix 系统的 Makefile 、 Win…...

CLIP、ViLT 与 LLaVA:多模态模型是如何看图说话的?

一、前言&#xff1a;我们已经讲了 MLLM 能力&#xff0c;但它到底是怎么实现“看图说话”的&#xff1f; 在之前文章中&#xff0c;我们已经提到了MLLM可以看图说话以及文生图等能力&#xff0c;ViT统一图文多模态架构。那模型是如何处理图文信息以及不同处理所带来的能力是怎…...

基于Springboot + vue3实现的流动摊位管理系统

项目描述 本系统包含管理员、用户、商家三个角色。 管理员角色&#xff1a; 用户管理&#xff1a;管理系统中所有用户的信息&#xff0c;包括添加、删除和修改用户。 配置管理&#xff1a;管理系统配置参数&#xff0c;如上传图片的路径等。 权限管理&#xff1a;分配和管理…...

我的软考经历

说明&#xff1a;本文分享博主软考经验&#xff0c;及软考证书在找工作时的作用。 软考 软考&#xff0c;全称&#xff1a;中国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff0c;报名/考试/查询网址为&#xff0c;中国计算机技术职业资格网 考试分…...

C++的异常

引入&#xff1a;异常的意义是什么&#xff1f; ①&#xff1a;错误分离 将正常逻辑&#xff08;try&#xff09;与错误处理&#xff08;catch&#xff09;分离&#xff0c;避免代码被大量 if-else 污染。 ②&#xff1a;强制处理 若不捕获异常&#xff0c;程序终止&#xff0c…...

精益制造数字化转型智能工厂三年规划建设方案

该文档是精益制造数字化转型智能工厂三年规划建设方案,以打造高品质、低成本、柔性化的绿色智能工厂为愿景,围绕制造技术、自动化、数智化、管理赋能四大路径,通过夯实 EHS、品质一致性、生产安定化、现场整洁四大基石,推进标杆车间打造、联合管理、TOB 流程改善等专项。规…...

Linux 文件(3)

文章目录 1. Linux下一切皆文件2. 文件缓冲区2.1 缓冲区是什么2.2 缓冲区的刷新策略2.3 为什么要有缓冲区2.4 一个理解缓冲区刷新的例子 3. 标准错误 1. Linux下一切皆文件 在刚开始学习Linux的时候&#xff0c;我们就说Linux下一切皆文件——键盘是文件&#xff0c;显示器是文…...

Java异步编程利器:CompletableFuture 深度解析与实战

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、CompletableFuture 概述 CompletableFuture是Java 8引入的异步编程工具类&#xff0c;实现了Future和CompletionStage接口&#xff0c;支持链式调用、组…...

如何支持Enhanced RTMP H.265(HEVC)

在实时音视频传输中&#xff0c;H.264长期占据主流&#xff0c;但随着视频质量要求的不断提高和带宽压力的加大&#xff0c;H.265&#xff08;HEVC&#xff09;作为下一代视频编码标准逐渐崭露头角。 在这种背景下&#xff0c;我们顺应行业发展趋势&#xff0c;成功集成了对Enh…...

Idea 查找引用jar包依赖来源的Maven pom坐标

目录 问题引入 实现解决 问题引入&#xff1a; 在查看拉取的项目&#xff0c;维护自己项目、或者迁移原有项目时&#xff0c;会遇到不知道代码中引用到的依赖从哪里引用到的。 所以利用Idea&#xff0c;从import语句到Maven项目结构树中查找&#xff0c;最终找到pom文件里的…...

Linux操作系统之进程(二):进程状态

目录 前言 一、补充知识点 1、并行与并发 2、时间片 3、 等待的本质 4、挂起 二. 进程的基本状态 三、代码演示 1、R与S 2、T 3、Z 四、孤儿进程 总结&#xff1a; 前言 在操作系统中&#xff0c;进程是程序执行的基本单位。每个进程都有自己的状态&#xff0c;这些…...

web.py使用时报错AttributeError: No template named image_window

在使用python的web.py框架做前后端时遇到问题。 问题代码主要如下&#xff0c;当加上main(iamge_name)这行代码后就会报错。报错信息包含两个&#xff1a;第一是找不到image_window模板&#xff1b;第二是gbk无法解码... class ImageWindow:def GET(self, image_name):main(i…...

2025年度消费新潜力白皮书470+份汇总解读|附PDF下载

原文链接&#xff1a;https://tecdat.cn/?p42178 过去一年&#xff0c;消费市场在政策驱动与技术迭代中呈现结构性变革。社零总额达487,895亿元&#xff0c;实物商品网零额占比27%&#xff0c;线上渠道成为增长引擎。本报告从食品饮料、美妆护肤、家电数码、服饰户外四大核心领…...

全平台开源电子书阅读器推荐,支持多端同步+AI朗读!支持epub/mobi/azw3/pdf常见电子书格式!

Readest是一款好用的免费阅读工具&#xff0c;界面干净不花哨&#xff0c;特别适合喜欢专心读书的朋友。这个软件是经典阅读软件Foliate的全新升级版本&#xff0c;用最新技术开发&#xff0c;能在手机、电脑&#xff08;包括苹果和Windows系统&#xff09;以及网页上顺畅使用。…...

创建Workforce

创建你的Workforce 3.3.1 简单实践 1. 创建 Workforce 实例 想要使用 Workforce&#xff0c;首先需要创建一个 Workforce 实例。下面是最简单的示例&#xff1a; from camel.agents import ChatAgent from camel.models import ModelFactory from camel.types import Model…...

关于光谱相机的灵敏度

一、‌灵敏度的核心定义‌ ‌光谱灵敏度&#xff08;单色灵敏度&#xff09;‌ 描述光谱相机对单色辐射光的响应能力&#xff0c;即探测器对特定波长入射光的输出信号强度与入射光功率的比值。 例如&#xff0c;若在680nm波长下的光谱灵敏度较高&#xff0c;则表示该相机对此…...

【Redis】二、Redis常用数据类型命令学习

目录 一、String 1. SET、GET&#xff1a;设置与读取键值对&#xff1a; 2. DEL&#xff1a;删除键 3. INCR、DECR&#xff1a;自增 / 自减&#xff08;常用于计数器&#xff09; 4. APPEND&#xff1a;内容追加 5. EXPIRE&#xff1a;设置过期时间 / 查看剩余时间&#x…...

HarmonyOS基础组件:Button三种类型的使用

简介 HarmonyOS在明年将正式不再兼容Android原生功能&#xff0c;这意味着对于客户端的小伙伴不得不开始学习HarmonyOS开发语言。本篇文章主要介绍鸿蒙中的Button使用。 HarmonyOS中的Button相较于Android原生来说&#xff0c;功能比较丰富&#xff0c;扩展性高&#xff0c;减…...

RT_Thread——快速入门

文章目录 一、RT-Thread 目录结构二、核心文件三、移植时涉及的文件3.1 CPU 部分3.2 BSP 部分 四、内存管理五、启动流程及main函数5.1 启动流程5.2 关键函数速览5.3 main 函数示例 六、数据类型和编程规范6.1 数据类型6.2 函数名6.3 结构体定义6.4 注释规范 七、使用模拟器运行…...