【SpringBoot应用篇】SpringBoot+JasperReport导出PDF

news2025/7/8 5:40:39

【SpringBoot应用篇】SpringBoot+JasperReport导出PDF

  • JasperReport简介
  • JasperReport的开发步骤
    • 生命周期
    • 执行流程
  • 模板工具Jaspersoft Studio
    • 概述
    • 安装配置
    • 面板介绍
    • 基本使用
      • 模板制作
      • 编译模板
  • 入门案例
    • 环境准备
    • 导出一个最基本的PDF文件
  • 导出用户列表
    • 需求
    • 数据直接从数据库中获取
    • 数据从后台获取
  • PDF导出图片

JasperReport简介

JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式。该库完全由Java写成,可以用于在各种Java应用程序,包括J2EE,Web应用程序中生成动态内容。只需要将JasperReport引入工程中即可完成PDF报表的编译、显示、输出等工作。

在开源的JAVA报表工具中,JasperReport发展是比较好的,比一些商业的报表引擎做得还好,如支持了十字交叉报表、统计报表、图形报表,支持多种报表格式的输出,如PDF、RTF、XML、CSV、XHTML、TEXT、DOCX以及OpenOffice。

数据源支持更多,常用 JDBCSQL查询、XML文件、CSV文件、HQL(Hibernate查询),HBase,JAVA集合等。还允许你义自己的数据源,通过JASPER文件及数据源,JASPER就能生成最终用户想要的文档格式。

JasperReport的开发步骤

生命周期

通常我们提到PDF报表的时候,浮现在脑海中的是最终的PDF文档文件。在JasperReports中,这只是报表生命周期的最后阶段。通过JasperReports生成PDF报表一共要经过三个阶段,我们称之为 JasperReport的生命周期,

这三个阶段为:

设计(Design)阶段、

执行(Execution)阶段

输出(Export)阶段,如下图所示:

在这里插入图片描述
设计阶段(Design):所谓的报表设计就是创建一些模板,模板包含了报表的布局与设计,包括执行计算的复杂公式、可选的从数据源获取数据的查询语句、以及其它的一些信息。模板设计完成之后,我们将模板保存为JRXML文件(JR代表JasperReports),其实就是一个XML文件。

执行阶段(Execution): 使用以JRXML文件编译为可执行的二进制文件(即.Jasper文件)结合数据进行执行,填充报表数据

输出阶段(Export):数据填充结束,可以指定输出为多种形式的报表

执行流程

在这里插入图片描述

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:决定要输出的报表为何种格式,报表输出的管理类。

5、JasperReport可以输出多种格式的报表文件,常见的有Html,PDF,xls等

综上我们得知,对于使用JasperReport进行开发,我们重点关注只有如下四点:

制作报表模板
模板编译
构造数据
填充模板数据

模板工具Jaspersoft Studio

概述

​Jaspersoft Studio是JasperReports库和JasperReports服务器的基于Eclipse的报告设计器; 它可以作为Eclipse插件或作为独立的应用程序使用。Jaspersoft Studio允许您创建包含图表,图像,子报表,交叉表等的复杂布局。您可以通过JDBC,TableModels,JavaBeans,XML,Hibernate,大数据(如Hive),CSV,XML / A以及自定义来源等各种来源访问数据,然后将报告发布为PDF,RTF, XML,XLS,CSV,HTML,XHTML,文本,DOCX或OpenOffice。

​ Jaspersoft Studio 是一个可视化的报表设计工具,使用该软件可以方便地对报表进行可视化的设计,设计结果为格式.jrxml 的XML 文件,并且可以把.jrxml 文件编译成.jasper 格式文件方便 JasperReport 报表引擎解析、显示。

安装配置

到 JasperReport官网下载 https://community.jaspersoft.com/community-download

在这里插入图片描述

当然我们可以直接使用下载好的这个软件

双击安装今天资料中的安装包在这里插入图片描述

下一步下一步的安装即可

面板介绍

在这里插入图片描述

Report editing area (主编辑区域)中,您直观地通过拖动,定位,对齐和通过 Designer palette(设计器调色板)对报表元素调整大小。JasperSoft Studio 有一个多标签编辑器,Design,Source和Preview:

Design tab:当你打开一个报告文件,它允许您以图形方式创建报表选中

