【问题标题】:How to prevent table resizing in PDF using mPDF and PHP?如何防止使用 mPDF 和 PHP 在 PDF 中调整表格大小?
【发布时间】:2014-11-28 12:56:03
【问题描述】:

我有一些表单数据,提交后会生成一个 PDF。问题是 PDF 中表格的大小。如果我的表单中的某些字符串太长,则 PDF 生成错误。这是因为桌子。它们具有静态大小,因此如果字符串太长,表格无法容纳它。我使用 mPDF 库。

我怎样才能使这个表格的大小动态变化,以便它们的大小根据字符串的长度而改变?

如果字符串 {p} 是最长的,那么表格的宽度会减小表格的大小。我想如果字符串 {p} 比表格的宽度长,那么 {p} 应该写在下一行并且表格的高度应该增加。

如果字段(名称)中的字符串很短,则截图:

如果字段(名称)中的字符串很长,则截图:

如果字段(名称)中的字符串很长,则截图:

这是一段带有 mPDF 的代码:

$mpdf=new mPDF('UTF-8','A4','','',20,15,48,25,10,10);

$mpdf->shrink_tables_to_fit=1;
$mpdf->keep_table_proportions = true;
$mpdf->WriteHTML(generatePDF());
$mpdf->AddPage();
$mpdf->WriteHTML(generatePDF2());

$mpdf->Output();
exit;

以及 HTML 表格的片段:

function generatePDF(){
    global $a,$b,$c,$d;
    $html = getHTMLStyle().'

<div style="text-align: left;"><span style="font-size: 11pt;font-weight: bold;">FORMULARZ KONSULTACJI<br />PROJEKTU PRAWA MIEJSCOWEGO<br /> W ZAKRESIE DZIAŁALNOŚCI STATUTOWEJ ORGANIZACJI POZARZĄDOWEJ*<br /><br /></span></div>

<table class="items" width="100%" style="font-size: 9pt; border-collapse: collapse;" cellpadding="8">

<tr>
<td width="5%">A</td>
<td width="95%"><b>'.$a.'</b><br /><br /> '.$_POST['title'].'</td>
</tr>

【问题讨论】:

标签: php html pdf-generation dynamic-programming


【解决方案1】:

这里:

<tr>
<td width="5%">A</td>
<td width="95%"><b>'.$a.'</b><br /><br /> '.$_POST['title'].'</td>
</tr>

尝试使用固定的表格宽度值而不是百分比。类似:

<table class="items" width="950" style="font-size: 9pt; border-collapse: collapse;" cellpadding="8">

看看会发生什么。

【讨论】:

    【解决方案2】:

    确实很难找到问题,但答案很简单。 阅读源码后带有 style="overflow:wrap" 的表格:

    elseif ($table['overflow']=='wrap')
    

    【讨论】:

      【解决方案3】:

      这是一个迟到的答案,但值得现在回答。当表格 tr 有非常大的内容时,我也面临同样的问题。我尝试了以下解决方案,但没有运气。

      $mpdf->shrink_tables_to_fit=0;

      然后我将我的 html 结构从 table 更改为 div,boom 成功了。所以现在它工作得很好,大内容在页面之间正常吐出,没有重叠的页眉和页脚。我希望它会帮助某人。干杯

      【讨论】:

      • 你是对的,将表格结构改为div后,pdf看起来很漂亮。谢谢。您可以找到此链接 html-cleaner.com/features/replace-html-table-tags-with-divs 对于将表格转换为 div 格式很有用。注意:我已经尝试了 SO 中给出的所有解决方案,但这是最后一个尝试并成功的解决方案。
      【解决方案4】:
      <style>
          table {
              overflow: wrap;
          }
      </style>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-10
        • 1970-01-01
        相关资源
        最近更新 更多