reportlab 生成pdf文件 (python)

1 安装

pip install reportlab

2 应用场景

  • 通过网页动态生成PDF文档
  • 大量的报告和数据发布
  • 用XML一步生成PDF
    官网案例

3 PLATYPUS

Platypus是“Page Layout and Typography Using Scripts”,是使用脚本的页面布局和印刷术的缩写,这是一个高层次页面布局库,它可以让你通过编程创造复杂的文档,并且毫不费力。

Platypus设计的目的是尽可能地将高层布局设计与文档内容分离,比如,段落使用段落格式构造,页面使用页面模板,这样做是有好处的,在仅仅修改几行代码的情况下,包含数百个页面的数百个文档就能够被构造成不同的风格。

  • Platypus从上到下,可以被看成具备多个层次。
  • DocTemplates:文档最外层的容器
  • PageTemplates:各种页面布局的规格
  • Frames:包含流动的文本和图形的文档区域规范
  • Flowables:能够被“流入文档”的文本、图形和段落等。
    在这里插入图片描述

3.1 start demo

import reportlab
from reportlab.platypus import SimpleDocTemplate, Paragraph
from reportlab.lib.styles import getSampleStyleSheet# 调用模板,创建指定名称的PDF文档
doc = SimpleDocTemplate("start_demo.pdf")
# 获得模板表格
styles = getSampleStyleSheet()
# 指定模板
style = styles['Normal']
# 初始化内容
story =[]
# 将段落添加到内容中
story.append(Paragraph("this is a demo pdf!",style))
# 将内容输出到PDF中
doc.build(story)

在Python文件的同目录下,生成一个文件名为”start_demo.pdf“的文件:
在这里插入图片描述