Source tab:包含用于报表的 JRXML 源代码。

Preview tab:允许在选择数据源和输出格式后,运行报表预览。

Repository Explorer view:包含 JasperServer 生成的连接和可用的数据适配器列表

Project Explorer view:包含JasperReports 的工程项目清单

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

Properties view:通常是任何基于 Eclipse 的产品/插件的基础之一。它通常被填充与实际所选元素的属性的信息。这就是这样,当你从主设计区域(即:一个文本字段)选择一个报表元素或从大纲,视图显示了它的信息。其中一些属性可以是只读的,但大部分都是可编辑的,对其进行修改,通常会通知更改绘制的元素(如:元素的宽度或高度)。

Problems view:显示的问题和错误,例如可以阻断报告的正确的编译。

Report state summary 提供了有关在报表编译/填充/执行统计用户有用的信息。错误会显示在这里

基本使用

模板制作

(1)打开Jaspersoft Studio ,新建一个project, 步骤: File -> New -> Project-> JasperReportsProject

在这里插入图片描述

(2) 新建一个Jasper Report模板,在 Stidio的左下方Project Explorer 找到刚才新建的Project (我这里新建的是DemoReport),步骤:项目右键 -> New -> Jasper Report

在这里插入图片描述

(3)选择 Blank A4 (A4纸大小的模板),然后 Next 命名为demo.jrxml

在这里插入图片描述

如图所示,报表模板被垂直的分层,每一个部分都是一个Band,每一个Band的特点不同:

在这里插入图片描述

Title(标题):只在整个报表的第一页的最上端显示。只在第一页显示,其他页面均不显示。

Page Header(页头):在整个报表中每一页都会显示。在第一页中,出现的位置在 Title Band的下面。在除了第一页的其他页面中Page Header 的内容均在页面的最上端显示。

Page Footer(页脚):在整个报表中每一页都会显示。显示在页面的最下端。一般用来显示页码。

Detail 1(详细):报表内容,每一页都会显示。

Column Header(列头):Detail中打印的是一张表的话,这Column Header就是表中列的列头。

Column Footer(列脚):Detail中打印的是一张表的话,这Column Footer就是表中列的列脚。

Summary(统计):表格的合计段,出现在整个报表的最后一页中,在Detail 1 Band后面。主要是用来做报表的合计显示。

编译模板

右键单机模板文件 -> compile Report 对模板进行编译,生成.jasper文件

在这里插入图片描述

入门案例

需求:

在这里插入图片描述

环境准备

1、导入依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.9.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>net.sf.jasperreports</groupId>
        <artifactId>jasperreports</artifactId>
        <version>6.19.0</version>
    </dependency>
</dependencies>

2、准备中文字体资源文件

jasperReports本身对中文的支持不够好,所以如果涉及到中文,需要自己准备中文的资源,现在已“华文宋体为例”

把图中的文件夹和properties文件直接拷贝到项目的resources文件夹下

在这里插入图片描述
https://gitee.com/zysheep/springboot-jasperreport/tree/master/src/main/resources/stsong

如下效果:

在这里插入图片描述

导出一个最基本的PDF文件

第一步:使用Jaspersoft Studio制作一个简单的模板

1、 创建新模板,删除不需要的Band

在这里插入图片描述
2、画边框和线

在这里插入图片描述
3、添加几个静态的文本
在这里插入图片描述

4、添加变量

在这里插入图片描述

在右下角修改变量名称

在这里插入图片描述

5、使用变量
在这里插入图片描述

6、有中文的设置字体为华文宋体,并居中显示
在这里插入图片描述

7、Ctrl+s保存,右键编译模板

在这里插入图片描述

把demo.jasper文件放到项目的resorces目录下

在这里插入图片描述

第三步:测试代码

/**
 * @ClassName: Demo01
 * @Description: 输出pdf和html,输出pdf乱码问题
 */
