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
看起来……
- ...您的 PDF
/MediaBox
比 A4(595 点)更窄,
- ...或者您的 PDF drawing/writing of
/Contents
代码不符合 A4 宽度并且 draws/writes 超出它。
您应该检查您的代码是否使用(可能隐藏的)设置将页面宽度(或完整页面大小)设置为字母(即 612x792 点)。
为了检验我的假设,您可以将 html2pdf 实现中的 A4
替换为 letter
或 Letter
...
(如果您向由您的代码创建的 PDF 提供 [link,则调试起来会容易得多。我上面写的 [几乎] 纯粹是推测。)
更新
查看 OP 更新 link 中提供的 PDF 源代码后,我可以这样说:
我解压了文件的 /Content
流,以便将 PDF 页面绘图运算符视为 ASCII,使用以下命令:
qpdf --qdf --object-streams=disable document.pdf q.pdf
现在新生成的 q.pdf
很容易在一个好的文本编辑器(如 VIm、Emacs 或 Notepad++)中打开。
以下行在页面上打印一些文本:
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:
搜索字符串 /MediaBox
。它在 PDF 中出现两次,每页出现一次。
将其当前值 [0 0 595.28 841.89]
替换为新值 [0 0 635.00 841.89]
。
保存编辑后的文件。
在您最喜欢的 PDF 查看器中打开它。
现在您会看到页面内容也适合页面宽度(现在是 635
点(== 22.4
厘米;原始值 595
点相当于 21.0
厘米)。
您还会看到,不仅是一些长文本行不适合页面宽度 -- 为框绘制的一些水平线也是如此。
这是编辑后的 PDF 文件的屏幕截图,显示了新 /MediaBox
现在如何能够将所有页面内容保存在其边界内:
我文件中的一些文字在 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
看起来……
- ...您的 PDF
/MediaBox
比 A4(595 点)更窄, - ...或者您的 PDF drawing/writing of
/Contents
代码不符合 A4 宽度并且 draws/writes 超出它。
您应该检查您的代码是否使用(可能隐藏的)设置将页面宽度(或完整页面大小)设置为字母(即 612x792 点)。
为了检验我的假设,您可以将 html2pdf 实现中的 A4
替换为 letter
或 Letter
...
(如果您向由您的代码创建的 PDF 提供 [link,则调试起来会容易得多。我上面写的 [几乎] 纯粹是推测。)
更新
查看 OP 更新 link 中提供的 PDF 源代码后,我可以这样说:
我解压了文件的
/Content
流,以便将 PDF 页面绘图运算符视为 ASCII,使用以下命令:qpdf --qdf --object-streams=disable document.pdf q.pdf
现在新生成的
q.pdf
很容易在一个好的文本编辑器(如 VIm、Emacs 或 Notepad++)中打开。以下行在页面上打印一些文本:
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:
搜索字符串
/MediaBox
。它在 PDF 中出现两次,每页出现一次。将其当前值
[0 0 595.28 841.89]
替换为新值[0 0 635.00 841.89]
。保存编辑后的文件。
在您最喜欢的 PDF 查看器中打开它。
现在您会看到页面内容也适合页面宽度(现在是 635
点(== 22.4
厘米;原始值 595
点相当于 21.0
厘米)。
您还会看到,不仅是一些长文本行不适合页面宽度 -- 为框绘制的一些水平线也是如此。
这是编辑后的 PDF 文件的屏幕截图,显示了新 /MediaBox
现在如何能够将所有页面内容保存在其边界内: