【问题标题】:Text overflowing tables when generating PDF with dompdf使用 dompdf 生成 PDF 时文本溢出表格
【发布时间】:2011-01-13 09:18:41
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

    标签: html pdf dompdf word-wrap


    【解决方案1】:

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

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

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

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

    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 中,RegEx 可以在 dompdf/include/text_frame_reflower.cls.php 第 86 和 371 行中找到。在即将发布的 0.7.0 中,RegEx 可以在 dompdf/src/FrameReflower/Text.php 行中找到106 和 402。

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

    【讨论】:

    【解决方案2】:

    打开文件 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));
    

    【讨论】:

    • 不确定您的编辑为何被拒绝。似乎是可以接受的修改。
    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 2017-08-14
    • 2012-06-06
    • 2015-10-30
    • 2014-09-16
    • 2020-07-12
    • 1970-01-01
    • 2012-09-13
    相关资源
    最近更新 更多