6

替代文字

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

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

有什么想法吗?

4

2 回答 2

3

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

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

<span style="word-wrap: break-word;">http://example.com/really/long/.../url</span>

它不像打破特定字符(例如 a /)那样干净。如果你习惯于破解代码,你可以更优雅地解决这个问题。打开文本重花类并修改分割行的正则表达式。正则表达式如下所示:

preg_split('/([\s-]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE)

修改该代码以包含您认为会产生良好换行符的任何额外字符。例如,如果您希望文本中包含极长的 URL,您可以将 URL 分解为 ?、& 或什至 /:

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

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

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

于 2010-02-26T22:26:06.213 回答
1

打开文件 dompdf/include/text_frame_reflower.cls.php 并细化如下所示的行:

$words = preg_split('/([\s-]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE);

修改正则表达式以包含您认为会产生良好换行符的任何额外字符。例如,您可能会将 URL 分解为? , & , 甚至/如果您希望文本中的 URL 非常长:

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

同时替换以下行

$words = array_flip(preg_split("/[\s-]+/u",$str, -1, PREG_SPLIT_DELIM_CAPTURE));

$words = array_flip(preg_split('/([\s-\?\&\/]+)/u', $str, -1, PREG_SPLIT_DELIM_CAPTURE));
于 2015-09-30T10:48:28.497 回答