python reportlab 生成多页pdf
多页
from reportlab.pdfgen import canvas
from reportlab.platypus import (SimpleDocTemplate, Paragraph, PageBreak, Image, Spacer, Table, TableStyle)
from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet
from reportlab.lib.pagesizes import LETTER, inch
from reportlab.graphics.shapes import Line, LineShape, Drawing
from reportlab.lib.colors import Colorclass FooterCanvas(canvas.Canvas):def __init__(self, *args, **kwargs):canvas.Canvas.__init__(self, *args, **kwargs)self.pages = []self.width, self.height = LETTERdef showPage(self):self.pages.append(dict(self.__dict__))self._startPage()def save(self):page_count = len(self.pages)for page in self.pages:self.__dict__.update(page)if (self._pageNumber > 1):self.draw_canvas(page_count)canvas.Canvas.showPage(self)canvas.Canvas.save(self)def draw_canvas(self, page_count):page = "Page %s of %s" % (self._pageNumber, page_count)x = 128self.saveState()self.setStrokeColorRGB(0, 0, 0)self.setLineWidth(0.5)self.drawImage("python_logo.png", self.width - inch * 8 - 5, self.height - 50, width=100, height=20,preserveAspectRatio=True)self.drawImage("python_logo.png", self.width - inch * 2, self.height - 50, width=100, height=30,preserveAspectRatio=True, mask='auto')self.line(30, 740, LETTER[0] - 50, 740)self.line(66, 78, LETTER[0] - 66, 78)self.setFont('Times-Roman', 10)self.drawString(LETTER[0] - x, 65, page)self.restoreState()class PDFPSReporte:def __init__(self, path):self.path = pathself.styleSheet = getSampleStyleSheet()self.elements = []# colors - Azul turkeza 367AB3self.colorOhkaGreen0 = Color((45.0 / 255), (166.0 / 255), (153.0 / 255), 1)self.colorOhkaGreen1 = Color((182.0 / 255), (227.0 / 255), (166.0 / 255), 1)self.colorOhkaGreen2 = Color((140.0 / 255), (222.0 / 255), (192.0 / 255), 1)# self.colorOhkaGreen2 = Color((140.0/255), (222.0/255), (192.0/255), 1)self.colorOhkaBlue0 = Color((54.0 / 255), (122.0 / 255), (179.0 / 255), 1)self.colorOhkaBlue1 = Color((122.0 / 255), (180.0 / 255), (225.0 / 255), 1)self.colorOhkaGreenLineas = Color((50.0 / 255), (140.0 / 255), (140.0 / 255), 1)self.firstPage()self.nextPagesHeader(True)self.remoteSessionTableMaker()self.nextPagesHeader(False)self.inSiteSessionTableMaker()self.nextPagesHeader(False)self.extraActivitiesTableMaker()self.nextPagesHeader(False)self.summaryTableMaker()# Buildself.doc = SimpleDocTemplate(path, pagesize=LETTER)self.doc.multiBuild(self.elements, canvasmaker=FooterCanvas)def firstPage(self):img = Image('python_logo.png', kind='proportional')img.drawHeight = 0.5 * inchimg.drawWidth = 2.4 * inchimg.hAlign = 'LEFT'self.elements.append(img)spacer = Spacer(30, 100)self.elements.append(spacer)img = Image('python_logo.png')img.drawHeight = 2.5 * inchimg.drawWidth = 5.5 * inchself.elements.append(img)spacer = Spacer(10, 250)self.elements.append(spacer)psDetalle = ParagraphStyle('Resumen', fontSize=9, leading=14, justifyBreaks=1, alignment=TA_LEFT,justifyLastLine=1)text = """REPORTE DE SERVICIOS PROFESIONALES<br/>Empresa: Nombre del Cliente<br/>Fecha de Inicio: 23-Oct-2019<br/>Fecha de actualización: 01-Abril-2020<br/>"""paragraphReportSummary = Paragraph(text, psDetalle)self.elements.append(paragraphReportSummary)self.elements.append(PageBreak())def nextPagesHeader(self, isSecondPage):if isSecondPage:psHeaderText = ParagraphStyle('Hed0', fontSize=16, alignment=TA_LEFT, borderWidth=3,textColor=self.colorOhkaGreen0)text = 'REPORTE DE SESIONES'paragraphReportHeader = Paragraph(text, psHeaderText)self.elements.append(paragraphReportHeader)spacer = Spacer(10, 10)self.elements.append(spacer)d = Drawing(500, 1)line = Line(-15, 0, 483, 0)line.strokeColor = self.colorOhkaGreenLineasline.strokeWidth = 2d.add(line)self.elements.append(d)spacer = Spacer(10, 1)self.elements.append(spacer)d = Drawing(500, 1)line = Line(-15, 0, 483, 0)line.strokeColor = self.colorOhkaGreenLineasline.strokeWidth = 0.5d.add(line)self.elements.append(d)spacer = Spacer(10, 22)self.elements.append(spacer)def remoteSessionTableMaker(self):psHeaderText = ParagraphStyle('Hed0', fontSize=12, alignment=TA_LEFT, borderWidth=3,textColor=self.colorOhkaBlue0)text = 'SESIONES REMOTAS'paragraphReportHeader = Paragraph(text, psHeaderText)self.elements.append(paragraphReportHeader)spacer = Spacer(10, 22)self.elements.append(spacer)"""Create the line items"""d = []textData = ["No.", "Fecha", "Hora Inicio", "Hora Fin", "Tiempo Total"]fontSize = 8centered = ParagraphStyle(name="centered", alignment=TA_CENTER)for text in textData:ptext = "<font size='%s'><b>%s</b></font>" % (fontSize, text)titlesTable = Paragraph(ptext, centered)d.append(titlesTable)data = [d]lineNum = 1formattedLineData = []alignStyle = [ParagraphStyle(name="01", alignment=TA_CENTER),ParagraphStyle(name="02", alignment=TA_LEFT),ParagraphStyle(name="03", alignment=TA_CENTER),ParagraphStyle(name="04", alignment=TA_CENTER),ParagraphStyle(name="05", alignment=TA_CENTER)]for row in range(10):lineData = [str(lineNum), "Miércoles, 11 de diciembre de 2019","17:30", "19:24", "1:54"]# data.append(lineData)columnNumber = 0for item in lineData:ptext = "<font size='%s'>%s</font>" % (fontSize - 1, item)p = Paragraph(ptext, alignStyle[columnNumber])formattedLineData.append(p)columnNumber = columnNumber + 1data.append(formattedLineData)formattedLineData = []# Row for totaltotalRow = ["Total de Horas", "", "", "", "30:15"]for item in totalRow:ptext = "<font size='%s'>%s</font>" % (fontSize - 1, item)p = Paragraph(ptext, alignStyle[1])formattedLineData.append(p)data.append(formattedLineData)# print(data)table = Table(data, colWidths=[50, 200, 80, 80, 80])tStyle = TableStyle([ # ('GRID',(0, 0), (-1, -1), 0.5, grey),('ALIGN', (0, 0), (0, -1), 'LEFT'),# ('VALIGN', (0, 0), (-1, -1), 'TOP'),("ALIGN", (1, 0), (1, -1), 'RIGHT'),('LINEABOVE', (0, 0), (-1, -1), 1, self.colorOhkaBlue1),('BACKGROUND', (0, 0), (-1, 0), self.colorOhkaGreenLineas),('BACKGROUND', (0, -1), (-1, -1), self.colorOhkaBlue1),('SPAN', (0, -1), (-2, -1))])table.setStyle(tStyle)self.elements.append(table)def inSiteSessionTableMaker(self):self.elements.append(PageBreak())psHeaderText = ParagraphStyle('Hed0', fontSize=12, alignment=TA_LEFT, borderWidth=3,textColor=self.colorOhkaBlue0)text = 'SESIONES EN SITIO'paragraphReportHeader = Paragraph(text, psHeaderText)self.elements.append(paragraphReportHeader)spacer = Spacer(10, 22)self.elements.append(spacer)"""Create the line items"""d = []textData = ["No.", "Fecha", "Hora Inicio", "Hora Fin", "Tiempo Total"]fontSize = 8centered = ParagraphStyle(name="centered", alignment=TA_CENTER)for text in textData:ptext = "<font size='%s'><b>%s</b></font>" % (fontSize, text)titlesTable = Paragraph(ptext, centered)d.append(titlesTable)data = [d]lineNum = 1formattedLineData = []alignStyle = [ParagraphStyle(name="01", alignment=TA_CENTER),ParagraphStyle(name="02", alignment=TA_LEFT),ParagraphStyle(name="03", alignment=TA_CENTER),ParagraphStyle(name="04", alignment=TA_CENTER),ParagraphStyle(name="05", alignment=TA_CENTER)]for row in range(10):lineData = [str(lineNum), "Miércoles, 11 de diciembre de 2019","17:30", "19:24", "1:54"]# data.append(lineData)columnNumber = 0for item in lineData:ptext = "<font size='%s'>%s</font>" % (fontSize - 1, item)p = Paragraph(ptext, alignStyle[columnNumber])formattedLineData.append(p)columnNumber = columnNumber + 1data.append(formattedLineData)formattedLineData = []# Row for totaltotalRow = ["Total de Horas", "", "", "", "30:15"]for item in totalRow:ptext = "<font size='%s'>%s</font>" % (fontSize - 1, item)p = Paragraph(ptext, alignStyle[1])formattedLineData.append(p)data.append(formattedLineData)# print(data)table = Table(data, colWidths=[50, 200, 80, 80, 80])tStyle = TableStyle([ # ('GRID',(0, 0), (-1, -1), 0.5, grey),('ALIGN', (0, 0), (0, -1), 'LEFT'),# ('VALIGN', (0, 0), (-1, -1), 'TOP'),("ALIGN", (1, 0), (1, -1), 'RIGHT'),('LINEABOVE', (0, 0), (-1, -1), 1, self.colorOhkaBlue1),('BACKGROUND', (0, 0), (-1, 0), self.colorOhkaGreenLineas),('BACKGROUND', (0, -1), (-1, -1), self.colorOhkaBlue1),('SPAN', (0, -1), (-2, -1))])table.setStyle(tStyle)self.elements.append(table)def extraActivitiesTableMaker(self):self.elements.append(PageBreak())psHeaderText = ParagraphStyle('Hed0', fontSize=12, alignment=TA_LEFT, borderWidth=3,textColor=self.colorOhkaBlue0)text = 'OTRAS ACTIVIDADES Y DOCUMENTACIÓN'paragraphReportHeader = Paragraph(text, psHeaderText)self.elements.append(paragraphReportHeader)spacer = Spacer(10, 22)self.elements.append(spacer)"""Create the line items"""d = []textData = ["No.", "Fecha", "Hora Inicio", "Hora Fin", "Tiempo Total"]fontSize = 8centered = ParagraphStyle(name="centered", alignment=TA_CENTER)for text in textData:ptext = "<font size='%s'><b>%s</b></font>" % (fontSize, text)titlesTable = Paragraph(ptext, centered)d.append(titlesTable)data = [d]lineNum = 1formattedLineData = []alignStyle = [ParagraphStyle(name="01", alignment=TA_CENTER),ParagraphStyle(name="02", alignment=TA_LEFT),ParagraphStyle(name="03", alignment=TA_CENTER),ParagraphStyle(name="04", alignment=TA_CENTER),ParagraphStyle(name="05", alignment=TA_CENTER)]for row in range(10):lineData = [str(lineNum), "Miércoles, 11 de diciembre de 2019","17:30", "19:24", "1:54"]# data.append(lineData)columnNumber = 0for item in lineData:ptext = "<font size='%s'>%s</font>" % (fontSize - 1, item)p = Paragraph(ptext, alignStyle[columnNumber])formattedLineData.append(p)columnNumber = columnNumber + 1data.append(formattedLineData)formattedLineData = []# Row for totaltotalRow = ["Total de Horas", "", "", "", "30:15"]for item in totalRow:ptext = "<font size='%s'>%s</font>" % (fontSize - 1, item)p = Paragraph(ptext, alignStyle[1])formattedLineData.append(p)data.append(formattedLineData)# print(data)table = Table(data, colWidths=[50, 200, 80, 80, 80])tStyle = TableStyle([ # ('GRID',(0, 0), (-1, -1), 0.5, grey),('ALIGN', (0, 0), (0, -1), 'LEFT'),# ('VALIGN', (0, 0), (-1, -1), 'TOP'),("ALIGN", (1, 0), (1, -1), 'RIGHT'),('LINEABOVE', (0, 0), (-1, -1), 1, self.colorOhkaBlue1),('BACKGROUND', (0, 0), (-1, 0), self.colorOhkaGreenLineas),('BACKGROUND', (0, -1), (-1, -1), self.colorOhkaBlue1),('SPAN', (0, -1), (-2, -1))])table.setStyle(tStyle)self.elements.append(table)def summaryTableMaker(self):self.elements.append(PageBreak())psHeaderText = ParagraphStyle('Hed0', fontSize=12, alignment=TA_LEFT, borderWidth=3,textColor=self.colorOhkaBlue0)text = 'REGISTRO TOTAL DE HORAS'paragraphReportHeader = Paragraph(text, psHeaderText)self.elements.append(paragraphReportHeader)spacer = Spacer(10, 22)self.elements.append(spacer)"""Create the line items"""tStyle = TableStyle([('ALIGN', (0, 0), (0, -1), 'LEFT'),# ('VALIGN', (0, 0), (-1, -1), 'TOP'),("ALIGN", (1, 0), (1, -1), 'RIGHT'),('LINEABOVE', (0, 0), (-1, -1), 1, self.colorOhkaBlue1),('BACKGROUND', (-2, -1), (-1, -1), self.colorOhkaGreen2)])fontSize = 8lineData = [["Sesiones remotas", "30:15"],["Sesiones en sitio", "00:00"],["Otras actividades", "00:00"],["Total de horas consumidas", "30:15"]]# for row in lineData:# for item in row:# ptext = "<font size='%s'>%s</font>" % (fontSize-1, item)# p = Paragraph(ptext, centered)# formattedLineData.append(p)# data.append(formattedLineData)# formattedLineData = []table = Table(lineData, colWidths=[400, 100])table.setStyle(tStyle)self.elements.append(table)# Total de horas contradas vs horas consumidasdata = []formattedLineData = []lineData = [["Total de horas contratadas", "120:00"],["Horas restantes por consumir", "00:00"]]# for row in lineData:# for item in row:# ptext = "<b>{}</b>".format(item)# p = Paragraph(ptext, self.styleSheet["BodyText"])# formattedLineData.append(p)# data.append(formattedLineData)# formattedLineData = []table = Table(lineData, colWidths=[400, 100])tStyle = TableStyle([('ALIGN', (0, 0), (0, -1), 'LEFT'),("ALIGN", (1, 0), (1, -1), 'RIGHT'),('BACKGROUND', (0, 0), (1, 0), self.colorOhkaBlue1),('BACKGROUND', (0, 1), (1, 1), self.colorOhkaGreen1),])table.setStyle(tStyle)spacer = Spacer(10, 50)self.elements.append(spacer)self.elements.append(table)if __name__ == '__main__':report = PDFPSReporte('psreport.pdf')相关文章:
python reportlab 生成多页pdf
多页 from reportlab.pdfgen import canvas from reportlab.platypus import (SimpleDocTemplate, Paragraph, PageBreak, Image, Spacer, Table, TableStyle) from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY from reportlab.lib.styles import P…...
word 多级目录的问题
一、多级标题自动编号 --> 制表符 -> 空格 网址: 【Word技巧】2 标题自动编号——将多级列表链接到样式 - YouTube 二、多级列表 --> 正规形式编号 网址:Word 教学 - 定框架:文档格式与多级标题! - YouTube 三、目…...
python使用mitmproxy和mitmdump抓包之拦截和修改包(四)
我认为mitmproxy最强大的地方,就是mitmdump可以结合python代理,灵活拦截和处理数据包。 首先,mitmdump的路径如下:(使用pip3 install mitmproxy安装的情况,参考我的文章python使用mitmproxy和mitmdump抓包…...
邓俊辉《数据结构》→ “2.6.5 二分查找(版本A)”之“成功查找长度”递推式推导
【问题描述】 邓俊辉的《数据结构(C语言版)(第3版)》(ISBN:9787302330646)中,开始于第48页的“2.6.5 二分查找(版本A)”内容在第50页详述了“成功查找长度”的…...
Linux文件查找,别名,用户组综合练习
1.文件查看: 查看/etc/passwd文件的第5行 [rootserver ~]# head -5 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologi…...
【MATLAB第77期】基于MATLAB代理模型算法的降维/特征排序/数据处理回归/分类问题MATLAB代码实现【更新中】
【MATLAB第77期】基于MATLAB代理模型算法的降维/特征排序/数据处理回归/分类问题MATLAB代码实现 本文介绍基于libsvm代理模型算法的特征排序方法合集,包括: 1.基于每个特征预测精度进行排序(libsvm代理模型) 2.基于相关系数corr的…...
第三章 图标辅助元素的定制
第三章 图标辅助元素的定制 1.认识图表常用的辅助元素 图表的辅助元素是指除了根据数据绘制的图形之外的元素,常用的辅助元素包括坐标轴、标题、图例、网格、参考线、参考区域、注释文本和表格,它们都可以对图形进行补充说明。 上图中图表常用辅…...
【前端】ECMAScript6从入门到进阶
【前端】ECMAScript6从入门到进阶 1.ES6简介及环境搭建 1.1.ECMAScript 6简介 (1)ECMAScript 6是什么 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了。它的目标ÿ…...
Android Shape设置背景
设置背景时,经常这样 android:background“drawable/xxx” 。如果是纯色图片,可以考虑用 shape 替代。 shape 相比图片,减少资源占用,缩减APK体积。 开始使用。 <?xml version"1.0" encoding"utf-8"?…...
什么是GraphQL?它与传统的REST API有什么不同?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是GraphQL?⭐ 与传统的REST API 的不同⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣…...
如何定时备份使用Docker构建的MySQL容器中的数据库
👨🏻💻 热爱摄影的程序员 👨🏻🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…...
Java【手撕链表】LeetCode 143. “重排链表“, 图文详解思路分析 + 代码
文章目录 前言一、两数相加1, 题目2, 思路分析2,1 找到中间结点2.2, 逆序后半段链表2.3, 合并两个链表 3, 代码 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管…...
C语言 cortex-A7核 按键中断 实验【重点】
一、KEY1 include/key.h #ifndef __KEY_H__ #define __KEY_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_exti.h" #include "stm32mp1xx_gic.h"//RCC/GPIO章节初始化 void hal_rcc_gpio_init…...
freertos中函数调用和启动第一个任务(栈相关!!!!!!)
本内容仅就一些较难理解的点讲解,请结合其它文章实用 在函数调用时,m3的处理器使用r0-r3共四个寄存器传参,其余的使用栈传参。 但是,如果传入的参数是全局变量,则不需传参,因为全局变量在函数内部是可见的…...
【PHP】如何关闭buffer实时输出内容到前端
前言 默认情况下,我们在PHP里使用echo等函数输出的内容,是不会马上发送给前端的,原因是有 buffer 的存在,buffer又分两处,一处是PHP本身的buffer,另一处是Nginx的buffer。只有当buffer满了之后,…...
Scala第二章节
Scala第二章节 scala总目录 章节目标 掌握变量, 字符串的定义和使用掌握数据类型的划分和数据类型转换的内容掌握键盘录入功能理解Scala中的常量, 标识符相关内容 1. 输出语句和分号 1.1 输出语句 方式一: 换行输出 格式: println(里边写你要打印到控制台的数据);方式二…...
Spring修炼之路(2)依赖注入(DI)
一、概念 依赖注入(Dependency Injection,DI)。 测试pojo类 : Address.java 依赖 : 指Bean对象的创建依赖于容器 . Bean对象的依赖资源 . 注入 : 指Bean对象所依赖的资源 , 由容器来设置和装配 . 二、 注入方式 2.1构造器注入 我们在之前的案例已经…...
编写Android.mk / Android.bp 引用三方 jar 包,aar包,so 库
一.前言 在Android10之后,所有项目工程中,官方推荐使用Android.bp去编译构建,以前使用Android.mk构建的项目随着版本迭代升级,慢慢需要变更为Android.bp, 两者的语法都需要去了解并熟练使用。 笔者之前写过Android.mk的…...
【kylin】【ubuntu】搭建本地源
文章目录 一、制作一个本地源仓库制作ubuntu本地仓库制作kylin本地源 二、制作内网源服务器ubuntu系统kylin系统 三、使用内网源ubuntukylin 一、制作一个本地源仓库 制作ubuntu本地仓库 首先需要构建一个本地仓库,用来存放软件包 mkdir -p /path/to/localname/pac…...
为什么 Go 语言 struct 要使用 tags
在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以有不同的类型和名称。 除了这些基本信息之外,Go 还提供了 struct tags,它可以用…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
