【问题标题】:PHP TCPDF - How do I vertical align text in a table cell?PHP TCPDF - 如何垂直对齐表格单元格中的文本?
【发布时间】:2012-05-28 07:49:30
【问题描述】:

默认情况下,表格单元格内(由 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) 是在每个单元格中放置跨度并在这些跨度中创建带有换行符的空白行,以便强制你的文本向下(并因此朝向垂直中心),但这有点小技巧。

有没有人找到更好/更清洁的方法来实现这一目标?这么受欢迎的图书馆肯定能满足这种普遍的需求吗?

【问题讨论】:

  • 您是否尝试过在单元格上使用valign 属性或css
  • 嘿嘿。我应该在上面的文字中提到这一点,但是是的,我已经尝试了标准的 HTML / CSS 方法。
  • 在css中有很多方法可以实现这一点。你都试过了吗?
  • 据我所知,是的。如果我没有,我不会问这个问题:) 公平地说,我希望这只是我知识有限的一个例子,而不是 TCPDF 的有限功能,这阻止我垂直对齐 TCPDF 中的文本表格单元格。因此,虽然我感谢您质疑我的 CSS 知识的原因,但这里有没有人真的在 TCPDF 中做过这个?

标签: php vertical-alignment tcpdf


【解决方案1】:

如果是静态表格...您可以在内容上方添加不可见文本以将文本下推:

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

调整   的字体大小提高或降低文本......这是一个黑客,但它确实有效。
的工作也是如此……但它们会不太准确……

【讨论】:

  • 6 年后,这似乎是唯一简单的方法:)
【解决方案2】:

请记住,TCPDF 无法像浏览器那样处理成熟的 HTML 和 CSS。 Nicolas 在渲染最常用的 HTML 代码方面做得很好。 CSS 不能放在文档顶部,必须内联。

表格必须完全手动格式化——单元格不会像在浏览器中那样自动调整大小。同样,您必须弄清楚某物的高度并添加&lt;BR&gt;s 或调整不可见图像的大小以将其向下推。

也许有一天他会添加更多这样的功能。事实上,我觉得这门课很棒。

【讨论】:

    【解决方案3】:

    以下方法对我有用。 1. 在表格标签上方写下以下代码。

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

    注意:高度应该是行高的两倍。

    1. 在表格级别使用 cellpadding 属性。例如,

      cellpadding="5"

    两种方式都需要调整高度。

    【讨论】:

      【解决方案4】:

      这对我有用:

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

      【讨论】:

        【解决方案5】:

        我想底部对齐一些 - 但不是全部 - 单元格。我发现简单地用&lt;br&gt; 填充是行不通的。

        您需要使用&amp;nbsp;&lt;br&gt; - 然后将文本向下推。

        【讨论】:

          【解决方案6】:

          我有一张表格,其中一列的字体大小不同(因为数字很大,如果不缩小就不会留在一行上),客户希望它们在单元格中垂直居中。

          在尝试了我在 HTML、CSS 和 TCPDF 的历史中学到的所有技巧之后,每次嘲笑我时,我终于设计了一个如此聪明的解决方案,它没有预料到,最后我或多或少地获得了垂直单元格对齐即在单元格的中间位置。

          我发现如果同一单元格中有图像,TCPDF 会对齐图像底部的文本。所以我制作了一个实用程序脚本,为我提供一个参数化宽度和高度的白色图像,并将其放在文本前面。也可以只制作所需尺寸的白色图像并使用它,但我发现使用脚本和不同的参数进行试验更容易。在我的情况下,wwidth 仅为 1px,但理论上也可以将文本与图像一起推到右侧。

          当然,这种方法也存在一些问题,但就我而言,所有数字都表现得很好。如果居中文本或其他列的高度变化很大,则很难找到一个好的值(尽管通过参数化可以尝试根据行上每个单元格的长度来计算所需的高度)。

          我仍然希望至少可以在单元格中设置顶部填充或顶部边距(工作垂直对齐会更可取,但即使有任何工具也会让生活更轻松)

          希望这对其他一些糟糕的程序员也有帮助

          汉克

          【讨论】:

            【解决方案7】:

            &lt;td&gt; 标记使用内联样式,然后改变百分比以将文本设置在pdf 显示上所需的合适位置。 例如

            <td style="line-height: 250%;">'. $variable .'</td>
            

            【讨论】:

              【解决方案8】:

              添加 style="line-height:50%;" in image 标签对我有用。请试一试。就我而言,我想在表格单元格中垂直对齐图像。您可以在表格单元格中添加 div,并可以在其中添加图像或文本。下面对我有用。

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

              【讨论】:

                【解决方案9】:

                也许行高较小,这是一种解决方法:

                &lt;table width="100%" cellpadding="5" cellspacing="0"&gt;

                cellpadding 值是单元格高度 / 2 。如果您需要更多空间/高度,看起来不太好 否则这将是更好的解决方案:http://bytethinker.com/blog/tcpdf-and-vertical-alignment-of-table-cells

                【讨论】:

                  【解决方案10】:

                  嵌套另一个 TABLE 并添加另一个 ROW。在要垂直对齐的内容之前添加一个空的 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>';
                  

                  【讨论】:

                    【解决方案11】:

                    您可以使用&amp;nbsp;&lt;br/&gt; 为您的&lt;td&gt; 表添加空间

                    我发现这个link 可能对你有帮助

                    【讨论】:

                      【解决方案12】:

                      我用 span 标签中的一个字母解决了这个问题;例如:

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

                      通过调整字体大小,我可以处理单元格的高度,并且因为文本始终是基线,所以它可以工作。

                      【讨论】:

                        【解决方案13】:

                        它的工作(细胞填充)...

                        <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>';

                        【讨论】:

                          猜你喜欢
                          • 2017-09-04
                          • 1970-01-01
                          • 1970-01-01
                          • 2017-05-30
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多