from datetime import datetime
from pathlib import Path
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, PageBreak
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
def create_pdf(data):
path = Path(__file__).parent
save_path = get_desktop() + f'/箱贴{datetime.now().strftime("%Y%m%d-%H%M%S")}.pdf'
doc = SimpleDocTemplate(save_path, pagesize=(100 * mm, 100 * mm),
rightMargin=2 * mm, leftMargin=2 * mm,
topMargin=2 * mm, bottomMargin=0 * mm)
elements = []
# 注册字体
pdfmetrics.registerFont(TTFont('SimSun', path / 'SimSun.ttf'))
# pdfmetrics.registerFont(TTFont('msyhbd', 'msyhbd.ttc'))
pdfmetrics.registerFont(TTFont('SimHei', path / 'SimHei.ttf'))
for page_data in data:
page = Table(page_data, colWidths=[34 * mm, 31 * mm, 31 * mm],
rowHeights=[18 * mm, 26 * mm, 26 * mm, 12 * mm, 10 * mm])
page.setStyle(TableStyle([
("FONTNAME", (0, 0), (-1, -1), 'SimSun'), # 显示中文
('BOX', (0, 0), (-1, -1), 0.5, colors.black), # 外边框
('INNERGRID', (0, 0), (-1, -1), 0.5, colors.black), # 内边框
('SPAN', (1, 0), (2, 0)), # 合并单元格
('SPAN', (1, 1), (2, 1)),
('SPAN', (1, 3), (2, 3)),
('SPAN', (0, 4), (2, 4)),
('FONTSIZE', (0, 0), (0, -1), 20),
('LEADING', (0, 0), (0, -1), 24), # 行距
('FONTSIZE', (1, 0), (-1, 0), 20),
('LEADING', (1, 0), (-1, 0), 24),
('FONTSIZE', (1, 1), (-1, 1), 36),
('LEADING', (1, 1), (-1, 1), 43.2),
("FONTNAME", (1, 1), (-1, 1), 'SimHei'),
('FONTSIZE', (1, 2), (-1, 2), 36),
('LEADING', (1, 2), (-1, 2), 43.2),
("FONTNAME", (1, 2), (-1, 2), 'SimHei'),
('FONTSIZE', (1, 3), (-1, 3), 28),
('LEADING', (1, 3), (-1, 3), 33.6),
("FONTNAME", (1, 3), (-1, 3), 'SimHei'),
('FONTSIZE', (0, -1), (-1, -1), 20),
('LEADING', (0, -1), (-1, -1), 24),
("FONTNAME", (0, -1), (-1, -1), 'SimHei'),
('ALIGN', (1, 0), (1, -1), 'CENTER'), # 设定为水平居中对齐
('ALIGN', (0, -1), (-1, -1), 'CENTER'),
('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), # # 垂直居中
]))
elements.append(page)
elements.append(PageBreak())
doc.build(elements)