0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

reportlab如何输入Python的第三方库

马哥Linux运维 ? 来源:马哥Linux运维 ? 作者:马哥Linux运维 ? 2022-08-08 10:35 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

reportlab是Python的一个标准库,可以画图、画表格、编辑文字,最后可以输出PDF格式。它的逻辑和编辑一个word文档或者PPT很像。有两种方法:

1)建立一个空白文档,然后在上面写文字、画图等;

2)建立一个空白list,以填充表格的形式插入各种文本框、图片等,最后生成PDF文档。

因为需要产生一份给用户看的报告,里面需要插入图片、表格等,所以采用的是第二种方法。

安装第三方库

reportlab输入Python的第三方库,使用前需要先安装:pip install reportlab

模块导入

提前导入相关内容,并且注册字体。(注册字体前需要先准备好字体文件)

fromreportlab.pdfbaseimportpdfmetrics#注册字体
fromreportlab.pdfbase.ttfontsimportTTFont#字体类
fromreportlab.platypusimportTable,SimpleDocTemplate,Paragraph,Image#报告内容相关类
fromreportlab.lib.pagesizesimportletter#页面的标志尺寸(8.5*inch,11*inch)
fromreportlab.lib.stylesimportgetSampleStyleSheet#文本样式
fromreportlab.libimportcolors#颜色模块
fromreportlab.graphics.charts.barchartsimportVerticalBarChart#图表类
fromreportlab.graphics.charts.legendsimportLegend#图例类
fromreportlab.graphics.shapesimportDrawing#绘图工具
fromreportlab.lib.unitsimportcm#单位:cm

#注册字体(提前准备好字体文件,如果同一个文件需要多种字体可以注册多个)
pdfmetrics.registerFont(TTFont('SimSun','SimSun.ttf'))

封装不同内容对应的函数

创建一个Graphs类,通过不同的静态方法提供不同的报告内容,包括:标题、普通段落、图片、表格和图表。函数中的相关数据目前绝大多数都是固定值,可以根据情况自行设置成相关参数。

classGraphs:
#绘制标题
@staticmethod
defdraw_title(title:str):
#获取所有样式表
style=getSampleStyleSheet()
#拿到标题样式
ct=style['Heading1']
#单独设置样式相关属性
ct.fontName='SimSun'#字体名
ct.fontSize=18#字体大小
ct.leading=50#行间距
ct.textColor=colors.green#字体颜色
ct.alignment=1#居中
ct.bold=True
#创建标题对应的段落,并且返回
returnParagraph(title,ct)

#绘制小标题
@staticmethod
defdraw_little_title(title:str):
#获取所有样式表
style=getSampleStyleSheet()
#拿到标题样式
ct=style['Normal']
#单独设置样式相关属性
ct.fontName='SimSun'#字体名
ct.fontSize=15#字体大小
ct.leading=30#行间距
ct.textColor=colors.red#字体颜色
#创建标题对应的段落,并且返回
returnParagraph(title,ct)

#绘制普通段落内容
@staticmethod
defdraw_text(text:str):
#获取所有样式表
style=getSampleStyleSheet()
#获取普通样式
ct=style['Normal']
ct.fontName='SimSun'
ct.fontSize=12
ct.wordWrap='CJK'#设置自动换行
ct.alignment=0#左对齐
ct.firstLineIndent=32#第一行开头空格
ct.leading=25
returnParagraph(text,ct)

#绘制表格
@staticmethod
defdraw_table(*args):
#列宽度
col_width=120
style=[
('FONTNAME',(0,0),(-1,-1),'SimSun'),#字体
('FONTSIZE',(0,0),(-1,0),12),#第一行的字体大小
('FONTSIZE',(0,1),(-1,-1),10),#第二行到最后一行的字体大小
('BACKGROUND',(0,0),(-1,0),'#d5dae6'),#设置第一行背景颜色
('ALIGN',(0,0),(-1,-1),'CENTER'),#第一行水平居中
('ALIGN',(0,1),(-1,-1),'LEFT'),#第二行到最后一行左右左对齐
('VALIGN',(0,0),(-1,-1),'MIDDLE'),#所有表格上下居中对齐
('TEXTCOLOR',(0,0),(-1,-1),colors.darkslategray),#设置表格内文字颜色
('GRID',(0,0),(-1,-1),0.5,colors.grey),#设置表格框线为grey色,线宽为0.5
#('SPAN',(0,1),(0,2)),#合并第一列二三行
#('SPAN',(0,3),(0,4)),#合并第一列三四行
#('SPAN',(0,5),(0,6)),#合并第一列五六行
#('SPAN',(0,7),(0,8)),#合并第一列五六行
]
table=Table(args,colWidths=col_width,style=style)
returntable

