Reportlab元素Frame定位异常及EmptySquare垂直对齐问题求助
Reportlab PDF生成:Frame元素对齐与表格内组件垂直对齐问题
我正在开发Python脚本,从JSON数据生成PDF,文档需要包含row/rack值、对应QR码,以及工作完成记录的勾选框类元素。现在碰到两个棘手的问题:
- Frame内元素对齐失效:用Reportlab布局的元素,没法在各自的Frame里正确对齐——试过调整Frame的padding、元素的对齐参数(比如
hAlign、vAlign),还有修改Flowable的位置属性,都没解决。 - 表格内EmptySquare与文本垂直不对齐:在
cal_table和lcv_table这两个表格里,自定义的EmptySquare组件(用来做勾选框)和同行的文字没法垂直对齐,看起来要么偏上要么偏下。
相关信息:
当前核心代码片段
# 导入依赖 from reportlab.lib.pagesizes import A4 from reportlab.platypus import SimpleDocTemplate, Frame, Paragraph, Table, TableStyle, Image from reportlab.lib.styles import ParagraphStyle from reportlab.lib import colors import qrcode from io import BytesIO from reportlab.graphics.shapes import Drawing, Rect # 自定义勾选框组件 class EmptySquare(Drawing): def __init__(self, size=18): super().__init__(size, size) self.add(Rect(0, 0, size, size, strokeColor=colors.black, fillColor=None)) # PDF生成核心逻辑示例 doc = SimpleDocTemplate("output.pdf", pagesize=A4) frame = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height, id='main') styles = {"normal": ParagraphStyle(name='Normal', fontSize=12)} # 构造内容元素 row_text = Paragraph("Row: Row1 Rack: RackA", styles["normal"]) # 生成QR码 qr_img = qrcode.make("Row1-RackA") buf = BytesIO() qr_img.save(buf, format='PNG') qr_img_platypus = Image(buf, width=50, height=50) # 构造表格 cal_data = [ [EmptySquare(), Paragraph("Calibration Done", styles["normal"])] ] cal_table = Table(cal_data) cal_table.setStyle(TableStyle([ ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('VALIGN', (0,0), (-1,-1), 'MIDDLE'), ])) # 加入Frame并生成PDF frame.addFromList([row_text, qr_img_platypus, cal_table], doc) doc.build([frame])
JSON输入示例
{ "locations": [ { "row": "Row 01", "rack": "Rack 05", "calibration_required": true, "lcv_check_required": false }, { "row": "Row 02", "rack": "Rack 06", "calibration_required": false, "lcv_check_required": true } ] }
输出对比
- 当前输出:Frame内的QR码和row/rack文本没有按照预期在Frame内居中对齐;表格里的EmptySquare比同行文本低一截,视觉上错位。
- 理想输出:所有元素在所属Frame内水平垂直居中;表格中的EmptySquare和文本基线对齐,视觉上处于同一水平线。
有没有大佬能帮忙分析下问题出在哪,或者给出调整的方向?
内容的提问来源于stack exchange,提问作者Nathaniel
相关产品推荐
相关产品推荐

