JasperReport与SpringBoot整合及模板制作

news2024/11/25 2:55:33

0. 示例代码

示例代码地址

1. 报表介绍

1.1 为什么要使用报表?

在企业级应用开发中,报表生成、报表打印下载是其重要的一个环节。除了Excel报表之外,PDF报表也有广泛的应用场景,必须用户详细资料,用户简历等

目前世面上比较流行的制作PDF报表的工具如下:

名称介绍
Jasper Report是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF
Openofficeopenoffice是开源软件且能在windows和linux平台下运行,可以灵活的将word或者Excel转化为PDF文档。
iText PDFiText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。

2. JasperReport

2.1 框架介绍

  • JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDFHTML,或者XML格式。**该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。**只需要将JasperReport引入工程中即可完成PDF报表的编译、显示、输出等工作。
  • 在开源的JAVA报表工具中,JASPER Report发展是比较好的,比一些商业的报表引擎做得还好,如支持了十字交叉报表、统计报表、图形报表,支持多种报表格式的输出,如PDF、RTF、XML、CSV、XHTML、TEXT、DOCX以OpenOffice。
  • 数据源支持更多,常用 JDBC SQL查询、XML文件、CSV文件 、HQL(Hibernate查询),HBase,JAVA集合等。还允许你义自己的数据源,通过JASPER文件及数据源,JASPER就能生成最终用户想要的文档格式。

2.2 相关文件介绍

  1. JRXML:报表填充模板,本质是一个XML. JasperReport已经封装了一个dtd,只要按照规定的格式写这个xml文件,那么jasperReport就可以将其解析最终生成报表,但是jasperReport所解析的不是我们常见的.xml文件,而是.jrxml文件,其实跟xml是一样的,只是后缀不一样。
  2. Jasper:**由JRXML模板编译生成的二进制文件,用于代码填充数据。**解析完成后JasperReport就开始编译.jrxml文件,将其编译成.jasper文件,因为JasperReport只可以对.jasper文件进行填充数据和转换,这步操作就跟我们java中将java文件编译成class文件是一样的
  3. Jrprint:**当用数据填充完Jasper后生成的文件,用于输出报表。**这一步才是JasperReport的核心所在
    • 它会根据你在xml里面写好的查询语句来查询指定是数据库
    • 也可以控制在后台编写查询语句,参数,数据库。在报表填充完后,会再生成一个.jrprint格式的文件(读取jasper文件进行填充,然后生成一个jrprint文件)
  4. Exporter决定要输出的报表为何种格式,报表输出的管理类。

2.3 开发流程概述

image-20230720173908644

2.4 模板工具Jaspersoft Studio

Jaspersoft StudioJasperReports库JasperReports服务器基于Eclipse的报告设计器; 它可以作为Eclipse插件或作为独立的应用程序使用

  • Jaspersoft Studio允许您创建包含图表图像子报表交叉表等的复杂布局。
  • 您可以通过JDBCTableModelsJavaBeansXMLHibernate大数据(如Hive)CSVXML / A以及自定义来源等各种来源访问数据,
  • 然后将报告发布为PDFRTFXMLXLSCSVHTMLXHTML文本DOCXOpenOffice
  • Jaspersoft Studio 是一个可视化的报表设计工具,使用该软件可以方便地对报表进行可视化的设计,设计结果为格式.jrxmlXML 文件,并且可以把.jrxml文件编译成.jasper格式文件方便JasperReport报表引擎解析、显示。

2.4.1 Jaspersoft Studio CE下载

image-20230720174339640

我下载的是js-studiocomm_6.20.5_windows_x86_64.exe

下载完成后无脑安装就行了

image-20230720174442720

2.4.2 面板介绍

左侧切换outline视图,调整视图的位置