#创建图表
@staticmethod
defdraw_bar(bar_data:list,ax:list,items:list):
drawing=Drawing(500,250)
bc=VerticalBarChart()
bc.x=45#整个图表的x坐标
bc.y=45#整个图表的y坐标
bc.height=200#图表的高度
bc.width=350#图表的宽度
bc.data=bar_data
bc.strokeColor=colors.black#顶部和右边轴线的颜色
bc.valueAxis.valueMin=5000#设置y坐标的最小值
bc.valueAxis.valueMax=26000#设置y坐标的最大值
bc.valueAxis.valueStep=2000#设置y坐标的步长
bc.categoryAxis.labels.dx=2
bc.categoryAxis.labels.dy=-8
bc.categoryAxis.labels.angle=20
bc.categoryAxis.categoryNames=ax

#图示
leg=Legend()
leg.fontName='SimSun'
leg.alignment='right'
leg.boxAnchor='ne'
leg.x=475#图例的x坐标
leg.y=240
leg.dxTextSpace=10
leg.columnMaximum=3
leg.colorNamePairs=items
drawing.add(leg)
drawing.add(bc)
returndrawing

#绘制图片
@staticmethod
defdraw_img(path):
img=Image(path)#读取指定路径下的图片
img.drawWidth=5*cm#设置图片的宽度
img.drawHeight=8*cm#设置图片的高度
returnimg

生成报告

if__name__=='__main__':
#创建内容对应的空列表
content=list()

#添加标题
content.append(Graphs.draw_title('数据分析就业薪资'))

#添加图片
content.append(Graphs.draw_img('抗疫必胜.png'))

#添加段落文字
content.append(Graphs.draw_text('众所周知,大数据分析师岗位是香饽饽,近几年数据分析热席卷了整个互联网行业,与数据分析的相关的岗位招聘、培训数不胜数。很多人前赴后继,想要参与到这波红利当中。那么数据分析师就业前景到底怎么样呢?'))
#添加小标题
content.append(Graphs.draw_title(''))
content.append(Graphs.draw_little_title('不同级别的平均薪资'))
#添加表格
data=[
('职位名称','平均薪资','较上年增长率'),
('数据分析师','18.5K','25%'),
('高级数据分析师','25.5K','14%'),
('资深数据分析师','29.3K','10%')
]
content.append(Graphs.draw_table(*data))

#生成图表
content.append(Graphs.draw_title(''))
content.append(Graphs.draw_little_title('热门城市的就业情况'))
b_data=[(25400,12900,20100,20300,20300,17400),(15800,9700,12982,9283,13900,7623)]
ax_data=['BeiJing','ChengDu','ShenZhen','ShangHai','HangZhou','NanJing']
leg_items=[(colors.red,'平均薪资'),(colors.green,'招聘量')]
content.append(Graphs.draw_bar(b_data,ax_data,leg_items))

#生成pdf文件
doc=SimpleDocTemplate('report.pdf',pagesize=letter)
doc.build(content)

生成报告的结果如下:

aa37216a-1593-11ed-ba43-dac502259ad0.png

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4388

    浏览量

    65350
  • PDF
    PDF
    +关注

    关注

    1

    文章

    173

    浏览量

    34650
  • python
    +关注

    关注

    56

    文章

    4832

    浏览量

    87815

