使用dompdf生成PDF时文本溢出表

Dom*_*nic 5 html pdf dompdf word-wrap

替代文字http://i45.tinypic.com/j6tmdl.png

我正在使用dompdf生成一些PDF,其中包含表格中的一些文本和图像.但是如果文本中有一个大的URL,则URL会一直包装到行尾.所有文本和URL都包含在具有固定宽度和高度的div中,但URL仍然溢出.

在浏览器中呈现的相同HTML似乎没问题.

有什么想法吗?

Bri*_*anS 3

我相信 DOMPDF 使用相当有限的字符集来确定如何分割行。现在它只在破折号或空格处分割一条线。因此,示例中的 URL 之类的内容将超出容器的宽度。DOMPDF 只是不知道如何分解它。

从 dompdf v0.6.0 开始,您可以设置文本样式,以便单词在任何字符处断开,例如:

<span style="word-wrap: break-word;">http://example.com/really/long/.../url</span>
Run Code Online (Sandbox Code Playgroud)

它不像中断特定字符(例如 a /)那么干净。如果您能够轻松地破解代码,则可以更优雅地解决该问题。打开文本重花类并修改分割行的正则表达式。正则表达式如下所示:

preg_split('/([\s-]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE)
Run Code Online (Sandbox Code Playgroud)

修改该代码以包含您认为可以实现良好换行的任何额外字符。例如,如果您希望文本中包含极长的 URL,则可以使用 ?、& 甚至 / 来分隔 URL:

$words = preg_split('/([\s-\?\&\/]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
Run Code Online (Sandbox Code Playgroud)

在 dompdf 0.6.1 中,可以在 dompdf/include/text_frame_reflower.cls.php 第 86 和 371 行中找到正则表达式。在即将发布的 0.7.0 中,可以在 dompdf/src/FrameReflower/Text.php 第 106 和 402 行中找到正则表达式。

修改 RegEx 的缺点是这会影响所有文本(而不仅仅是 URL)。