Когда ячейка «Подробности» увеличивается вертикально, соседние ячейки («Здание», «Квартира», «Количество») не соответствуют ее высоте правильно, или текст внутри них выглядит «плавающим» посередине, а границы не выравниваются. Мне нужно, чтобы все ячейки в одной строке имели одинаковую высоту и выравнивали содержимое по верху.
Код:
Код: Выделить всё
# --- TABLAS DE DESCUENTOS ---
for df_target, titulo in [(df_filtrado_desc, "Descuentos:"), (df_filtrado_desc_pend, "Descuentos Pendientes:")]:
if not df_target.empty:
pdf.set_font(font_name, "B", 10)
pdf.cell(0, 10, titulo, new_x=XPos.LMARGIN, new_y=YPos.NEXT, align='L')
anchos_d = [25, 25, 180, 45]
pdf.set_fill_color(230, 230, 230)
for col in ['Edif', 'Dep', 'Detalle', 'Monto']:
pdf.cell(anchos_d[['Edif', 'Dep', 'Detalle', 'Monto'].index(col)], 10, col, border=1, align='C', fill=True)
pdf.ln()
suma_monto = 0
pdf.set_font(font_name, size=9)
for _, fila in df_target.iterrows():
det = clean_text(fila.get('Detalle del Descuento'))
m = pd.to_numeric(fila.get('Monto'), errors='coerce'); m = 0 if pd.isna(m) else m
suma_monto += m
lines = pdf.multi_cell(anchos_d[2], 6, det, dry_run=True, output="LINES")
alt = max(len(lines) * 6, 8)
if pdf.get_y() + alt > 190: pdf.add_page()
y_f, x_m = pdf.get_y(), pdf.l_margin + sum(anchos_d[:3])
pdf.multi_cell(anchos_d[0], alt, clean_text(fila.get('Edif')), 1, 'C', new_x=XPos.RIGHT, new_y=YPos.TOP)
pdf.multi_cell(anchos_d[1], alt, clean_text(fila.get('Dep')), 1, 'C', new_x=XPos.RIGHT, new_y=YPos.TOP)
pdf.multi_cell(anchos_d[2], 6, det, 1, 'L', new_x=XPos.RIGHT, new_y=YPos.TOP)
pdf.set_xy(x_m, y_f); pdf.cell(anchos_d[3], alt, "", border=1)
pdf.set_xy(x_m + 1, y_f); pdf.cell(anchos_d[3], alt, "$", align='L')
pdf.set_xy(x_m, y_f); pdf.cell(anchos_d[3] - 1, alt, f"{int(m):,}".replace(",", "."), align='R')
pdf.set_y(y_f + alt)
# FILA DE TOTAL
y_total_d = pdf.get_y()
if y_total_d > 260: pdf.add_page(); y_total_d = pdf.get_y()
pdf.set_font(font_name, "B", 9)
pdf.set_fill_color(230, 230, 230)
pdf.cell(anchos_d[0] + anchos_d[1], 8, "TOTAL", 1, align='C', fill=True)
pdf.cell(anchos_d[2], 8, "", 1, fill=True)
x_total_val = pdf.l_margin + sum(anchos_d[:3])
pdf.set_xy(x_total_val, y_total_d)
pdf.cell(anchos_d[3], 8, "", 1, fill=True)
pdf.set_xy(x_total_val + 1, y_total_d); pdf.cell(anchos_d[3], 8, "$", align='L')
pdf.set_xy(x_total_val, y_total_d); pdf.cell(anchos_d[3] - 1, 8, f"{int(suma_monto):,}".replace(",", "."), align='R')
pdf.set_y(y_total_d + 12)

Подробнее здесь: https://stackoverflow.com/questions/798 ... -line-text