image-20230720174622966

  • Report editing area(主编辑区域) 通过拖动,定位,对齐和通过 Designer palette(设计器调色板)对报表元素调整大小

  • Editor Area

    • Design tab: 当你打开一个报告文件,它允许您以图形方式创建报表选中
    • Source tab: 包含用于报表的 JRXML 源代码。
    • Preview tab: 允许在选择数据源和输出格式后,运行报表预览。
  • Repository Explorer view 包含 JasperServer 生成的连接和可用的数据适配器列表

  • Outline view 在大纲视图中显示了一个树的形式的方式报告的完整结构

  • Properties view 控件属性设置

  • Design tab 以图形方式创建报表中的控件

  • Report Editor Area介绍

    image-20230721095503208

    • Title(标题)😗*只在整个报表的第一页的最上端显示。**只在第一页显示,其他页面均不显示
    • Page Header(页头):在整个报表中每一页都会显示
      • 在第一页中,出现的位置在 Title Band的下面。
      • 在除了第一页的其他页面中Page Header 的内容均在页面的最上端显示。
    • Page Footer(页脚): **在整个报表中每一页都会显示。**显示在页面的最下端。一般用来显示页码。
    • Detail1(详细) : 报表内容,每一页都会显示。
    • Column Header(列头): Detail中打印的是一张表的话,这Column Header就是表中列的列头。
    • Column Footer(列脚) :Detail中打印的是一张表的话,这Column Footer就是表中列的列脚。
    • Summary(统计): 表格的合计段,出现在整个报表的最后一页中,在Detail 1 Band后面。主要是用来做报表的合计显示。

2.4.3 Paramter,Field和Detail基本组件介绍

2.4.3.1 Paramters

  • Paramters是一张报表中全局的属性,初始自带了一些属性,也可以自定义属性。大家可以理解为存放一个报表的表头数据
  • Paramter的属性可以是任何类型,String,Long,Double,List等等
  • Paramter可以用在报表的任何区域,一般用在报表的Title,Page Header,Page Footer区域
  1. Paramters的创建:在左侧的Outline框,在Paramters上右键 Create Paramter 就可以创建一个新的Paramter,在右侧可以设置名称和类型。使用时直接拖拽到相应的区域即可。如下图所示

    image-20230724102309270

  2. 在Java程序中可以通过给对应的Paramter赋值,在打印时就可以输出你想要的结果。代码如下所示

    //给Paramter赋值
    HashMap<String, Object> parameters = new HashMap<String, Object>();
    parameters.put("name", "小明");//这里的key要和报表中的Paramter的name对应
    parameters.put("age", "18");
    
    //中间代码省略
    
    //核心代码,把Paramters传入JasperReport提供的方法,并返回JasperPrint 对象
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, parameters, dataSource);
    

2.4.3.2 Fields

  • Fields是报表中数据集合中的字段属性,只能自定义Field字段。大家可以理解为一个报表的明细列表数据
  • Field的属性可以是任何类型,String,Long,Double,List等等
  • Field只能用在报表的Detail区域
  1. Fields的创建:在左侧的Outline框,在Fields上右键 Create Field 就可以创建一个新的Field,在右侧可以设置名称和类型。使用时直接拖拽到相应的区域即可。如下图所示

    image-20230724102449497

  2. 在Java程序中可以通过集合给集合中的每一条数据的Field字段赋值,在打印时就可以输出你想要的结果。代码如下所示

    //给Field赋值
    List<HashMap> list = new ArrayList<>();
    for (int i = 0; i < 100; i++) {
        HashMap<String, String> item = new HashMap<String, String>();
        item.put("Field1",  "Field1-" + i);
        item.put("Field2",  "Field2-" + i);
        item.put("Field3",  "Field3-" + i);
        item.put("Field4",  "Field4-" + i);
        item.put("Field5",  "Field5-" + i);
        list.add(item);
    }
    
    //中间代码省略
    
    //核心代码,用包含Field字段的集合创建一个JRDataSource,传入JasperReport提供的方法,并返回JasperPrint 对象
    JRDataSource dataSource = new JRBeanCollectionDataSource(list);
    JasperPrint jasperPrint = JasperFillManager.fillReport(jasperStream, parameters, dataSource);
    