public class Demo01 {
    public static void main(String[] args) throws IOException {
        // 1.文件的输入流
        InputStream resourceAsStream = Demo01.class.getClassLoader().getResourceAsStream("jasper/demo.jasper");
        // 设定目标文件输出的路径
        String desFilePath = "./src/Field01.pdf";
        FileOutputStream outputStream = new FileOutputStream(desFilePath);
        try {

            // 2.创建JasperPrint,向jasper文件中填充数据
            Map parameters = new HashMap<>();
            parameters.put("username","封于修");
            parameters.put("phone","15096001234");
            // 3.将JasperPrint已PDF的形式输出
            JasperPrint jasperPrint = JasperFillManager.fillReport(resourceAsStream, parameters, new JREmptyDataSource());

            // 通过JasperExportManager管理工具进行报表输出文档,此处设定为输出Html文件.
            //JasperExportManager.exportReportToHtmlFile(jasperPrint,desFilePath);
            // JasperExportManager.exportReportToPdfFile(jasperPrint,desFilePath);
            JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
        } catch (JRException e) {
            e.printStackTrace();
        }finally {
            outputStream.flush();
        }
    }
}

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

导出用户列表

需求

在这里插入图片描述

数据直接从数据库中获取

第一步:制作模板

1、创建新模板,删除不需要的Band,保留title、Column Header、Detail

在这里插入图片描述

2、配置数据连接

使用JDBC数据源填充数据:使用Jaspersoft Studio 先要配置一个数据库连接
在这里插入图片描述

填写数据源的类型,选择“DatabaseJDBC Connection”

在这里插入图片描述

配置数据库信息

在这里插入图片描述

这一步,需要: (1)给创建的这个数据连接起个名字; (2)根据数据库选择驱动类型; Jaspersoft Studio 已经内置了很多常用数据库的驱动,使用的时候直接选就可以了。当然,如果这还满足不了你的话,你还可以添加你指定的 JDBC 驱动 jar 包。

3、读取表中属性

左下角右击模板名称选择 Dataset and Query

在这里插入图片描述

点击后:

在这里插入图片描述

点击“OK”按钮

左下角的Fields中就有了我们想要的属性字段了

在这里插入图片描述

4、模板如下
在这里插入图片描述
把编译后的jasper文件放入到项目resources中
在这里插入图片描述

第三步:完成代码

@Slf4j
@RestController
public class Demo05 {

    @Autowired
    private HikariDataSource hikariDataSource;

    @GetMapping(value = "/downLoadPDFforDB",name = "导出PDF")
    public void  downLoadPDF(HttpServletResponse response) throws Exception{
        // 获取模板文件
        String ctxPath = ClassUtils.getDefaultClassLoader().getResource("jasper").getPath();

        String filePath =  ctxPath+"/demo05.jasper";
        ServletOutputStream outputStream = response.getOutputStream();
        // 文件名
        String filename="系统日志信息.pdf";
        // 设置两个头 一个是文件的打开方式 一个是mime类型
        response.setHeader( "Content-Disposition", "attachment;filename="  + new String(filename.getBytes(),"ISO8859-1"));
        response.setContentType("application/pdf");
        // 文件的输入流
        InputStream inputStream = new FileInputStream(filePath);
        //2.创建JasperPrint,向jasper文件中填充数据
        Map parameters = new HashMap<>();
        //3.将JasperPrint已PDF的形式输出
        JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream,parameters,hikariDataSource.getConnection());
        //导出
        JasperExportManager.exportReportToPdfStream(jasperPrint,outputStream);
    }
}

数据从后台获取

从上面效果来看,导出的日期格式有问题,其实数据库表中的数据很多情况下都需要做一些业务处理才能被使用的,所以再学习一下数据经过处理后再导出。

第一步:创建模板

1、创建新模板,删除不需要的Band

在这里插入图片描述

2、创建4个field

这4个field的名称要和User实体类中的属性名称要保持一致,但是注意这里有一个hireDateStr

在这里插入图片描述

3、制作如下模板

在这里插入图片描述

第二步:把编译的后的模板文件放入到项目resources中

第三步:修改UserController中的代码

@GetMapping(value = "/downLoadPDF",name = "导出PDF")
public void  downLoadPDF(HttpServletResponse response) throws Exception{
    //userService.downLoadPDFByDB(response);
    userService.downLoadPDF(response);
}

第四步:完成UserService代码

1、在User实体类

@Data
public class User {
    private String id;
    private String userName;
    private String telphone;
    private String hireDateStr;
}    

2、Ctroller层代码实现PDF导出

