Я создаю отчет о ликвидации недвижимости, используя fpdf2 на Python. У меня есть таблица, в которой один столбец («Подробности») содержит длинные описания, которые переносятся в несколько строк с помощью multi_cell.
Когда ячейка «Подробности» увеличивается вертикально, соседние ячейки («Здание», «Квартира», «Количество») не соответствуют ее высоте правильно, или текст внутри них выглядит «плавающим» посередине, а границы не выравниваются. Мне нужно, чтобы все ячейки в одной строке имели одинаковую высоту и выравнивали содержимое по верху.
Код:
Я создаю отчет о ликвидации недвижимости, используя fpdf2 на Python. У меня есть таблица, в которой один столбец («Подробности») содержит длинные описания, которые переносятся в несколько строк с помощью multi_cell. Когда ячейка «Подробности» увеличивается вертикально, соседние ячейки («Здание», «Квартира», «Количество») не соответствуют ее высоте правильно, или текст внутри них выглядит «плавающим» посередине, а границы не выравниваются. Мне нужно, чтобы все ячейки в одной строке имели одинаковую высоту и выравнивали содержимое по верху. Код: [code]# --- 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)