python reportlab生成pdf

这里自定义了pagetemplate,使用BaseDocTemplate,但我感觉一般使用SimpleDocTemplate就可以。

from reportlab.platypus import Frame
from reportlab.lib.pagesizes import A4, landscapepadding = dict(leftPadding=72,rightPadding=72,topPadding=72,bottomPadding=18)portrait_frame = Frame(0, 0, *A4, **padding)
landscape_frame = Frame(0, 0, *landscape(A4), **padding)def on_page(canvas, doc, pagesize=A4):page_num = canvas.getPageNumber()canvas.drawCentredString(pagesize[0]/2, 50, str(page_num))canvas.drawImage('https://www.python.org/static/community_logos/python-logo.png', 0, 0)def on_page_landscape(canvas, doc):return on_page(canvas, doc, pagesize=landscape(A4))from reportlab.platypus import PageTemplateportrait_template = PageTemplate(id='portrait',frames=portrait_frame,onPage=on_page,pagesize=A4)landscape_template = PageTemplate(id='landscape',frames=landscape_frame,onPage=on_page_landscape,pagesize=landscape(A4))from reportlab.platypus import BaseDocTemplatedoc = BaseDocTemplate('report.pdf',pageTemplates=[portrait_template,landscape_template]
)
import io
from reportlab.platypus import Image
from reportlab.lib.units import inchdef fig2image(f):buf = io.BytesIO()f.savefig(buf, format='png', dpi=300)buf.seek(0)x, y = f.get_size_inches()return Image(buf, x * inch, y * inch)from reportlab.platypus import Table, Paragraph
from reportlab.lib import colorsdef df2table(df):return Table([[Paragraph(col) for col in df.columns]] + df.values.tolist(),style=[('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),('LINEBELOW',(0,0), (-1,0), 1, colors.black),('INNERGRID', (0,0), (-1,-1), 0.25, colors.black),('BOX', (0,0), (-1,-1), 1, colors.black),('ROWBACKGROUNDS', (0,0), (-1,-1), [colors.lightgrey, colors.white])],hAlign = 'LEFT')import pandas as pd
import matplotlib.pyplot as pltdf = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', names=['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'plant_type'])plant_type_df = df.groupby('plant_type').mean()plant_type_fig, ax = plt.subplots(dpi=300)
plant_type_df.plot.bar(rot=0, ax=ax)
plt.ylim(0, 8)
# plt.show()scatter_matrix_fig, ax = plt.subplots(dpi=300, figsize=(7, 7))
pd.plotting.scatter_matrix(df, ax=ax)
plt.tight_layout()
# plt.show()from reportlab.platypus import NextPageTemplate, PageBreak
from reportlab.lib.styles import getSampleStyleSheetstyles = getSampleStyleSheet()story = [Paragraph('Iris Dataset Report', styles['Heading1']),Paragraph('Scatter Matrix', styles['Heading2']),fig2image(scatter_matrix_fig),Paragraph('Pairwise Correlation', styles['Heading2']),NextPageTemplate('landscape'),PageBreak(),Paragraph('Mean Features by Plant Type', styles['Heading2']),fig2image(plant_type_fig),df2table(plant_type_df),
]doc.build(story)

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

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

相关文章

Java面经整理(2)

一)为什么要使用克隆? 实现原型设计模式,实现备份和恢复 假设此时这个系统是支持用户进行配置的,是支持用户设置皮肤的颜色,设置系统的快捷键,此时就需要使用原型设计模式,不能自己设置把别人的设置都给改了&#xff…

大数据Doris(三):Doris编译部署篇

文章目录 Doris编译部署篇 一、Doris编译

学信息系统项目管理师第4版系列13_立项管理

1. 项目立项管理包括 1.1. 项目建议与立项申请 1.2. 项目可行性研究 1.2.1. 初步可行性研究 1.2.2. 详细可行性研究 1.2.2.1. 不可缺少 1.2.2.1.1. 【高21上选21】 1.2.3. 可以依据项目的规模和繁简程度合二为一 1.3. 项目评估与决策 2. 立项申请 2.1. 项目建议书 2…

rust学习-Arc

背景介绍 线程安全的引用计数指针。 “Arc”代表“原子引用计数 Atomically Reference Counted”。 Arc 类型提供在堆中分配的 T 类型值的共享所有权(shared ownership)。在 Arc 上调用克隆会生成一个新的 Arc 实例,该实例指向堆上与源 Arc 相同的分配,同时增加引用计数。…

Lua语法之简单变量