2.4.3.3 Detail

  • Detail是打印Field字段的区域,一个报表可以有多个Detail,在Detail上右键可以通过Add Detail Band来增加新的Detail区
  • Detail会把传递进来的list的数据,循环打印出来,有多条就会打印多行,一页打印不下就会从下一页继续打印
  • 如果通过Detail来打印表格,Detail的高度最好和要打印的Field高度一样,这样每行就不会有缝隙,打印出来和表格一样的效果
  • 如果存在多个detail,他们是交替打印

image-20230724104128439

image-20230724102714741

2.4.4 动态组件常用的属性的用法

  1. 所有动态的组件都是通过Expression表达式来绑定要打印的数据,比如Paramter,Field,Image,Table组件等等。

    image-20230724102810556

  2. 所有组件都有一块Print When属性,**其中有一个Print When Expression表达式,可以在返回true的情况下打印,在false的情况下不打印。**这个表达式可以依赖其他Paramter,Field,可以通过它实现一些特殊的打印需求

    • 表达式例子:new Boolean($F{showtitle1}),new Boolean(true)
    • 表达式参考

    image-20230724102904515

2.5 springBoot 整合JasperReport基础案例(固定报表)

2.5.1 引入依赖

创建一个springBoot项目

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>site.zhourui</groupId>
    <artifactId>jasper-report-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>jasper-report-demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- Jasper所需jar -->
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.olap4j</groupId>
            <artifactId>olap4j</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.lowagie</groupId>
            <artifactId>itext</artifactId>
            <version>2.1.7</version>
        </dependency>
        <!-- 根据情况添加数据库驱动 -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.1</version>
            </plugin>
        </plugins>
    </build>

</project>

2.5.2 模板制作

  1. 创建jasper文件:File -> New -> Jasper Report

    我选择的空白A4

    image-20230721100535309

  2. 制作模版

    image-20230721113929017

  3. 点击Compile Repot生成Jasper文件

    image-20230721114010151

  4. 找到编译后的.jasper文件

    编译完成后在下方控制台会提示文件生成地址

    image-20230721114041711

  5. 找到文件将文件复制到springboot的templates目录下改名为demo.jasper

    image-20230721102001212

2.5.3 创建测试Controller

package site.zhourui.jasperreportdemo.controller;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.util.HashMap;

/**
 * @author zr
 * @date 2023/7/20 14:52
 */
@RestController
@RequestMapping("/jasper")
public class demoController {
    /**
     * JasperReport的简单使用
     */
    @GetMapping("/test1")
    public void createHtml(HttpServletResponse response, HttpServletRequest request) throws Exception {
        Resource resource = new ClassPathResource("templates/demo.jasper");
        FileInputStream is = new FileInputStream(resource.getFile());
        ServletOutputStream os = response.getOutputStream();
        try {
            /**
             * 创建JasperPrint对象
             * 数据填充
             * is:inputstream params:参数填充 DataSource:数据源填充
             */
            JasperPrint jasperPrint = JasperFillManager.fillReport(is, new HashMap<>(), new JREmptyDataSource());
            // 写入pdf数据
            JasperExportManager.exportReportToPdfStream(jasperPrint, os);
        } finally {
            os.flush();
            os.close();
        }
    }
}

访问http://localhost:8080/jasper/test1

image-20230721114255923

2.5.4 JasperReports 不显示中文问题及解决方案

2.5.4.1 问题展示

  1. 新增了一个带中文Static Text

    image-20230721144550322

  2. 再次生成Jasper文件demo2.Jasper放入templates目录下

    image-20230721144641730

  3. 测试访问http://localhost:8080/jasper/test1

    新增的Text英文展示出来了,但是中文没有展示出来

    image-20230721144722061

2.5.4.2 问题原因

jasperreports的jar包源码中不包含中文字体库。

image-20230721163550902

