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

    文章

    4421

    浏览量

    67822
  • PDF
    PDF
    +关注

    关注

    1

    文章

    177

    浏览量

    36394
  • python
    +关注

    关注

    58

    文章

    4883

    浏览量

    90295

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    倾斜仪是否支持接入第三方自动化采集系统?

    倾斜仪作为工程监测的重要设备,其系统集成能力直接影响实际使用效果。针对是否支持第三方自动化采集系统的问题,答案是肯定的。YS系列倾斜仪在设计阶段即考虑了系统的开放性和兼容性,能够与市面上主流的自动化
    的头像 发表于 03-25 17:25 393次阅读
    倾斜仪是否支持接入<b class='flag-5'>第三方</b>自动化采集系统?

    为什么MES企业要跟第三方机构合作设备数据采集?

    综上考虑,多数MES企业都不直接承接设备数据采集业务,而是选择和第三方机构合作。毕竟第三方机构长期耕耘这一领域,拥有成熟的产品体系、完善的技术路线以及专业的现场施工团队,能够快速应对各类现场难题,将
    的头像 发表于 03-19 15:03 838次阅读
    为什么MES企业要跟<b class='flag-5'>第三方</b>机构合作设备数据采集?

    苹果17可以无线充电吗?第三方配件怎么选?

    iPhone 17无线充电提升车载体验,支持Qi2.2,磁吸强、散热好,第三方配件需认准MFM认证。
    的头像 发表于 03-19 08:17 805次阅读
    苹果17可以无线充电吗?<b class='flag-5'>第三方</b>配件怎么选?

    CW32W031调制频率的话有第三方软件工具么?

    请问,CW32W031调制频率的话,有第三方软件工具么?仿真软件也行
    发表于 01-19 06:54

    DEKRA德凯获得沃尔沃汽车第三方实验室认可资质

    近日,DEKRA德凯上海实验室成功通过沃尔沃汽车材料工程中心的严格评审,被正式列入其认可的第三方实验室名单。
    的头像 发表于 10-16 10:27 868次阅读

    第三方电商数据 API 数据来源深度解析:合规与稳定背后的核心逻辑

    本文揭秘第三方电商数据API的底层逻辑:通过官方授权、生态共享与合规采集重来源,结合严格清洗校验,确保数据稳定、合规、高质。企业选型应关注来源合法性与场景匹配度,避开数据陷阱,实现真正数据驱动增长
    的头像 发表于 10-11 13:55 447次阅读

    SEGGER Ozone调试器支持第三方调试工具

    SEGGER强大的Ozone调试器和性能分析器,长期以来一直深受J-Link和J-Trace用户的信任,现在可以支持第三方调试工具了。
    的头像 发表于 09-29 11:45 1396次阅读

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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