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

时间:2010-02-05 04:39:07

标签: html pdf dompdf textwrapping

alt text http://i45.tinypic.com/j6tmdl.png

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

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

有什么想法?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

修改该代码,以包含您认为可以为良好的换行符添加的任何额外字符。例如,如果您希望在文本中包含极长的网址,则可能会在?,&amp;或甚至/中断网址:

$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行中找到RegEx。 106和402。

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

答案 1 :(得分:1)

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

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

修改正则表达式以包含您认为可以为良好的换行符添加的任何额外字符。例如,如果您希望在文本中包含极长的网址,则可以在&amp; ,甚至 / 上分解网址:

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