2.5.4.3 解决方案(添加中文字体库)

  1. 在JasperReport Studio工具的Window-> Preferences -> font 中add一个微软雅黑的字体

    我下载字体的位置

    image-20230721164004818

  2. 此时就可以选择我们添加的字体了(注意这里有两个微软雅黑要选我们自定义的那个)

    image-20230721164239002

  3. 然后我们就可以保存文件重新编译一次然后放入templates目录下改名为demo.jasper

  4. 在Jaspersoft Studio 打包字体文件Font.jar包

    • Jaspersoft Studio中打包Font.jar,步骤如下: Window -> Preferences -> Jaspersoft Studio -> Fonts->Export

      image-20230721164914758

  5. 将导出的font.jar导入项目依赖

    1. 通过maven引入

      1. maven打包

        注意:你的文件路径可能和我的不一样

        mvn install:install-file -Dfile=C:\Users\Administrator\JaspersoftWorkspace\MyReports\font\font.jar -DgroupId=site.zhourui.report -DartifactId=font -Dversion=1.0.0 -Dpackaging=jar
        
      2. maven 引入依赖

                <dependency>
                    <groupId>site.zhourui.report</groupId>
                    <artifactId>font</artifactId>
                    <version>1.0.0</version>
                </dependency>
        
      3. 也可以推送到maven远程仓库这个看你自己

    2. 通过Add as Library引入

      1. 只要保证 fonts.jar 在项目的 classpath 中即可!我放到在resources下面

        image-20230721165519859

      2. 然后点击鼠标右键

        image-20230721165541179

      3. 选择Classes

        image-20230721165617905

      4. 设置名称和适用范围等

        image-20230721165715445

  6. 访问测试http://localhost:8080/jasper/test2

    image-20230721160544999

2.5.5 Java-map(parameter)的方式传入参数

  1. 新增两个参数year,name

    image-20230724100619878

  2. 创建模板使用我们创建的参数

    image-20230724100714747

  3. 模板

    如果是内容中文记住更换字体

    生成Jasper文件demo3.Jasper放入templates目录下

    image-20230724100757667

  4. 新建测试方法

    之前传的是一个空的HashMap

    现在传入对应的值

    image-20230724101027511

        /**
         * JasperReport携带参数
         * @param response
         * @throws Exception
         */
        @RequestMapping("/test3")
        public void test3(HttpServletResponse response) throws Exception{
            Resource resource = new ClassPathResource("templates/demo3.jasper");
            FileInputStream is = new FileInputStream(resource.getFile());
            ServletOutputStream os = response.getOutputStream();
            Map<String, Object> parameters = new HashMap<String, Object>();
            parameters.put("year", "2023");
            parameters.put("name", "测试");
            try {
                /**
                 * 创建JasperPrint对象
                 * 数据填充
                 * is:inputstream params:参数填充 DataSource:数据源填充
                 */
                JasperPrint jasperPrint = JasperFillManager.fillReport(is, parameters, new JREmptyDataSource());
                // 写入pdf数据
                JasperExportManager.exportReportToPdfStream(jasperPrint, os);
            } finally {
                os.flush();
                os.close();
            }
    
        }
    
  5. 访问测试

    测试链接http://localhost:8080/jasper/test3

    image-20230724101520967

2.5.6 Java-List(Failed)的方式传入参数,并打印多页表单

  1. 制作模板

    4个属性

    如果有中文注意选择字体

    image-20230724111911444

  2. 生成Jasper文件demo3.Jasper放入templates目录下

  3. 新建测试方法

    /**
         * JasperReport携带参数 ,打印多页表单
         * @param response
         * @throws Exception
         */
        @RequestMapping("/test4")
        public void test4(HttpServletResponse response) throws Exception{
            Resource resource = new ClassPathResource("templates/demo4.jasper");
            FileInputStream is = new FileInputStream(resource.getFile());
            ServletOutputStream os = response.getOutputStream();
            Random random = new Random();
    
            List<HashMap> list = new ArrayList<>();
            for (int i = 0; i < 100; i++) {
                HashMap<String, String> item = new HashMap<String, String>();
                item.put("Field_1",  "员工-" + i);
                item.put("Field_2",  "部门-" + i);
                item.put("Field_3",  i%2==0?"男":"女");
                item.put("Field_4", String.valueOf(random.nextInt(10000 - 8000) + 8000 + 1));//8000-10000
                list.add(item);
            }
            JRDataSource dataSource = new JRBeanCollectionDataSource(list);
            try {
                /**
                 * 创建JasperPrint对象
                 * 数据填充
                 * is:inputstream params:参数填充 DataSource:数据源填充
                 */
                JasperPrint jasperPrint = JasperFillManager.fillReport(is, new HashMap<>(), dataSource);
                // 写入pdf数据
                JasperExportManager.exportReportToPdfStream(jasperPrint, os);
            } finally {
                os.flush();
                os.close();
            }
        }
    
  4. 测试效果 访问http://localhost:8080/jasper/test4

    image-20230724111830672

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

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

