乐于分享
好东西不私藏

office办公python代码:reportlab绘制pdf自律记录表

office办公python代码:reportlab绘制pdf自律记录表

Python速成心法

敲代码,查资料,问Ai

练习,探索,总结,优化

博文创作不易,代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。

office办公python代码:reportlab模块参数的用法及示例

Python项目:按顺序合并多个.pdf文件

office办公python代码:PDF书籍封面生成器1.0(tk+reportlab)

office办公python代码:批量对所有.pdf文件生成水印(pypdf+reportlab)

office办公python代码:.txt文本转pdf工具
office办公python代码:文本仿表格对齐显示
Python项目81:Excel工作表批量重命名工具1.0(tkinter+openpyxl)
Python项目源码69:Excel数据筛选器1.0(tkinter+sqlite3+pandas)
pandas读取Excel数据(.xlsx和.xls)到treeview
自律表格 PDF 生成工具 – 使用说明功能概述:本工具可自动生成一份 PDF 格式的自律打卡表格,包含从运行当天起连续 50 天的日期,以及 11 个自定义自律项目(如早起、晨练、阅读等)。表格采用横向 A4 纸,所有单元格带黑色边框,内容居中,每页底部自动显示页码,方便打印或手写记录。
输出结果说明
表格共 12 列:第 1 列为日期(格式 YYYYMMDD),后 11 列分别为:
早起(6点前)、晨练/冥想、阅读(≥30分)、学习/技能、工作/正事、戒手机(小时)、早睡(23点前)、饮食控制、日记/复盘、远离无效社交、自律得分。
所有单元格初始为空(除日期外),您可在 PDF 中直接手写填写,或后续用编辑工具补充。表格自动分页,每页表头重复,底部显示“第X页”页码。
自定义修改:若需调整表格内容,可编辑脚本中以下部分
修改自律项目:直接更改 headers 列表中的文字(保持第一列为'时间')。
更改生成天数:修改 range(50) 中的数字(例如改为 30 生成一个月)。
更改起始日期:修改 start_date = datetime.now() 为指定日期(如 datetime(2026,1,1))。
更改文件名:修改 SimpleDocTemplate("自律.pdf", ...) 中的文件名。
调整列宽:修改 col_widths = [65] + [62]*(len(headers)-1) 中的数值。

↓ 完整源码如下 ↓

# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythonfrom reportlab.lib.pagesizes import A4, landscapefrom reportlab.platypus import SimpleDocTemplate, Table, TableStylefrom reportlab.lib import colorsfrom reportlab.pdfbase import pdfmetricsfrom reportlab.pdfbase.ttfonts import TTFontimport osfrom datetime import datetime, timedelta# ---------- 1. 注册楷体 ----------font_paths = [    "C:/Windows/Fonts/simkai.ttf",    "/System/Library/Fonts/STKaiti.ttf",    "/usr/share/fonts/truetype/arphic/uming.ttc",]font_registered = Falsefor path in font_paths:    if os.path.exists(path):        try:            pdfmetrics.registerFont(TTFont('KaiTi', path))            font_registered = True            break        except:            continueif not font_registered:    print("⚠️ 未找到楷体,使用默认字体(中文可能乱码)")# ---------- 2. 新表头(自律内容) ----------headers = [    '时间',    '早起(6点前)',    '晨练/冥想',    '阅读(≥30分)',    '学习/技能',    '工作/正事',    '戒手机(小时)',    '早睡(23点前)',    '饮食控制',    '日记/复盘',    '远离无效社交',    '自律得分']# ---------- 3. 生成50天数据(其余列留空) ----------start_date = datetime.now()data_rows = []for i in range(50):    date_str = (start_date + timedelta(days=i)).strftime("%Y%m%d")    row = [date_str] + [''] * (len(headers) - 1)    data_rows.append(row)table_data = [headers] + data_rows# ---------- 4. 页码绘制函数 ----------def add_page_number(canvas, doc):    page_num = canvas.getPageNumber()    canvas.saveState()    font_name = 'KaiTi' if font_registered else 'Helvetica'    canvas.setFont(font_name, 10)    # 页码放在底部中央,y=20(离底部20像素)    canvas.drawCentredString(doc.pagesize[0] / 220f"第{page_num}页")    canvas.restoreState()# ---------- 5. 创建PDF ----------doc = SimpleDocTemplate(    "自律.pdf",    pagesize=landscape(A4),    rightMargin=20, leftMargin=20,    topMargin=20, bottomMargin=20)# 列宽:第一列稍宽(日期),其余均匀col_widths = [65] + [62] * (len(headers) - 1)table = Table(table_data, colWidths=col_widths, repeatRows=1)# ---------- 6. 样式 ----------style = TableStyle([    ('FONTNAME', (00), (-1, -1), 'KaiTi' if font_registered else 'Helvetica'),    ('TEXTCOLOR', (00), (-1, -1), colors.black),    ('ALIGN', (00), (-1, -1), 'CENTER'),    ('VALIGN', (00), (-1, -1), 'MIDDLE'),    ('FONTNAME', (00), (-10), 'KaiTi' if font_registered else 'Helvetica-Bold'),    ('FONTSIZE', (00), (-1, -1), 10),    ('GRID', (00), (-1, -1), 0.5, colors.black),    ('TOPPADDING', (00), (-1, -1), 6),    ('BOTTOMPADDING', (00), (-1, -1), 6),    ('BACKGROUND', (00), (-1, -1), colors.white),])table.setStyle(style)# ---------- 7. 生成PDF(页码回调传给build) ----------doc.build([table], onFirstPage=add_page_number, onLaterPages=add_page_number)print(f"✅ 已生成自律表格:自律.pdf(日期从 {data_rows[0][0]} 至 {data_rows[-1][0]},共{len(data_rows)}行)")

完毕!!感谢您的收看

------★★历史博文集合★------

Python入门篇  进阶篇  视频教程  Py安装

py项目Python模块 Python爬虫  Json

Xpath正则表达式SeleniumEtreeCss

Gui程序开发TkinterPyqt5 列表元组字典

数据可视化   matplotlib   词云图Pyecharts

海龟画图PandasBug处理电脑小知识

自动化脚本编程工具NumPy CSVWeb

Pygame  图像处理  机器学习数据库