@RestController
public class Demo03 {

    @GetMapping(value = "/downLoadPDF",name = "导出PDF")
    public void  downLoadPDF(HttpServletResponse response) throws Exception{
        // 获取模板文件
        String ctxPath = ClassUtils.getDefaultClassLoader().getResource("jasper").getPath();
        String filePath =  ctxPath+"/demo03.jasper";

        ServletOutputStream outputStream = response.getOutputStream();
        // 文件名
        String filename="用户列表数据.pdf";
        // 设置两个头 一个是文件的打开方式 一个是mime类型
        response.setHeader( "Content-Disposition", "attachment;filename="  + new String(filename.getBytes(),"ISO8859-1"));
        response.setContentType("application/pdf");
        //  文件的输入流
        InputStream inputStream = new FileInputStream(filePath);
        //2.创建JasperPrint,向jasper文件中填充数据
        Map parameters = new HashMap<>();

        //  查询所有数据
        List<User> userList = selectAll();
        //  给hireDateStr赋值
        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(userList);
        //3.将JasperPrint已PDF的形式输出
        JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream,parameters,dataSource);
        //导出
        JasperExportManager.exportReportToPdfStream(jasperPrint,outputStream);
    }

    // 模拟读取数据库,查询所有数据
    List<User> selectAll() {
        ArrayList<User> users = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setId(UUID.randomUUID().toString().replace("-",""));
            user.setUserName("封于修"+i);
            user.setTelphone("123456789");
            user.setHireDateStr(new SimpleDateFormat("yyyy-MM-dd mm:hh:ss").format(new Date()));
            users.add(user);
        }
        return users;
    }
}

PDF导出图片

第一步:创建模板

1、创建新模板,删除不需要的Band

在这里插入图片描述
2、创建Fields,Clss类型都为java.lang.String,image设置为java.io.InputStream

在这里插入图片描述

3、设置模板基本信息

在这里插入图片描述

4、添加图片数据

a)、在JasperReport 拖拽image 到detail中

在这里插入图片描述

弹出 create new image element选择Image creation mode 中的最后一个No image

在这里插入图片描述

b)、选中刚才添加的image . 在右侧Properties -> Image中,Expression 设置刚才定义的image
On Errror Type: 设置为icon。如果图片不存在不保错,显示icon图标

在这里插入图片描述

最终的模板如下:

第二步:把编译后的模板放入到项目中

在这里插入图片描述

第三步:代码实现

1、UserImage 实体类

@Data
public class UserImage {
    private String id;
    private String userName;
    private String telphone;
    private String hireDateStr;
    private InputStream image;
}

2、Ctroller层代码实现PDF导出

@RestController
public class Demo04 {


   @GetMapping(value = "/downLoadPDFImage",name = "导出PDF")
   public void  downLoadPDF(HttpServletResponse response) throws Exception{

        // 获取模板文件
        String ctxPath = ClassUtils.getDefaultClassLoader().getResource("jasper").getPath();
        String filePath =  ctxPath+"/demo04.jasper";


        ServletOutputStream outputStream = response.getOutputStream();
        // 文件名
        String filename="用户列表数据.pdf";
        //设置两个头 一个是文件的打开方式 一个是mime类型
        response.setHeader( "Content-Disposition", "attachment;filename="  + new String(filename.getBytes(),"ISO8859-1"));
        response.setContentType("application/pdf");
        //  文件的输入流
        InputStream inputStream = new FileInputStream(filePath);
        //2.创建JasperPrint,向jasper文件中填充数据
        Map parameters = new HashMap<>();

        //  查询所有数据
        List<UserImage> userList = selectAll();
        //  给hireDateStr赋值
        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(userList);
        //3.将JasperPrint已PDF的形式输出
        JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream,parameters,dataSource);
        String desFilePath = "./src/demo04.html";
        // 导出PDF
        JasperExportManager.exportReportToPdfStream(jasperPrint,outputStream);
        // 导出为html
        //JasperExportManager.exportReportToHtmlFile(jasperPrint,desFilePath);
    }

    // 模拟读取数据库,查询所有数据
    static List<UserImage> selectAll() {
        ArrayList<UserImage> userImages = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            UserImage userImage = new UserImage();
            userImage.setId(UUID.randomUUID().toString().replace("-",""));
            userImage.setUserName("封于修"+i);
            userImage.setTelphone("123456789");
            userImage.setHireDateStr(new SimpleDateFormat("yyyy-MM-dd mm:hh:ss").format(new Date()));
            InputStream resourceAsStream = Demo04.class.getClassLoader().getResourceAsStream("static/1.png");
            userImage.setImage(resourceAsStream);
            userImages.add(userImage);
        }
        return userImages;
    }
}

