通过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)
输出结果

声明:本站资源均整理自互联网,版权归原作者所有,仅供学习交流使用,请勿直接商用,若需商用请购买正版授权。因违规使用产生的版权及法律责任由使用者自负。部分资源可能包含水印或引流信息,请自行甄别。若链接失效可联系站长尝试补链。若侵犯您的权益,请邮件(将 # 替换为 @)至 feedback#tgoos.com,我们将及时处理删除。转载请保留原文链接,感谢支持原创。