

Python速成心法
敲代码,查资料,问Ai
练习,探索,总结,优化

★★★★★博文创作不易,源码代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。★★★★★
office办公python代码:reportlab模块参数的用法及示例
office办公python代码:PDF书籍封面生成器1.0(tk+reportlab)
office办公python代码:批量对所有.pdf文件生成水印(pypdf+reportlab)

↓ 完整源码如下 ↓
# -*- 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 = Truebreakexcept: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] / 2, 20, f"第{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', (0, 0), (-1, -1), 'KaiTi' if font_registered else 'Helvetica'),('TEXTCOLOR', (0, 0), (-1, -1), colors.black),('ALIGN', (0, 0), (-1, -1), 'CENTER'),('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),('FONTNAME', (0, 0), (-1, 0), 'KaiTi' if font_registered else 'Helvetica-Bold'),('FONTSIZE', (0, 0), (-1, -1), 10),('GRID', (0, 0), (-1, -1), 0.5, colors.black),('TOPPADDING', (0, 0), (-1, -1), 6),('BOTTOMPADDING', (0, 0), (-1, -1), 6),('BACKGROUND', (0, 0), (-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)}行)")
完毕!!感谢您的收看
------★★历史博文集合★★------

夜雨聆风