相关文章

数据结构(二)

目录 Trie树 并查集 堆 Trie树 作用:用来高效地存储和查找字符串集合的数据结构 基本形式: 模板代码如下: #include<iostream> using namespace std;const int N 100010;//idx代表当前用到哪个下标 //既是根节点&#xff0c;又是空节点 //cnt存储的是以当前点结尾的…

在Springboot集成Activiti工作流引擎-引入、调用,测试【基础讲解】

工作流 通过计算机对业务流程自动化执行管理 他主要解决的是使在多个参与者之间按照某种“预定义规则”自动进行传递稳定 信息或任务的过程 通俗来讲 业务上一个玩着的审批流程 比如请假&#xff0c;出差 外出采购等 工作流引擎就是来解决流程问题的 提高我们的工作效率 如果…

day43-Spring_IOC

0目录 1.2.3 1. Spring_IOC 1.1 定义&#xff1a;轻量级框架&#xff0c;java EE的春天&#xff0c;主流框架 1.2 Spring特性&#xff1a;IOC控制反转&#xff1b;AOP面相切面 1.3 组成部分&#xff1a;Spring在SSM中所起到的作用&#xff08;SpringMVC和Mybatis框架的黏…

Mybatis-Plus插入数据返回主键两种方式(注解或XML)

废话不多说&#xff0c;直接撸代码: <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace&qu…

如何在Windows上恢复已删除的文件?

大多数人在无意中删除了一些重要文件后无法恢复。这些文件被暂时删除&#xff0c;直到我们清空回收站才会消失。你可以通过右键单击回收站中的文件并选择还原选项来轻松恢复这些文件。但是&#xff0c;如果你清理回收站删除了文件怎么办&#xff1f;或者不小心使用Shift Delet…

“玩趣味游戏 学交通规则”—九彩乡未成年人教育实践活动

为进一步提高未成年人道路交通安全与文明出行意识&#xff0c;有效防范道路交通事故发生&#xff0c;2023年7月21日上午&#xff0c;在海原县民政局、海原县未成年人救助保护中心、九彩乡未成年人保护工作站的支持指导下&#xff0c;海原县知行社会工作发展中心、九彩乡红十字志…

Java中静态模板文件freemaker使用

Java中静态模板文件freemarker使用 使用背景使用流程1. 引入依赖2. 配置3. 创建模板文件4. 运行代码 使用背景 FreeMarker 是一款 模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&…

Softing工业将亮相2023上海国际工博展

Softing工业将亮相2023年上海国际工业博览会 ——碳循新工业 数聚新经济 “中国国际工业博览会”作为广受瞩目的专业展之一&#xff0c;全面展示了生产、过程自动化的最新技术和全面解决方案、电气系统、工业IT与制造业信息化、微系统技术&#xff1b;是中国工业领域规模最大…

mysqldump 搭建复制报错,竟然是因为这个!

作者详细分析了一个 mysqldump 搭建复制失败的问题分析过程和改进建议。 作者&#xff1a;李富强 爱可生 DBA 团队成员&#xff0c;熟悉 MySQL&#xff0c;TiDB&#xff0c;OceanBase 等数据库。相信持续把对的事情做好一点&#xff0c;会有不一样的收获。 本文来源&#xff1a…

Linux在history命令上显示日期时间