原文标题:Python生成图文并茂的PDF报告

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电子测试行业中的第三方检测机构如何解决平台灵活度低,维护困难等痛点问题?

    在竞争激烈的市场环境中,第三方检测机构面临着诸多挑战,尤其是在来料测试环节。某权威第三方检测机构就曾深陷困境,他们一面要应对产品不确定性高与系统固化严重的矛盾,另一面还需解决已有系
    的头像 发表于 08-06 17:07 ?164次阅读
    电子测试行业中的<b class='flag-5'>第三方</b>检测机构如何解决平台灵活度低,维护困难等痛点问题?

    如何集成第三方支付API到电商网站

    ? 在电商网站中,集成第三方支付API是确保交易安全、提升用户体验的关键步骤。本文将逐步指导您完成整个流程,从选择支付提供商到上线后的监控。文章结构清晰,包含代码示例和实用建议,帮助您高效实现支付
    的头像 发表于 07-16 10:35 ?134次阅读
    如何集成<b class='flag-5'>第三方</b>支付API到电商网站

    天合跟踪获得DNV第三方风洞测试审查报告

    近日, 天合跟踪获得DNV颁发的中国支架行业首张风洞实验第三方审查报告。该风洞报告由天合跟踪与同济大学合作,针对开拓者1P跟踪支架进行了全新的刚性模型测压试验和先进动力学分析研究,并由DNV进行独立
    的头像 发表于 07-08 17:35 ?414次阅读

    使用 Claroty SRA 优化第三方 OT 远程访问

    第三方,如原始设备制造商 (OEM) 技术员和维护承包商,是确保 OT 环境可用性、完整性和安全性的关键。负责服务 OT 资产的第三方经常远程工作。这意味着,他们会通过无数广泛使用的解决方案远程连接
    的头像 发表于 06-17 16:11 ?249次阅读
    使用 Claroty SRA 优化<b class='flag-5'>第三方</b> OT 远程访问

    第三方工业互联网平台有哪些

    第三方工业互联网平台有哪些
    的头像 发表于 06-14 15:48 ?392次阅读

    钛和集团荣获零跑汽车第三方实验室资质认可

    近期,钛和集团顺利通过了浙江零跑科技股份有限公司(以下简称“零跑汽车”)对第三方实验室的能力验证及资质审核,助力零跑汽车实现“成为值得尊敬的世界级智能电动车企”的品牌愿景。
    的头像 发表于 06-13 17:00 ?618次阅读

    钛和集团荣获吉利汽车第三方实验室资质认可

    近期,钛和集团汽车事业部顺利通过了浙江吉利控股集团有限公司(以下简称“吉利汽车”)对外部实验室的能力验证及资质审核,并获得了第三方实验室认可证书,助力吉利汽车实现“让世界充满吉利”的品牌愿景。
    的头像 发表于 06-10 15:03 ?634次阅读

    SGS荣获比亚迪乘用车第三方实验室资质认可证书

    近日,国际公认的测试、检验和认证机构SGS(以下简称:SGS)位于重庆的标瑞新能源实验室(以下简称:SGS-CEC)荣获比亚迪乘用车实验室认可委员会(以下简称:比亚迪)颁发的“乘用车第三方实验室资质认可证书”。
    的头像 发表于 05-20 15:04 ?549次阅读

    第三方的dlp3010板子时遇到的几个问题求解

    您好,在用第三方的dlp3010板子时遇到了如下问题: 固件能够更新,系统上电后,初始proj_on为低,resetz为低,intz为低;手动拉高proj_on和cypress的gpio6,能够
    发表于 02-26 07:19

    i.MX8M Yocto工程更新第三方软件包

    NXPi.MX8M系列依托于Yocto工程进行简单快捷的配置,可以方便增删第三方软件包以及更改内核、Uboot源码等。目前有些客户希望能够升级Yocto自带软件版本,这里就以我司
    的头像 发表于 02-12 08:11 ?683次阅读
    i.MX8M Yocto工程更新<b class='flag-5'>第三方</b>软件包

    EE-303:将VisualDSP线程安全第三方RTOS配合使用

    电子发烧友网站提供《EE-303:将VisualDSP线程安全第三方RTOS配合使用.pdf》资料免费下载
    发表于 01-07 14:09 ?0次下载
    EE-303:将VisualDSP线程安全<b class='flag-5'>库</b>与<b class='flag-5'>第三方</b>RTOS配合使用

    武汉第三方坐标测量检测中心协助外地用户完成产品验收

    武汉易测仪器公司为武汉小鹏汽车提供坐标测量服务,精准调整检具并验收合格。企业寻求本地坐标检测机构可节约成本,第三方机构确保数据公正,提升产品质量和客户信任。
    的头像 发表于 01-03 13:47 ?452次阅读
    武汉<b class='flag-5'>第三方</b><b class='flag-5'>三</b>坐标测量检测中心协助外地用户完成产品验收

    第三方检测机构该如何提升核心竞争力?

    在国家“一带一路”和“智能制造2025”等政策的引领下,面对竞争日益激烈的国际环境,作为全球最大的制造业国家,中国的检测行业正经历着迅猛的发展,成为全球增长最快、潜力最大的市场之一。 第三方检测逐渐
    的头像 发表于 12-17 15:44 ?947次阅读
    <b class='flag-5'>第三方</b>检测机构该如何提升核心竞争力?

    鸿蒙Flutter实战:05-使用第三方插件

    使用的第三方插件,其底层以的没有适配鸿蒙,则需要通过overrider配置其鸿蒙化的替代插件,否则会在运行时报错。如下面所示: ```yaml dependency_overrides: # ohos
    发表于 10-22 21:54

    瑞芯微RK3566鸿蒙开发板Android11修改第三方输入法为默认输入

    本文适用于触觉智能所有支持Android11系统的开发板修改第三方输入法为默认输入法。本次使用的是触觉智能的Purple Pi OH鸿蒙开源主板,搭载了瑞芯微RK3566芯片,类树莓派设计,是Laval官方社区主荐的一款鸿蒙开发
    的头像 发表于 09-24 09:43 ?1248次阅读
    瑞芯微RK3566鸿蒙开发板Android11修改<b class='flag-5'>第三方</b><b class='flag-5'>输入</b>法为默认<b class='flag-5'>输入</b>法