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

    文章

    4310

    浏览量

    62476
  • PDF
    PDF
    +关注

    关注

    1

    文章

    166

    浏览量

    33664
  • python
    +关注

    关注

    56

    文章

    4784

    浏览量

    84495

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    维天地低代码开发平台助力第三方质检行业数据可视化

    第三方检验是由独立于买卖双方利益之外的第三方机构(例如专业的监督检验机构)执行的,这些机构以公正、公平、权威的非当事人身份,依据双方共同认可的法律、标准和合同等进行商品的符合性检验和认证活动
    的头像 发表于 08-09 13:59 249次阅读
    <b class='flag-5'>三</b>维天地低代码开发平台助力<b class='flag-5'>第三方</b>质检行业数据可视化

    请问esp8266会开放使用第三方云服务器吗?

    如题,esp8266会开放使用第三方云服务器吗,如百度,阿里云服务器?
    发表于 07-12 11:40

    是否有可能在支持gdb的第三方集成开发环境中使用DAS配置调试?

    是否有可能在支持 gdb 的第三方集成开发环境中使用 DAS 配置调试?
    发表于 07-02 07:29

    微软或将开放Xbox主机授权给第三方厂商

    据悉,5 月 26 日,知名媒体 Windows Central 的编辑 Jez Corden 揭露了微软即将遵循第三方手柄流程,允许在其 XBOX 主机上引入第三方产品。
    的头像 发表于 05-27 15:18 630次阅读

    MacPaw将在欧盟成员国推出第三方应用商店Setapp

    5月14日,MacPaw正式宣布将在今年5月14日在欧盟成员国面向苹果iPhone推出第三方应用商城Setapp。自今年2月起,MacPaw已着手筹备该平台。S
    的头像 发表于 05-14 10:14 348次阅读

    谷歌开放ZenDeviceEffects API,助第三方应用实现睡前屏幕管理

    据报道,谷歌近日在安卓 15 开发者预览版 2 中推出了全新 ZenDeviceEffects API,允许第三方应用访问数字健康的就寝模式功能。
    的头像 发表于 05-08 16:41 462次阅读

    Labview如何内嵌操作第三方EXE程序!

    自己在网上搜了下相关资料,能把第三方EXE内嵌进入容器里,但是有个问题,这个第三方软件必须手动拖到容器正中间,手动最大化。请问有什么方法可以自动实现吗? 下图是我内嵌的POLL 软件。如图!
    发表于 04-18 14:26

    鸿蒙OS开发学习:【第三方调用】

    在Stage模型中,如何调用已经上架到[三方中心]的社区和项目内创建的本地
    的头像 发表于 04-14 11:34 882次阅读
    鸿蒙OS开发学习:【<b class='flag-5'>第三方</b><b class='flag-5'>库</b>调用】

    微软或将引入第三方数字游戏商店至Xbox平台

    微软选择引入这些第三方游戏平台,一面可以增加自身拥有的硬件资源和服务优势;另一面,也是为了吸引那些在电脑端能够自由选择游戏购买渠道的游戏用户。据悉,此前的Xbox系列产品都是只内置自家的商城。
    的头像 发表于 03-27 15:51 478次阅读

    Meta Quest头显将支持多款安卓第三方应用并行

    Meta已悄然启动了与此相关的功能,意味着Quest头显可同时操作多个第三方Android应用。在此之前,Quest对第三方Android应用有严格限制,用户每次仅能打开一个,无法实现同屏幕并行多个第三方应用进程。
    的头像 发表于 03-11 10:58 714次阅读

    苹果iOS 17.4版允许欧盟地区用户使用第三方应用商店下载应用

    3月6日,苹果正式推出iOS 17.4版本,首次符合欧州《数字市场法》规定,引入“第三方应用商店”选项,让iPhone用户能从非App Store处下载应用程序。
    的头像 发表于 03-06 10:51 836次阅读

    MacPaw将于4月在欧洲市场推出Setapp第三方应用商城

    3月1日报道,知名厂商MacPaw于今日发表声明,宣称其自有的第三方应用商城Setapp将进军欧洲市场,发布会定于今年4月举行,并且官网预告了可供用户试用的候选页面,以吸引更多人参与到Setapp移动版本Beta的测试中来。
    的头像 发表于 03-01 10:16 537次阅读

    苹果明日发布iOS 17.4 RC版,新增第三方应用商店及非WebKit支持

    知名爆料人@aaronp613表示,苹果已经悄然修改了App Store后台,为引进第三方应用商店做好准备。iOS 17.4将提供用户通过其他应用商店下载应用的权限,且允许浏览器使用非WebKit内核,以满足DMA法案的要求。
    的头像 发表于 02-27 16:00 1082次阅读