导出的效果:

在这里插入图片描述

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

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

相关文章

Lombok实现原理解析

文章目录前言一、Lombok注解分析二、编译期的注解处理期三、Lombok使用方法四、自定义注解处理器1、自定义注解2、实现Processor接口3、注册注解处理器五、实战MyGetter注解1、新建Maven工程myLombok2、新建子模块myget3、新建子模块person4、编译并查看结果总结前言 相信做ja…

171-有趣的OpenAI的chatGPT小实验

最近玩了一下chatGPT 问了他很多问题 然后我问了一个问题 帮我想10个帮女朋友过生日的办法 然后AI就回复了我10种 然后我继续问了我说再来10个 他又想了10种&#xff0c; 所以我特别想看看他到底有没有极限 10个 20个 30个 40个 50个 60个 70个 80个 90个 100个 接下去…

秋招---SQL学习

文章目录SQL的执行顺序一般是怎样的SQL如何性能优化1.select尽量不要查询全部*&#xff0c;而是查具体字段2.避免在where子句中使用 or 来连接条件3.尽量使用数值替代字符串类型tinyint,int,bigint,smallint类型4.用varchar代替char那什么时候要用char不用varchar呢链接&#x…

玩转华夏数艺

这里写自定义目录标题华夏数艺简述新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是…

叶酸-葡聚糖-盐酸吡柔比星偶联物(FA-PRB-DEX-NPs)|丝裂霉素C-右旋糖酐交联物(MMC-D)

叶酸-葡聚糖-盐酸吡柔比星偶联物(FA-PRB-DEX-NPs) 产品描述&#xff1a;将葡聚糖,盐酸吡柔比星和叶酸按序化学合成,并进一步定量,采用体外细胞性实验(四甲基偶氮唑蓝法),观察游离盐酸吡柔比星,叶酸-葡聚糖-盐酸吡柔比星,叶酸-葡聚糖-盐酸吡柔比星游离叶酸对于不同浓度细胞株SG…

计算机毕业设计ssm+vue基本微信小程序的育教幼教知识学习系统 uniapp 小程序

项目介绍 随着互联网技术的发发展,计算机技术广泛应用在人们的生活中,逐渐成为日常工作、生活不可或缺的工具,各种管理系统层出不穷。时代对人们的知识水平和综合素质要求也越来越高了,因此出现了各种适合用户在线学习系统。广泛存在于PC系统,手机APP,电脑软件等等,其中用户量…

Effective C++条款29:为“异常安全”而努力是值得的(Strive for exception-safe code)

Effective C条款29&#xff1a;为“异常安全”而努力是值得的&#xff08;Strive for exception-safe code&#xff09;条款29&#xff1a;为“异常安全”而努力是值得的1、抛出异常的案例2、解决资源泄露的问题3、异常安全的三种保证4、两种解决异常安全的方法4.1 使用智能指针…

如何压缩动态图片大小?gif图太大了怎么压缩?

对于新媒体行业人员来说&#xff0c;平时在工作中需要存非常多的素材&#xff0c;这些素材中有很多就是gif格式的&#xff0c;随着积累的素材越来越多&#xff0c;这些素材会占用大量的储存空间&#xff0c;那么遇到这种情况应该怎么办呢&#xff1f;应该如何压缩动态图片大小&…

Flutter - 布局原理与约束(constraints)

尺寸限制类容器用于限制容器大小&#xff0c;Flutter中提供了多种这样的容器&#xff0c;如ConstrainedBox、SizedBox、UnconstrainedBox、AspectRatio 等 1 ConstrainedBox ConstrainedBox 用于对子组件添加额外的约束 一般作为最外层的父布局 2 BoxConstraints BoxConstrai…

[附源码]Python计算机毕业设计SSM基于社区人员管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

