HTML2PDF:在PDF中切断/关闭的单词

时间:2015-03-23 18:35:58

标签: php html pdf html2pdf

我文件中的一些文字在PPDF中被切断了。我可以看到这些词在那里,但没有正确包装。

我的输出如下:

enter image description here

以下是我的代码的信息:

            <table>
                <tr align=''>
                    <td colspan='5' class='heading'>Corporate URC Use Only</td>
                </tr>
                <tr>
                    <td>Consult Determination<span class='required'></span>:</td>
                    <td><strong>";
                    if(isset($updated_history) && !is_null($updated_history)){
                        $html .= $data['original_decision'];
                    }
                    else{
                        $html .= $data['final_decision'];
                    }

                    $html .="</strong></td>

                </tr>
                </table>
                <table>
                    <tr>
                        <td>Notes:</td>
                        <td><strong>" . $data['notes'] . "</strong></td>
                    </tr>
                </table>

我的html2pdf实现很简单:

require_once("../include/html2pdf/html2pdf.class.php");
$html2pdf = new HTML2PDF('P','A4','en');
$html2pdf->pdf->SetDisplayMode('real');     

$html2pdf->WriteHTML($html);
$html2pdf->Output($c_file, "F");

编辑:以下是展示此行为的示例pdf的链接。 https://www.dropbox.com/s/h91g40bo4b2cmlw/Test_T_2312321.pdf?dl=0

1 个答案:

答案 0 :(得分:2)

看起来像......

  1. ...您的PDF /MediaBox比A4(595分)更窄,
  2. ...或者您的PDF的/Contents代码的绘图/书写不符合A4宽度,而是在其之外绘制/写入。
  3. 您应该检查您的代码是否使用(可能是隐藏的)设置将页面宽度(或完整页面大小)设置为字母(这将是612x792点)。

    要测试我的假设,您可以用A4letter替换html2pdf实现中的Letter ...


    (如果你提供了一个由你的代码创建的[链接到] PDF,那么调试就会容易得多。我上面写的是[几乎]纯粹的推测。)


    更新

    在查看OP更新链接中提供的PDF源代码后,我可以这样说:

    1. 我解压缩了文件的/Content个流,以便使用以下命令将PDF页面绘制操作符视为ASCII:

      qpdf --qdf --object-streams=disable document.pdf q.pdf
      
    2. 现在可以在一个好的文本编辑器(如VIm,Emacs或Notepad ++)中轻松打开新生成的q.pdf

    3. 以下行在页面上打印一些文字:

       BT                     \
         /F2 10.00 Tf         \
       ET                     \
       [....]                 \
       q                      \
         0.000 0.000 0.000 rg \
           BT                 \
             0    Tr          \
             0.00 w           \
           ET                 \
           BT                 \
             50.00 359.19 Td  \
             [(Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore)] TJ \
           ET                 \
      Q
      
    4. 此代码段打印了很长的文本行,其中的字体内部命名为/F2(后者又映射到文件中其他位置的/Helvetica-Bold),大小为10个点,从坐标x=50, y=359.19开始。

      但是,这条长文本行不适合/MediaBox给出的页面宽度,定义为[0 0 595 842](在PostScript点中,代表A4)。

      它的宽度为635(即使在右边缘留下一些小的边距)。

      (您还可以通过缩小文本大小来使文本适合当前页面宽度,例如。/F2 9.00 Tf。但这仍然会使绘制框的长水平线溢出右页边框...)

      这个PDF的整体源代码是,BTW,在某些地方非常低效(例如它包含BT /F1 10.00 Tf ET 1.000 g超过1000次,但这段代码确实......没有!它只定义字体用作内部名称/F1,字体大小为10分。)

      您可以轻松地使用文本编辑器编辑原始PDF:

      1. 搜索字符串/MediaBox。它在PDF中出现两次,每页一次。

      2. 将其[0 0 595.28 841.89]的当前值替换为新值[0 0 635.00 841.89]

      3. 保存已编辑的文件。

      4. 在您喜欢的PDF查看器中打开它。

      5. 现在您将看到页面内容也适合页面的宽度(现在为635点(== 22.4 cm; 595点的原始值相当于到21.0 cm)。

        您还会看到,不仅是一些长文本行不适合页面宽度 - 对于为框绘制的某些水平线也是如此。

        以下是已编辑PDF文件的屏幕截图,显示了新/MediaBox现在如何能够在其边界内保存所有页面内容:

        so#29217840.png