HTML2PDF:PDF 中的单词被删减 off/running

HTML2PDF: Words being cut off/running off in PDF

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

我的输出如下:

这是我的代码片段:

            <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");

编辑:这里是 link 展示此行为的示例 pdf。 https://www.dropbox.com/s/h91g40bo4b2cmlw/Test_T_2312321.pdf?dl=0

看起来……

  1. ...您的 PDF /MediaBox 比 A4(595 点)更窄,
  2. ...或者您的 PDF drawing/writing of /Contents 代码不符合 A4 宽度并且 draws/writes 超出它。

您应该检查您的代码是否使用(可能隐藏的)设置将页面宽度(或完整页面大小)设置为字母(即 612x792 点)。

为了检验我的假设,您可以将 html2pdf 实现中的 A4 替换为 letterLetter...


(如果您向由您的代码创建的 PDF 提供 [link,则调试起来会容易得多。我上面写的 [几乎] 纯粹是推测。)


更新

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

  1. 我解压了文件的 /Content 流,以便将 PDF 页面绘图运算符视为 ASCII,使用以下命令:

    qpdf --qdf --object-streams=disable document.pdf q.pdf
    
  2. 现在新生成的 q.pdf 很容易在一个好的文本编辑器(如 VIm、Emacs 或 Notepad++)中打开。

  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
    

此代码片段打印了一行很长的文本,其字体在内部命名为 /F2(它又映射到文件其他地方的 /Helvetica-Bold),大小为 10点,从坐标 x=50, y=359.19.

开始

但是,这个长文本行不适合 /MediaBox 给定的页面宽度,定义为 [0 0 595 842](以 PostScript 磅为单位,代表 A4)。

它适合 635 的宽度(甚至在右边缘留下一些小边距)。

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

这个 PDF 的整体源代码是,顺便说一句,在某些地方效率很低(例如它包含 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 查看器中打开它。

现在您会看到页面内容也适合页面宽度(现在是 635 点(== 22.4 厘米;原始值 595 点相当于 21.0 厘米)。

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

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