PHP TCPDF - Как выровнять текст по вертикали в ячейке таблицы?

По умолчанию значения в ячейках таблиц (в таблицах, сгенерированных TCPDF) выравниваются по вертикали прямо по верхней части ячейки.

Кто-нибудь нашел простой способ вертикального выравнивания текста по середине ячейки?

Я нашел несколько предложенных решений в Интернете, но они не кажутся мне идеальными.

Например, одно предложение (http://sourceforge.net/projects/tcpdf/forums/forum/435311/topic/4385696) состоит в том, чтобы установить содержимое каждой ячейки с помощью метода TCPDF MultiCell(), но это проблема, когда вы просто хотите написать свой HTML-код, а затем сгенерировать PDF.

Другое предложение (http://bytethinker.com/blog/tcpdf-and-vertical-alignment-of-table-cells) состоит в том, чтобы размещать промежутки внутри каждой ячейки и создавать пустые строки с разрывами строк в этих промежутках, чтобы заставить ваш текст вниз (и, таким образом, к вертикальному центру), но это немного хак.

Кто-нибудь нашел лучший/более чистый способ добиться этого? Неужели такая популярная библиотека удовлетворит столь распространенное требование?


person Kosta Kontos    schedule 28.05.2012    source источник
comment
Вы пытались использовать атрибут valign или css для ячеек   -  person Musa    schedule 28.05.2012
comment
Эй. Я должен был упомянуть об этом в тексте выше, но да, я пробовал стандартный подход HTML/CSS.   -  person Kosta Kontos    schedule 28.05.2012
comment
Есть много способов добиться этого в css. Вы пробовали их все?   -  person Robin Castlin    schedule 28.05.2012
comment
Насколько мне известно, да. Я бы не задавал этот вопрос, если бы не знал :) Честно говоря, я надеюсь, что это просто случай моих ограниченных знаний, в отличие от ограниченной функциональности TCPDF, которая не позволяет мне вертикально выравнивать текст в TCPDF. ячейки таблицы. Итак, хотя я ценю ваши причины, по которым вы ставите под сомнение мои знания CSS, кто-нибудь из присутствующих действительно делал это в TCPDF?   -  person Kosta Kontos    schedule 28.05.2012


Ответы (13)


Помните, что TCPDF не может обрабатывать полноценные HTML и CSS так, как это может делать браузер. Николас проделал хорошую работу по отображению наиболее часто используемых HTML-кодов. CSS нельзя размещать в верхней части документа, он должен быть встроен.

Таблицы должны быть полностью отформатированы вручную — размеры ячеек не изменяются автоматически, как в браузере. Точно так же вы должны вычислить высоту чего-либо и добавить <BR>s или изменить размер невидимого изображения, чтобы сдвинуть его вниз, если хотите.

Возможно, однажды он добавит больше этой функциональности. Как бы то ни было, я нахожу класс потрясающим.

person JayEdgar    schedule 20.06.2012

Если это статическая таблица... вы можете добавить невидимый текст над содержимым, чтобы сдвинуть текст вниз:

<td width="12%" style="text-align:center">
  <div style="font-size:10pt">&nbsp;</div>
  <b>The contents of my cell...</b>
</td>

Отрегулируйте размер шрифта, чтобы поднять или опустить текст... Это хак, но он работает. ‹br /> тоже работают... но они будут менее точными...

person Nawlbergs    schedule 15.04.2016
comment
6 лет спустя, кажется, это единственный простой способ сделать это :) - person Peter; 21.12.2020

Следующие способы сработали для меня. 1. Напишите приведенный ниже код прямо над тегом таблицы.

<style> td{height: 20px;line-height:10px;}</style>

Примечание. Высота должна быть в два раза больше высоты строки.

  1. Используйте атрибут cellpadding на уровне таблицы. Например,

    отступ = "5"

В обоих случаях нужно регулировать высоту.

person Sahana    schedule 08.01.2013

Это сработало для меня:

<td align="center" style="height: 50px;">
<div style="vertical-align: middle;">
<p>This Is My text</p>
</div>
</td>
person Arash125    schedule 31.12.2019

Я хотел выровнять по нижнему краю некоторые, но не все ячейки. Я обнаружил, что простое дополнение с помощью <br> не работает.

Вместо этого вам нужно использовать &nbsp;<br> - тогда текст будет сдвинут вниз.

person Steve Lockwood    schedule 17.09.2014

У меня есть таблица с одним столбцом с другим размером шрифта (потому что числа большие и не останутся на одной строке, если их не уменьшить), и клиент хочет, чтобы они были вертикально центрированы в ячейках.

Перепробовав все хаки, которые я изучил за свою историю HTML, CSS и TCPDF, каждый раз насмехаясь надо мной, я, наконец, придумал такое умное решение, которого оно не ожидало, и, наконец, я получил вертикальное выравнивание ячеек более или менее на месте, т.е. в середине клетки.

Я обнаружил, что если в той же ячейке есть изображение, TCPDF выравнивает текст по нижней строке изображения. Поэтому я сделал служебный скрипт, который обслуживал меня белым изображением с параметризованной шириной и высотой, и поместил его перед текстом. Можно также просто сделать белое изображение нужных размеров и использовать его, но мне было проще экспериментировать со сценарием и различными параметрами. В моем случае wwidth составляет всего 1 пиксель, но теоретически можно также сдвинуть текст вправо вместе с изображением.

Конечно, и с этим подходом есть некоторые проблемы, но в моем случае все числа ведут себя вполне прилично. Если высота центрированного текста или других столбцов сильно различается, очень трудно найти хорошее значение (хотя с помощью параметризации можно попытаться вычислить необходимую высоту из длин каждой ячейки в строке).

Я бы все же предпочел, чтобы в ячейке можно было установить хотя бы верхний отступ или верхнее поле (рабочее вертикальное выравнивание было бы еще более желательным, но даже наличие любого инструмента облегчило бы жизнь)

Надеюсь, это поможет даже некоторым другим плохим кодерам

моток

person hank    schedule 14.03.2016

Используйте встроенный стиль для тега <td>, а затем измените процентное значение, чтобы установить текст в подходящей позиции на дисплее PDF. например

<td style="line-height: 250%;">'. $variable .'</td>
person Ibrahim Isa    schedule 11.06.2017

Добавление стиля = "высота строки: 50%;" в теге изображения работает для меня. Пожалуйста, попробуйте. В моем случае я хотел выровнять изображение по вертикали в ячейке таблицы. Вы можете добавить div в ячейку таблицы и добавить изображение или текст внутри него. Ниже работает для меня.

<div align="center"><img src="images/logo_example.png" border="0" height="30" width="30" style="line-height:50%;"/></div>

person Aman    schedule 06.09.2017

Возможно, с меньшей высотой строки это обходной путь:

<table width="100%" cellpadding="5" cellspacing="0">

Значение cellpadding — это высота ячейки / 2 . Выглядит не очень хорошо, если вам нужно больше места/высоты, иначе это будет лучшим решением: http://bytethinker.com/blog/tcpdf-and-vertical-alignment-of-table-cells

person Silvan    schedule 15.05.2014

Вложите еще одну ТАБЛИЦУ и добавьте еще одну СТРОКУ. Добавьте пустой TD перед контентом, который вы хотите выровнять по вертикали, и добавьте к нему атрибут высоты. Это должно дать вам детальный контроль над вертикальным интервалом.

Вот пример:

'<table cellpadding="0" border="0" style="border-collapse: collapse;">' .
    '<tr>' .
    '<td width="148" height="80">' .
    '<img width="128" src="' . "images/gcs_logo.svg" . '"/>' .
    '</td>' .
    '<td style="line-height:14px; font-size:11px;">' .
        '<table cellpadding="0" border="0" style="border-collapse: collapse;">' .
        '<tr style="color:#000000;">' .
        '<td height="23" style="text-decoration:underline;padding:0;"></td>' .
        '</tr>' .
        '<tr style="color:#000000;">' .
        '<td style="padding:0;">18191 Von Karman Avenue<br/>Suite 300<br/>Irvine, California 92612</td>' .
        '</tr>' .
        '</table>' .
    '</td>' .
    '</tr>' .
    '</table>';
