当前位置: 首页 > news >正文

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.lryc.cn/news/177528.html

相关文章:

  • 第一次作业题解
  • 美篇作文网教学资源源码-自带作文数据
  • 电脑软件:Duplicate Cleaner Pro 5.16 重复文件清理软件(附下载)
  • 支持笔记本电脑直插直充,TOWE 65W智能快充PDU超级插座
  • 部署Kafka
  • Open3D 进阶(11)使用GMM-Tree算法对点云配准
  • 算法刷题注意事项
  • 搭建自己的pypi服务器
  • ndoe.js、npm相关笔记
  • 如何使用ArcGIS Pro制作标准地图样式国界
  • 基于数学模型水动力模拟、水质建模、复杂河网构建技术在环境影响评价、入河排污口论证及防洪评价中的应用
  • 每天学习3个小时能不能考上浙大MBA项目?
  • NVM的下载安装和使用
  • iOS 视频压缩 mov转mp4 码率
  • 基于Esp32-cam在无外部 PIR 传感器情况下实现运动检测(一)
  • 安卓recovery流程分析(编译、界面、图片)
  • 唤醒手腕 2023年 B 站课程 Golang 语言详细教程笔记(更新中)
  • Qt获取屏幕(桌面)的大小或分辨率
  • 第4讲:vue内置命令(文本插值,属性绑定,v-text,v-html)
  • vue实现自动生成路由,非手动创建,含避坑点
  • 数据挖掘note(赵老师语录)
  • 秋招在线人才测评考什么内容?
  • LeetCode算法二叉树—236. 二叉树的最近公共祖先
  • Qt事件处理
  • 宝塔nginx搭建Ftp文件服务器
  • SAP和APS系统订单BOM核对(SAP配置BOM攻略九)
  • ExcelServer EXCEL服务器使用- 用户、角色权限配置
  • JOSEF约瑟 静态中间继电器JZY-402 JZJ-404 AC220V 触点形式两开两闭
  • C#并发编程的实现方式
  • qemu源码下载和安装