doc = SimpleDocTemplate("start_demo.pdf") 调用了 BaseDocTemplate模板BaseDocTemplate 基本思想很简单。
1) 该文档有一个与之相关的数据列表,这些数据应该来自流动性。我们会特殊类,如PageBreak、FrameBreak,用于执行强制页面结束等操作。
2) 文档有一个或多个页面模板。
3) 每个页面模板都有一个或多个框架。
4) document类提供了处理故事事件的基本方法,以及将故事流放入框架的一些合理方法。
5) 文档实例可以覆盖基本处理程序例程。
这个类的大多数方法不是由用户直接调用的,但在一些高级用法中,它们可能需要通过子类化来重写。
异常:必须调用doctemplate.build(…)才能获得最合理的用途,因为它使用页面模板生成文档。
每个文档模板在初始化时将恰好一个文档构建到filename参数指定的文件中。
初始化的可能关键字参数:
-pageTemplates:模板列表。必须是非空的。指定给模板的名称用于引用它们,因此使用的两个模板不应具有相同的名称。例如,在奇数页和偶数页上,您可能需要一个标题页模板、一个章节首页模板、一章首页模板和两个章节内部模板。如果省略了此参数,则在生成文档之前,应使用addPageTemplates方法至少提供一个pageTemplate。
-pageSize:reportlab/lib/pagesizes.pu中的2元组或大小常量。由SimpleDocTemplate子类使用,该子类不接受的列表
pageTemplates,但为您制作一个;使用pageTemplates时忽略。
-showBoundary:如果设置,则在框架边界周围绘制一个框。
-左边距:
-右侧边距:
-顶部边距:
-底部边距:以点为单位的边距大小(默认为1英寸)。这些页边距可能会被pageTemplates覆盖。它们主要是SimpleDocumentTemplate子类感兴趣的。
-allowSpliting:如果设置了流动性(如段落),则可以在框架或页面之间进行拆分(默认值:1-title:文档的内部标题(不会自动显示在任何页面上)
-author:文档的内部作者(不会自动显示在任何页面上)初始化参数:'pagesize':defaultPageSize,'pageTemplates':[],'showBoundary':0,'leftMargin':inch,'rightMargin':inch,'topMargin':inch,'bottomMargin':inch,'allowSplitting':1,'title':None,'author':None,'subject':None,'creator':None,'producer':None,'keywords':[],'invariant':None,'pageCompression':None,'_pageBreakQuick':1,'rotation':0,'_debug':0,'encrypt': None,'cropMarks': None,'enforceColorSpace': None,'displayDocTitle': None,'lang': None,'initialFontName': None,'initialFontSize': None,'initialLeading': None,'cropBox': None,'artBox': None,'trimBox': None,'bleedBox': None,'keepTogetherClass': KeepTogether,'hideToolbar': None,'hideMenubar': None,'hideWindowUI': None,'fitWindow': None,'centerWindow': None,'nonFullScreenPageMode': None,'direction': None,'viewArea': None,'viewClip': None,'printArea': None,'printClip': None,'printScaling': None,'duplex': None,

4 段落

段落是一种重要的Flowables,它可以格式化任意的文本。

段落中主要包括两种信息:文本和格式。Paragraph(text, style)

  • text参数提供了段落的文本,末尾和换行处的空白都会被删除。
  • style参数用于设置段落的格式,这里段落的格式是指参数的集合,包括字体大小、行间距、首行缩进等参数。我们可以调用如下语句来获得默认段落格式。
from reportlab.lib.styles import ParagraphStyle

4.1 ParagraphStyle 参数

class ParagraphStyle(PropertySet):defaults = {'fontName':_baseFontName,'fontSize':10,'leading':12,'leftIndent':0,'rightIndent':0,'firstLineIndent':0,'alignment':TA_LEFT,'spaceBefore':0,'spaceAfter':0,'bulletFontName':_baseFontName,'bulletFontSize':10,'bulletIndent':0,#'bulletColor':black,'textColor': black,'backColor':None,'wordWrap':None,        #None means do nothing special#CJK use Chinese Line breaking#LTR RTL use left to right / right to left#with support from pyfribi2 if available'borderWidth': 0,'borderPadding': 0,'borderColor': None,'borderRadius': None,'allowWidows': 1,'allowOrphans': 0,'textTransform':None,   #uppercase lowercase (captitalize not yet) or None or absent'endDots':None,         #dots on the last line of left/right justified paras#string or object with text and optional fontName, fontSize, textColor & backColor#dy'splitLongWords':1,     #make best efforts to split long words'underlineWidth': _baseUnderlineWidth,  #underline width default'bulletAnchor': 'start',    #where the bullet is anchored ie start, middle, end or numeric'justifyLastLine': 0,   #n allow justification on the last line for more than n words 0 means don't bother'justifyBreaks': 0,     #justify lines broken with <br/>'spaceShrinkage': _spaceShrinkage,  #allow shrinkage of percentage of space to fit on line'strikeWidth': _baseStrikeWidth,    #stroke width default'underlineOffset': _baseUnderlineOffset,    #fraction of fontsize to offset underlines'underlineGap': _baseUnderlineGap,      #gap for double/triple underline'strikeOffset': _baseStrikeOffset,  #fraction of fontsize to offset strikethrough'strikeGap': _baseStrikeGap,        #gap for double/triple strike'linkUnderline': _platypus_link_underline,'underlineColor':   None,'strikeColor': None,'hyphenationLang': _hyphenationLang,#'hyphenationMinWordLength': _hyphenationMinWordLength,'embeddedHyphenation': _embeddedHyphenation,'uriWasteReduce': _uriWasteReduce,}

几个重要的参数说明:

  • fontName:字体名称
  • fontSize:字体大小
  • leading:行间距
  • leftIndent:左缩进
  • rightIndent:右缩进
  • firstLineIndent:首行缩进
  • alignment:对齐方式
  • spaceBefore:段前间隙
  • spaceAfter:段后间隙
  • bulletFontName:列表名称
  • bulletFontSize:列表字体大小
  • bulletIndent:列表缩进
  • textColor:字体颜色
  • backColor:背景色
  • borderWidth:边框粗细
  • borderPadding:边框间距
  • borderColor:边框颜色

ParagraphStyle是段落的默认格式,也就是在调用Paragraph(text, style)语句时,如果不传入style参数,默认的段落格式。

还有其他方式获得ReportLab提供的段落格式:

from reportlab.lib.styles import getSampleStyleSheet
stylesheet=getSampleStyleSheet()
normalStyle = stylesheet['Normal']

这里获得系统提供的Normal格式,其实Normal格式与ParagraphStyle是一模一样的,除了Normal格式,还可以获得其他的格式:

  • Normal
  • BodyText
  • Italic
  • Title
  • Heading1
  • Heading2
  • Heading3
  • Heading4
  • Heading5
  • Heading6
  • Bullet
  • Definition
  • Code
  • UnorderedList
  • OrderedList
def getSampleStyleSheet():"""Returns a stylesheet object"""stylesheet = StyleSheet1()stylesheet.add(ParagraphStyle(name='Normal',fontName=_baseFontName,fontSize=10,leading=12))stylesheet.add(ParagraphStyle(name='BodyText',parent=stylesheet['Normal'],spaceBefore=6))stylesheet.add(ParagraphStyle(name='Italic',parent=stylesheet['BodyText'],fontName = _baseFontNameI))stylesheet.add(ParagraphStyle(name='Heading1',parent=stylesheet['Normal'],fontName = _baseFontNameB,fontSize=18,leading=22,spaceAfter=6),alias='h1')stylesheet.add(ParagraphStyle(name='Title',parent=stylesheet['Normal'],fontName = _baseFontNameB,fontSize=18,leading=22,alignment=TA_CENTER,spaceAfter=6),alias='title')stylesheet.add(ParagraphStyle(name='Heading2',parent=stylesheet['Normal'],fontName = _baseFontNameB,fontSize=14,leading=18,spaceBefore=12,spaceAfter=6),alias='h2')stylesheet.add(ParagraphStyle(name='Heading3',parent=stylesheet['Normal'],fontName = _baseFontNameBI,fontSize=12,leading=14,spaceBefore=12,spaceAfter=6),alias='h3')stylesheet.add(ParagraphStyle(name='Heading4',parent=stylesheet['Normal'],fontName = _baseFontNameBI,fontSize=10,leading=12,spaceBefore=10,spaceAfter=4),alias='h4')stylesheet.add(ParagraphStyle(name='Heading5',parent=stylesheet['Normal'],fontName = _baseFontNameB,fontSize=9,leading=10.8,spaceBefore=8,spaceAfter=4),alias='h5')stylesheet.add(ParagraphStyle(name='Heading6',parent=stylesheet['Normal'],fontName = _baseFontNameB,fontSize=7,leading=8.4,spaceBefore=6,spaceAfter=2),alias='h6')stylesheet.add(ParagraphStyle(name='Bullet',parent=stylesheet['Normal'],firstLineIndent=0,spaceBefore=3),alias='bu')stylesheet.add(ParagraphStyle(name='Definition',parent=stylesheet['Normal'],firstLineIndent=0,leftIndent=36,bulletIndent=0,spaceBefore=6,bulletFontName=_baseFontNameBI),alias='df')stylesheet.add(ParagraphStyle(name='Code',parent=stylesheet['Normal'],fontName='Courier',fontSize=8,leading=8.8,firstLineIndent=0,leftIndent=36,hyphenationLang=''))stylesheet.add(ListStyle(name='UnorderedList',parent=None,leftIndent=18,rightIndent=0,bulletAlign='left',bulletType='1',bulletColor=black,bulletFontName='Helvetica',bulletFontSize=12,bulletOffsetY=0,bulletDedent='auto',bulletDir='ltr',bulletFormat=None,#start='circle square blackstar sparkle disc diamond'.split(),start=None,),alias='ul')stylesheet.add(ListStyle(name='OrderedList',parent=None,leftIndent=18,rightIndent=0,bulletAlign='left',bulletType='1',bulletColor=black,bulletFontName='Helvetica',bulletFontSize=12,bulletOffsetY=0,bulletDedent='auto',bulletDir='ltr',bulletFormat=None,#start='1 a A i I'.split(),start=None,),alias='ol')return stylesheet

假如想要获得Title格式,我们只需要按照如下格式调用即可:

from reportlab.lib.styles import getSampleStyleSheet
stylesheet=getSampleStyleSheet()
titleStyle = stylesheet['Title']

从Title的源代码可知:Title的效果是:字体18号;行间距22;对齐方式:居中;段落后间距:6。

5 表格

表格是Flowable的派生类,是一种简单文本表格机制。表格可以保存所有能被转换为字符串或Flowerable是所有事物。
如果我们不提供行高,它们可以根据数据自动计算出行高。
如果需要,它们可以跨页分割,你可以指定跨页分割后,需要重复的行数。
表格风格和表格数据是分离的,因此你可以声明一系列的风格,然后将它们用于一大堆报告。
表格使用如下代码进行创建:

Table(data, colWidths=None, rowHeights=None, style=None, splitByRow=1,
repeatRows=0, repeatCols=0, rowSplitRange=None, spaceBefore=None,
spaceAfter=None)

几个关键参数:

  • data:数据参数是一系列的表格值,每个表格值能够被转换为字符串或者Flowable实例。data值的第一行是data[0],第i行j列表格值是data[i] [j]。
  • colWidths:是一系列值,这些值代表每列的宽度。如果传递的是None,则对应列宽需要被自动计算。
  • rowHeights:是一系列值,这些值代表每行的高度。如果传递的是None,则对应的行高需要被自动计算。
  • style:表格被创建时的初始样式值。
  • splitByRow:布尔值,当指定值为1时,允许跨页分割表格,当指定指为0时,不允许跨页分割表格。
  • repeatRows:指定跨页分行时,需要重复的行数。
  • repeatCols:暂时没用。
  • spaceBefore:指定表格前的行数。
  • spaceAfter:指定表格后的行数。
from reportlab.platypus import SimpleDocTemplate, Table
from reportlab.lib.styles import getSampleStyleSheet# 调用模板,创建指定名称的PDF文档
doc = SimpleDocTemplate("my_pdf_01.pdf")
# 获得模板表格
styles = getSampleStyleSheet()
# 指定模板
style = styles['Normal']
# 初始化内容
story =[]# 初始化表格内容
data= [['00', '01', '02', '03', '04'],['10', '11', '12', '13', '14'],['20', '21', '22', '23', '24'],['30', '31', '32', '33', '34']]# 根据内容创建表格
t = Table(data)
# 将表格添加到内容中
story.append(t)
# 将内容输出到PDF中
doc.build(story)

在这里插入图片描述

5.1 表格格式

指定表格格式有两种方式,一种是在调用创建表格接口时,传入style参数,一种是在创建完表格后,调用如下接口:

Table.setStyle(tblStyle)

5.1.1 直接传入style参数

from reportlab.platypus import SimpleDocTemplate, Table
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet# 调用模板,创建指定名称的PDF文档,输入参数为路径文件名
doc = SimpleDocTemplate("../datas/wws_tables.pdf")
# 获得模板表格
styles = getSampleStyleSheet()
# 指定模板
style = styles['Normal']
# 初始化内容
story = []# 初始化表格内容
data = [['00', '01', '02', '03', '04'],['10', '11', '12', '13', '14'],['20', '21', '22', '23', '24'],['30', '31', '32', '33', '34']]# 根据内容创建表格,同时添加格式
t = Table(data,style=[('GRID', (0, 0), (-1, -1), 1, colors.grey),('GRID', (1, 1), (-2, -2), 1, colors.green),('BOX', (0, 0), (1, -1), 2, colors.red),('BACKGROUND', (0, 0), (0, 1), colors.pink),('BACKGROUND', (1, 1), (1, 2), colors.lavender),('BACKGROUND', (2, 2), (2, 3), colors.orange),])# 将表格添加到内容中
story.append(t)
# 将内容输出到PDF中
doc.build(story)

在这里插入图片描述

5.1.2 调用setStyle

from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet# 调用模板,创建指定名称的PDF文档
doc = SimpleDocTemplate("../datas/wws_tables.pdf")
# 获得模板表格
styles = getSampleStyleSheet()
# 指定模板
style = styles['Normal']
# 初始化内容
story = []# 初始化表格内容
data = [['00', '01', '02', '03', '04'],['10', '11', '12', '13', '14'],['20', '21', '22', '23', '24'],['30', '31', '32', '33', '34']]# 根据内容创建表格
t = Table(data)# 然后调用setStyle添加格式
t.setStyle(TableStyle([('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),('BOX', (0, 0), (-1, -1), 2, colors.black),('LINEBELOW', (0, 0), (-1, 0), 2, colors.yellow),('LINEAFTER', (0, 0), (0, -1), 2, colors.blue),('ALIGN', (1, 1), (-1, -1), 'RIGHT')]))# 将表格添加到内容中
story.append(t)
# 将内容输出到PDF中
doc.build(story)

在这里插入图片描述

  • 表格的位置索引方式与列表的索引方式一致
  • 左上角第一个是data[0] [0]
  • 第二行第一个是data[1] [0]
  • 最后一行第一个位置是data[-1] [0],依次类推。

重点表格格式化命令:

  • FONTNAME:字体名称
  • FONTSIZE:字体大小
  • LEADING:行间距
  • TEXTCOLOR:字体颜色
  • ALIGNMENT:水平对齐方式(可选值:“LEFT”,”RIGHT“,”CENTER“)
  • LEFTPADDING:左边填充
  • RIGHTPADDING:右边填充
  • BOTTOMPADDING:底部填充
  • TOPPADDING:顶部填充
  • BACKGROUND:背景色
  • VALIGN:垂直对齐方式(可选值:“TOP”,“MIDDLE”,“BOTTOM”)
  • GRID:表格颜色,被指定的行列中的所有子行和子列都被设置成相应颜色
  • INNERGRID:表格颜色,仅仅修改指定的子行和子列的相应颜色(不包括边框)
  • BOX:边框颜色,被指定的边框的颜色
  • LINEBELOW:指定块底部的行颜色
  • LINEAFTER:指定块右边的行颜色。

6 图片

在调用接口时,支持默认的jpeg格式。接口如下:

Image(filename, width=None, height=None)
  • filename:指定文件名
  • width:指定图片的宽度
  • height:指定图片的高度

如果宽度和高度有一个没有被指定,则参考原来的图片像素。

from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheetfrom reportlab.platypus import SimpleDocTemplate, Imagefrom reportlab.lib.styles import getSampleStyleSheet# 调用模板,创建指定名称的PDF文档
doc = SimpleDocTemplate("../datas/wws_tables.pdf")
# 获得模板表格
styles = getSampleStyleSheet()
# 指定模板
style = styles['Normal']
# 初始化内容
story = []# 初始化表格内容
data = [['00', '01', '02', '03', '04'],['10', '11', '12', '13', '14'],['20', '21', '22', '23', '24'],['30', '31', '32', '33', '34']]# 根据内容创建表格, 表格后空两行,不然图片连一块了,难看
t = Table(data, spaceAfter=10)# 然后调用setStyle添加格式
t.setStyle(TableStyle([('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black),('BOX', (0, 0), (-1, -1), 2, colors.black),('LINEBELOW', (0, 0), (-1, 0), 2, colors.yellow),('LINEAFTER', (0, 0), (0, -1), 2, colors.blue),('ALIGN', (1, 1), (-1, -1), 'RIGHT')]))# 将表格添加到内容中
story.append(t)
# 添加图片
IMG = Image("C:\\Users\\admin\\Documents\\index\\PS图片\\20230926-144332.jpg", width=120, height=160)
story.append(IMG)# 将内容输出到PDF中
doc.build(story)

在这里插入图片描述


参考

python 生成pdf
reportlab 官网案例
reportlab 官方文档
文档官方demo
flask_reportlab
adding-links-to-pdf
Python的reportlab制作pdf时,如何让插入的图片适应pdf的大小
reportlab 中文问题

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

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

相关文章

【面试题】MySQL 事务的四大特性说一下?

事务是一个或多个 SQL 语句组成的一个执行单元&#xff0c;这些 SQL 语句要么全部执行成功&#xff0c;要么全部不执行&#xff0c;不会出现部分执行的情况。事务是数据库管理系统执行过程中的一个逻辑单位&#xff0c;由一个有限的数据库操作序列构成。 事务的主要作用是保证数…

记一次kafkakerberos认证问题

1&#xff0c;报错信息 排查思路&#xff1a;检查kerberos配置文件 kerberos.kafka.principalkafka/huawe_baseSECURITY.COM kerberos.kafka.keytabPath/etc/huawe_base.keytab kerberos.kafka.krb5ConfPath/etc/krb5.conf但是查看kafka_client_jass.conf文件&#xff0c;发现…

网络基础-TCP/IP和OSI协议模型

一、OSI和TCP/IP模型 二、OSI七层模型 三、TCP/IP模型 参考&#xff1a;https://www.cnblogs.com/f-ck-need-u/p/7623252.html

关联规则挖掘(二)

目录 三、FP-增长算法&#xff08;一&#xff09;算法的背景&#xff08;二&#xff09;构造FP-树&#xff08;三&#xff09;生成频繁项集 四、关联规则的评价&#xff08;一&#xff09;支持度和置信度的不足&#xff08;二&#xff09;相关性分析 三、FP-增长算法 &#xf…

.NET 发布,部署和运行应用程序

.NET应用发布 发布.Net应用有很多种方式&#xff0c;下面列举三种发布方式&#xff1a; 单文件发布跨平台发布Docker发布 单文件发布 右键工程&#xff0c;选择“发布”&#xff0c;部署模式选择“独立”&#xff0c;目标运行时选择自己想要部署到的系统&#xff0c;我这里用…

问题:react函数中的state是上一次的值

场景 有一个聊天输入框组件&#xff0c;输入框上面有表情包组件。 通过redux创建了store&#xff0c;存储一个message的状态&#xff0c;用于表情包和输入框共享状态。 输入框通过设置value和onClick做了一个简单双向绑定&#xff0c;其中value的值为store里的message。 impor…

【Java框架】Spring框架(三)——Spring整合Mybatis及Spring声明式事务

目录 回顾Mybatis和新对象思路整理 Spring和MyBatis的整合步骤1. 创建Web工程&#xff0c;导入Spring和MyBatis的相关依赖2. 建立开发目录结构&#xff0c;创建实体类3. 创建数据访问接口和SQL映射语句文件4. 使用Spring配置文件配置数据源4.1 database.properties4.2spring配置…

全国产化无风扇嵌入式车载电脑在救护车远端诊断的行业应用

救护车远端诊断的行业应用 背景介绍 更加快速的为急症病人在第一时间开始进行诊断和治疗,是提高病人救助成功率的关键。因此&#xff0c;先进的救护系统正在思考&#xff0c;如何在病人进入救护车之后&#xff0c;立刻能够将救护车中各种检查仪器的信息快速的传回医院&#xf…

aws云靶场和一些杂记

aws靶场 在AWS靶场中&#xff0c;存在三个安全问题&#xff1a;1) 一个S3存储桶政策配置错误&#xff0c;允许公共访问&#xff0c;通过访问特定域名可获取flag。2) SQS消息队列的政策没有限制角色&#xff0c;允许发送和接收消息&#xff0c;通过aws sqs命令行工具的receive-…

JS-42-Node.js01-Node.js介绍

一、浏览器大战 众所周知&#xff0c;在Netscape设计出JavaScript后的短短几个月&#xff0c;JavaScript事实上已经是前端开发的唯一标准。 后来&#xff0c;微软通过IE击败了Netscape后一统桌面&#xff0c;结果几年时间&#xff0c;浏览器毫无进步。&#xff08;2001年推出…

C++面向对象程序设计-北京大学-郭炜【课程笔记(七)】

C面向对象程序设计-北京大学-郭炜【课程笔记&#xff08;七&#xff09;】 1、类型转换运算符2、自增、自减运算符的重载3、继承和派生的基本概念3.1、基本概念3.2、派生类对象的内存空间 4、继承关系和复合关系4.1、继承关系的使用4.2、复合关系的使用 5、派生类覆盖基类成员6…

《论文阅读》基于情感原因感知的共情对话生成模型 2023 AAAI

《论文阅读》基于情感原因感知的共情对话生成模型 2023 AAAI 前言简介模型构架情绪推理器回复生成器实验结果前言 亲身阅读感受分享,细节画图解释,再也不用担心看不懂论文啦~ 无抄袭,无复制,纯手工敲击键盘~ 今天为大家带来的是《The Empathic Dialogue Generation Model…

npm ERR! code CERT_HAS_EXPIRED (创建vue过程)

npm ERR! code CERT_HAS_EXPIRED &#xff08;创建vue过程&#xff09; 起因&#xff1a;卸载 npm uninstall -g vue-cli时候发现报这个错误。 当我们创建vue之前&#xff0c;使用npm更新或者安装啥的时&#xff0c;出现此类提示&#xff0c;则表明&#xff0c;用来验证和网络加…

java读取Excel表格数据

java读取Excel表格数据 环境说明项目结构1.controller层2.service层实现层StudentModel.java类 使用的Maven依赖效果示例一效果示例二文档截图第一页第二页 postman请求说明其他说明 环境说明 jdk1.8&#xff0c;springboot2.5.3 项目结构 1.controller层 package com.exam…

Taro-vue微信小程序用户隐私保护

Taro-vue微信小程序用户隐私保护 一、在 微信公众平台的【设置】- 【服务内容与声明】 &#xff0c;设置用户隐私保护指引&#xff0c;添加项目需要的接口权限。 【用户隐私保护指引】提交之后&#xff0c;官方会进行审核。审核通过之后&#xff0c;对应的接口权限才会生效。 …

区块链安全应用----压力测试

通过Caliper进行压力测试程序 1.环境配置 第一步. 配置基本环境 部署Caliper的计算机需要有外网权限&#xff1b;操作系统版本需要满足以下要求&#xff1a;Ubuntu > 16.04、CentOS > 7或MacOS > 10.14&#xff1b;部署Caliper的计算机需要安装有以下软件&#xff…

【C语言回顾】函数

前言1. 函数的概念和分类2.库函数3. 自定义函数3.1 自定义函数的简单介绍3.2 自定义函数举例 4. 形参和实参4.1 形参4.2 实参4.3 形参和实参的关系4.3.1 理解4.3.2 举例代码和调试 5. 嵌套函数和链式访问5.1 嵌套函数5.2 链式访问 6. 函数的声明和定义6.1 单个文件6.2 多个文件…

ChatGPT在遥感领域中的应用

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…

中文编程入门(Lua5.4.6中文版)第十三章 Lua 文件操作

在《Lua世界》的冒险旅途中&#xff0c;勇士们时常需要与神秘的文本卷轴打交道。为了更好地掌握这些知识宝藏&#xff0c;Lua I/O库提供了两种强大的探索模式&#xff1a;简单模式和完全模式&#xff0c;助你轻松应对各类文献挑战。 简单模式&#xff1a;初识卷轴 简单模式如…

C# aspose word实现模板方式打印及打印速度慢解决方法

1.引用dll nuget或者网上都有下载的方式。不过都要收费。下载地址&#xff1a;https://files.cnblogs.com/files/rolayblog/Tool.zip?t1713322422&downloadtrue 2.打印模板设计 新建一个doc文档&#xff0c;根据自己的需求画页面。 A、普通文本 在word中需要替换值的地方添…