阿里P8架构师精心整理:Dubbo+Docker+Kubernetes实战PDf,附面试题

前言 学习是一种基础性的能力。然而&#xff0c;“吾生也有涯&#xff0c;而知也无涯。”&#xff0c;如果学习不注意方法&#xff0c;则会“以有涯随无涯&#xff0c;殆矣”。 学习就像吃饭睡觉一样&#xff0c;是人的一种本能&#xff0c;人人都有学习的能力。我们在刚出生…

Keycloak之17.0.1 版本和Gerrit 整合-yellowcong

通过keycloak 来实现gerrit的用户管理。主要有几个步骤,1.安装gerrit,2.安装gerrit oauth 插件,3.配置gerrit . 4.创建keycloak的配置,添加realm,client,user ,三个,5.重启gerrit 测试。 17版本不一样的是,需要开启oauth,服务器增加前缀。 准备 Keycloak之17.0.1 版本安…

43. Python for 循环

43. Python for 循环 文章目录43. Python for 循环1. 课题导入2. 什么是循环3. 什么是for循环4. for 循环语法5. 可迭代对象6. for循环的执行流程7. for 循环的对象1. 循环对象为字符串2. 循环的对象不能为整数3. 循环的对象不能为浮点数4. 循环对象为布尔类型5. 循环对象为列表…

使用docker构建vue项目并成功运行在本地和线上

先说本地环境 windows10 node vue docker都已经安装齐全 获取nginx镜像 因为要用这个镜像来构建你的vue项目&#xff0c;就像给vue项目提供一个环境一样 docker pull nginx 创建 nginx config配置文件 在项目根目录下创建文件default.conf server {listen 80;s…

火灾报警产品-火灾探测报警产品

消防产品&#xff0c;是指专门用于火灾预防、灭火救援和火灾防护、避难、逃生的产品。适用范围 适用于消防联动控制系统设备、防火卷帘控制器、线型感温火灾探测器、城市消防远程监控产品。认证模式 型式试验初始工厂检查获证后监督。申请资料 1.认证委托人/生产者/生产企业的资…

全面支持 PyTorch 2.0:BladeDISC 5 月~11 月新功能发布

作者&#xff1a;BladeDISC研发团队 BladeDISC 上一次更新主要发布了 GPU AStitch 优化&#xff0c;方法来源于我们发表在 ASPLOS 2022上的论文AStitch。这一次&#xff0c;我们发布了 0.3.0 版本。 本次更新中 BladeDISC 社区全面支持了 PyTorch 2.0 编译&#xff0c;推进了…

同城跑腿系统搭建,灵活的配送选择满足更多场景

为了提供更加便捷的生活服务&#xff0c;同城跑腿系统搭建通过线上的同城跑腿服务平台&#xff0c;在网上用户可以申请同城服务的需求&#xff0c;平台的相关的工作人员快速的响应接单&#xff0c;快速进行同城的配送跑腿服务。 同城跑腿系统搭建&#xff0c;功能少是万万不能…

微信小程序第四篇:生成图片并保存到手机相册

系列文章传送门&#xff1a; 微信小程序第一篇&#xff1a;自定义组件详解 微信小程序第二篇&#xff1a;七种主流通信方法详解 微信小程序第三篇&#xff1a;获取页面节点信息 目录 一、封装分享组件 二、定义用户授权方法 三、调用流程 首先我们看一下要完成的效果&#x…

地理空间开发包 TatukGIS Developer Kernel 11.72.X Crack

TatukGIS Developer Kernel (DK) 是专业级 GIS SDK&#xff08;软件开发工具包&#xff09;&#xff0c;各行各业的客户都使用它来开发自定义 GIS 应用程序或向现有产品添加地理空间功能。DK 可作为多个 SDK 版本使用&#xff0c;每个版本都针对特定的开发平台进行本地编译&…

胡扯系列之私人AI助手系统的分析与设计

背景 随着时代的发展&#xff0c;计算机算力的提升和近些年来AI模型的井喷以及发展。人工智能应用已经深入我们的日常生活。如人脸识别&#xff0c;无人驾驶等等&#xff0c;同时为了更好地与用户进行交互&#xff0c;完成特定功能&#xff0c;智能对话助手应运而生。如今大量…