person mmoore500    schedule 27.01.2017

Вы можете добавить место в свою <td> таблицу, используя &nbsp;<br/>

я нашел эту ссылку, возможно, она поможет вам

person wahmal    schedule 17.06.2017

Я решил это с помощью буквы внутри тега span; Например:

<td><span style=\"font-size:16px;color:#FFF;\">|</span>Content</td>

регулируя размер шрифта, я могу обрабатывать высоту ячейки, и поскольку текст всегда является базовым, он работает.

person Rudi Vielnascher    schedule 11.07.2019

это сработало (cellpadding) ...

<table border="1" cellpadding="5" style="font-size:10px;">

$html .= '<table border="1" cellpadding="5" style="font-size:10px;">';
$html .= '<tr style="font-weight:bold;text-align:center;line-height:11px;" >';
$html .= '<th>School/College Name</th>';
$html .= '<th>Board</th>';
$html .= '<th>Language</th>';
$html .= '<th>Percentage</th>';
$html .= '<th>Place</th>';
$html .= '</tr>';
$html .= '<tr style="text-align:center;line-height:11px;font-weight:bold;font-size:8px;" >';
$html .= '<td style="vertical-align: middle;font-weight:bold;">' . $tenInfo[0]['school_college_name'] . '</td>';
$html .= '<td style="vertical-align: middle">' . $tenInfo[0]['board']. '</td>';
$html .= '<td style="vertical-align: middle">' . $tenInfo[0]['main_lang']. '</td>';
$html .= '<td style="vertical-align: middle">' . $tenInfo[0]['percentage']. '</td>';
$html .= '<td style="vertical-align: middle">' . $tenInfo[0]['school_college_place']. '</td>';
$html .= '</tr>';

$html .= '<tr style="text-align:center;line-height:11px;font-weight:bold;font-size:8px;" >';
$html .= '<td style="vertical-align: middle">' . $plusInfo[0]['school_college_name'] . '</td>';
$html .= '<td style="vertical-align: middle">' . $plusInfo[0]['board']. '</td>';
$html .= '<td style="vertical-align: middle">' . $plusInfo[0]['main_lang']. '</td>';
$html .= '<td style="vertical-align: middle">' . $plusInfo[0]['percentage']. '</td>';
$html .= '<td style="vertical-align: middle">' . $plusInfo[0]['school_college_place']. '</td>';
$html .= '</tr>';

$html .= '<tr style="text-align:center;line-height:11px;font-weight:bold;font-size:8px;" >';
$html .= '<td style="vertical-align: middle">' . $ugInfo[0]['school_college_name'] . '</td>';
$html .= '<td style="vertical-align: middle">' . $ugInfo[0]['board']. '</td>';
$html .= '<td style="vertical-align: middle">' . $ugInfo[0]['main_lang']. '</td>';
$html .= '<td style="vertical-align: middle">' . $ugInfo[0]['percentage']. '</td>';
$html .= '<td style="vertical-align: middle">' . $ugInfo[0]['school_college_place']. '</td>';
$html .= '</tr>';


$html .= '<tr style="text-align:center;line-height:11px;font-weight:bold;font-size:8px;" >';
$html .= '<td>' . $pgInfo[0]['school_college_name'] . '</td>';
$html .= '<td>' . $pgInfo[0]['board']. '</td>';
$html .= '<td>' . $pgInfo[0]['main_lang']. '</td>';
$html .= '<td>' . $pgInfo[0]['percentage']. '</td>';
$html .= '<td>' . $pgInfo[0]['school_college_place']. '</td>';
$html .= '</tr>';
$html .= '</table>';

person manoj    schedule 29.10.2015