1.在用户的家目录下打开个性化设置文件.bashrc&#xff0c;添加入export HISTTIMEFORMAT" %F %T "并保存 2.在通过source命令使得配置文件生效&#xff0c;再次查看history命令就会显示时间了

Qt 桌面闹钟提示小程序

程序运行截图 倒计时 闹钟设置界面 闹钟弹窗提示提示音 源码 gitee源码链接 软件打包

ncnn-android-yolov7跑自己模型的注意事项

ncnn-android-yolov7 这是一个示例 ncnn android 项目&#xff0c;它依赖于 ncnn 库和 opencv https://github.com/Tencent/ncnn https://github.com/nihui/opencv-mobile https://github.com/xiang-wuu/ncnn-android-yolov7 如何构建和运行 步骤1 https://github.com/Ten…

C++_适配器模式——reverse_iterator模拟实现

文章目录 前言适配器(Adapter)容器适配器迭代器适配器——reverse_iterator具体逻辑完整代码 总结 前言 本篇博客主要会给大家讲解C的一个代码复用的重要方式——适配器模式&#xff0c;并且详细讲解stl是如何运用这中设计理念来实现reverse_iterator的&#xff0c;给出了模拟实…

【MySQL】centos 7下MySQL的环境搭建

从本期博客开始我们正式进入到数据库的学习&#xff0c;在学习数据库时所用到的工具是Linux环境下的MySQL 目录 一、检查环境中是否装有MySQL 二、获取MySQL官方yum源 三、配置MySQL官方yum源 四、一键安装MySQL 五、启动mysql服务 六、登录MySQL 七、修改mysql配置文件…

【Kafka】常用操作

1、基本概念 1. 消息&#xff1a; Kafka是一个分布式流处理平台&#xff0c;它通过消息进行数据的传输和存储。消息是Kafka中的基本单元&#xff0c;可以包含任意类型的数据。 2. 生产者&#xff08;Producer&#xff09;&#xff1a; 生产者负责向Kafka主题发送消息。它将消息…

智慧园区楼宇合集:数字孪生管控系统

智慧园区是指将物联网、大数据、人工智能等技术应用于传统建筑和基础设施&#xff0c;以实现对园区的全面监控、管理和服务的一种建筑形态。通过将园区内设备、设施和系统联网&#xff0c;实现数据的传输、共享和响应&#xff0c;提高园区的管理效率和运营效益&#xff0c;为居…

2023年一建学霸笔记

考点:单方取消或辞去委托承担的民事责任女《民法典》规定&#xff0c;因解除合同造成对方损失的&#xff0c;除不可归责于该当事人的事由外&#xff0c;无偿委托合同的解除方应当赔偿因解除时间不当造成的直接损失&#xff0c;有偿委托合同的解除方应当赔偿对方的直接损失和合同…

光模块高低温消光比差异大的原因分析

用于高速数字通信的光模块&#xff0c;需要具备一些特定的参数条件。其中的一个参数&#xff0c;就是消光比。消光比被用来描述最优的偏置条件和激光发射功率转化成调制功率的效率。今天就跟着小易来了解一下在实际应用中消光比产生差异的原因吧&#xff01; 一、消光比的定义…

给照片加水印软件让你保护版权不麻烦

嘿&#xff01;想要保护你的照片免受盗用吗&#xff1f;或者想为你的作品增添独特的标识&#xff1f;好消息是现在有一种水印技术可以帮你解决这些问题&#xff0c;那么&#xff0c;你知道照片加水印软件有哪些吗&#xff1f;还不清楚的朋友请你关注下这篇文章哦。接下来让我来…

125K天线驱动器芯片UM12020D 最大直流驱动电流高达1.8A

UM12020D一个集成的天线驱动器&#xff0c;该芯片提供高达1.8A的输出直流电流&#xff0c;可在0至11V的天线电源&#xff08;VM&#xff09;和1.8V至5V的器件电源电压 (VCC) 上工作。该产品具有超低的rds-on&#xff0c;采用SOP-8封装。UM12020D具有PWM&#xff08;IN1-IN2&…