--nil有点类似空null a nil print(a) --type函数得到类型 返回值是string print(type(a)) print("*****")--number是数值 int float这些 --lua的变量可以随便赋值 自动识别类型 a 1 print(a) print(type(a)) print("*****")--siting可以用单引号双引号 a…

LeetCode 面试题 08.01. 三步问题

文章目录 一、题目二、Java 题解 一、题目 三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。 示例1: 输入&…

华为云HECS云服务器docker环境下安装nginx

前提:有一台华为云服务器。 华为云HECS云服务器,安装docker环境,查看如下文章。 华为云HECS安装docker-CSDN博客 一、拉取镜像 下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx:latest ) docker pull nginx查看镜像 dock…

凉鞋的 Unity 笔记 001. 概述

001. 概述 大家好,我是凉鞋。 在笔者 8 年的技术生涯中,笔者学习并使用了很多技术,这些技术接触顺序如下 javaandroidiOScocos2d/xUnitynodejspython/django.net corereactGameMaker StudioGodot 而越是接触更多的技术,越是会…

PMIC介绍

PMIC电源管理芯片

实体行业数字化转型怎么做?线上线下相结合的新零售体系怎么做?

如今,实体行业想要取得收入增长,只做线下业务或者只做线上业务,在当前的市场环境中是难以长久生存的,因此一定要线上线下相结合,将流量运作与线下转化进行充分结合,才能更好地发挥实体优势,带来…

Linux学习记录——삼십일 socket编程---TCP套接字

文章目录 TCP套接字简单通信1、服务端1、基本框架2、获取连接 2、客户端3、多进程4、多线程5、线程池6、简单的日志系统7、守护进程8、其它 TCP套接字简单通信 本篇gitee 学习完udp套接字通信后,再来看TCP套接字。 四个文件tcp_server.hpp, tcp_serve…

什么是Local Storage和Session Storage?它们之间有什么区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是 Local Storage 和 Session Storage?Local Storage(本地存储)Session Storage(会话存储) ⭐ 区别⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的…

程序员的浪漫:如何用java代码画❤️表白呢?

有位小伙伴说,看到一个帖子,一个计算机博士接亲时,要求现场写代码,5分钟做出一个爱心。我们就看看如何用java设计出心形的代码。 我找了一下,发现方法竟然很多,我们就来见识一下,最后我们看一下…

python经典百题之画一个最优美的图案

创建一个最优美的图案是一个主观性很强的任务,因为美感取决于个人品味和审美观点。在这里,我将提供三种不同方法来绘制图案,但最终的美感取决于观者的个人喜好。 程序分析 我们的目标是通过编写Python程序绘制一个美观的图案。我们将尝试三…

TouchGFX之字体缓存

使用二进制字体需要将整个字体加载到存储器。 在某些情况下,如果字体很大,如大字号中文字体,则这样做可能不可取。 字体缓存使应用能够从外部存储器只能加载显示字符串所需的字母。 这意味着整个字体无需保存到在可寻址闪存或RAM上&#xff…

Openresty通过Lua+Redis 实现动态封禁IP

求背景 为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝提供服务。并且可以设置失效 1.安装Openresty(编译安装) wget https://openresty.org/download/openresty-1.…

SQL SELECT 语句进阶

之前探讨了SQL SELECT 语句的基础内容,包括语法、字段选择、记录限制和数据源指定。今天将进一步深入,探讨多表连接、过滤结果集和逻辑运算等高级主题,还有LIKE 模糊查询、ORDER BY 对结果集排序、运用聚合函数汇总结果以及 GROUP BY 子句与相关应用。 本文将继续使用《三国…

Java自学(三)面向对象编程

目录 什么是面向对象 举例 this关键字和构造器 实体类 电影小案例 什么是面向对象 我们日常生活中谈到一个事物,总会描述它的性质与行为,这个事物也就是 ”对象”。比如一个学生对象,他的属性有姓名、学号、成绩......他的行为有上课、…

opencv视频文件的读取,处理与保存

文章目录 opencv视频文件的读取,处理与保存一、视频文件的读取:1、cv::VideoCapture是OpenCV库中用于处理视频输入的类,它提供了一种简单的方法来从摄像头,视频文件、或图像序列中读取帧;(1)打开…

装饰器模式详解和实现(设计模式 二)

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许你动态地将对象添加到现有对象中,以提供额外的功能,同时又不影响其他对象。 实现示例 1.定义一个接口或抽象类,表示被装饰对象的公共接口 //抽…