通过python 使用pandas
来读取Excel文件,并使用reportlab
来生成PDF报告实现excel表格分页打印每页显示当前页汇总金额的过程
首先 安装python
安装使用的库
pip install pandas openpyxl reportlab
代码功能实现
import os
from reportlab.lib.pagesizes import landscape, A4
from reportlab.pdfgen import canvas
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.graphics.barcode import code128
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph
import pandas as pd
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
# 注册中文字体
pdfmetrics.registerFont(TTFont('SimSun', 'simsun.ttc')) # 确保'simsun.ttc'文件在你的项目目录中或提供正确的路径
# 读取Excel文件
df = pd.read_excel('D:\\data\\20240719.xlsx')
# 设置输出文件名
output_file = 'D:\\data\\output_20240719.pdf'
# 定义表头
fields = ['订单编号', '商品数量', '付款金额', '付款时间', '订单状态', '收件人', '收件人手机号', '省', '市', '区', '街道', '详细地址']
# 设置每页的行数
rows_per_page = 28
# # 设置A4纸张大小
# pagesize = A4
# 设置A4纸张大小为横向
pagesize = landscape(A4)
# 创建PDF文档
doc = SimpleDocTemplate(output_file,
pagesize=pagesize,
rightMargin=12, # 右侧边距,
leftMargin=12, # 左侧边距,
topMargin=12, # 上侧边距,
bottomMargin=12) # 下侧边距,
# 定义样式
styles = getSampleStyleSheet()
styleN = styles['Normal']
# 注册中文字体
pdfmetrics.registerFont(TTFont('simsun', 'simsun.ttc')) # 确保'simsum.ttf'文件在你的项目目录中或提供正确的路径
# 创建一个列表来存储所有的表格元素
elements = []
styleN.fontName = 'simsun' # 确保使用SimSun字体
# 当你设置横向页面时,可能需要重新计算列宽
usable_width = doc.width
# 计算每列的宽度
column_count = len(fields)
column_width = usable_width / column_count
# 分页处理数据
for i in range(0, len(df), rows_per_page):
# 获取当前页的数据
page_data = df.iloc[i:i+rows_per_page]
# 创建表格数据
data = [fields] + page_data.values.tolist()
# 创建表格并将宽度应用到表格
t = Table(data, colWidths=[column_width]*column_count)
# 设置表格样式
t.setStyle(TableStyle([
('GRID', (0, 0), (-1, -1), 0.5, colors.grey), # 减细网格线
('ALIGN', (0, 0), (-1, -1), 'CENTER'), # 对齐方式改为居中所有单元格
('FONTNAME', (0, 0), (-1, 0), 'simsun'), # 表头使用SimSun字体
('FONTSIZE', (0, 0), (-1, 0), 8), # 表头字体大小调整为12
('BOTTOMPADDING', (0, 0), (-1, 0), 8), # 表头底部填充
('FONTNAME', (0, 1), (-1, -1), 'simsun'), # 内容也使用SimSun字体
('FONTSIZE', (0, 1), (-1, -1), 8), # 内容字体大小调整为10
]))
# 添加表格到元素列表
elements.append(t)
# 计算当前页的汇总金额
total_amount = page_data['付款金额'].sum()
# 创建汇总金额的段落
ptext = '<para align=center spaceb=3><b>本页汇总金额: %s</b></para>' % total_amount
elements.append(Paragraph(ptext, styleN))
# 构建PDF文档
doc.build(elements)
输出结果
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。