Как выровнять соседние ячейки по верху, если одна ячейка содержит динамический многострочный текст?Python

Программы на Python
Ответить
Anonymous
 Как выровнять соседние ячейки по верху, если одна ячейка содержит динамический многострочный текст?

Сообщение Anonymous »

Я создаю отчет о ликвидации недвижимости, используя fpdf2 на Python. У меня есть таблица, в которой один столбец («Подробности») содержит длинные описания, которые переносятся в несколько строк с помощью multi_cell.
Когда ячейка «Подробности» увеличивается вертикально, соседние ячейки («Здание», «Квартира», «Количество») не соответствуют ее высоте правильно, или текст внутри них выглядит «плавающим» посередине, а границы не выравниваются. Мне нужно, чтобы все ячейки в одной строке имели одинаковую высоту и выравнивали содержимое по верху.
Код:

Код: Выделить всё

# --- 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»