8

大家好,我正在使用 html2pdf,它不支持 word-break:break-all css 有什么想法吗?

例子

   <td style="width:30%;word-break:break-all ;">
      testtestetstetstetstetstettstetstetstetstetstetstetstetstetstetstets
    </td>

输出 pdf 宽度大于 30%,如字符串长度大小

输出pdf:testtestteststestttestttestttesttstetsttestttestttestttestttestttesttsets

我想要输出:

测试
测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试

4

10 回答 10

14

嗯,这很复杂。您的测试字符串太长,但不是由多个单词组成。这意味着断词不起作用,因为没有任何词可以断。显然,这很可能只是一个示例,在这种情况下,可能是 html2pdf 不支持相对宽度 and word-break,因此您可以尝试使用绝对宽度 and word-break

也就是说,这是我知道会起作用的东西:PHP 中的自动换行。因此,echo $yourvar;您可以使用echo wordwrap($yourvar, 75, "\n", true)instead 代替,它总是会切断字符串,即使它只是一根长字符串。让字符数与您正在寻找的宽度相匹配需要一些麻烦,但它会起作用。

<?php
$foo = str_repeat('test',12);
echo wordwrap($foo, 20, '<br />', true);

输出:

testtesttesttesttest
testtesttesttesttest
testtest
于 2012-10-08T12:24:59.103 回答
7

尝试这个;

<td style="width:30%; word-wrap:break-word;">
   testtestetstetstetstetstettstetstetstetstetstetstetstetstetstetstets
</td>

不是word-break这样word-wrap

于 2012-10-14T20:04:04.343 回答
5

如果您希望长字符串始终包裹在边界容器中,我认为您应该能够通过在原始字符串的每个字母之间插入零宽度空格字符&#8203;\xe2\x80\x8b)来完成此操作。这将具有换行的效果,就好像每个字符都是它自己的单词一样,但不会向最终用户显示空格。这可能会给最终产品的文本搜索或索引带来麻烦,但从美学的角度来看,它应该可靠地完成任务。

因此:

testtestetstetstetstetstettstetstetstetstetstetstetstetstetstetstets

变成

t&#8203;e&#8203;s&#8203;t&#8203;t&#8203;e&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s&#8203;t&#8203;e&#8203;t&#8203;s

(显示:“t​e​s​t​t​e​s​t​e​t​s​t​e​t​s​t​e​t​s​t​e​t​s t e t t t s t e t s t s t s t s t s t s t s t s t s t s s t s T E T E T S T E T E T S T E T S T S T E T S T S T S

因此,如果您包装它,它将完全包装到其容器的边界。这是一个小提琴的例子

只需编写一个 PHP 脚本来循环字符串并插入空格:

$string="testtestetstetstetstetstettstetstetstetstetstetstetstetstetstetstets";
$new_string = "";
for($i=0;$i<strlen($string);$i++){
   if ($string[$i]==' ' || $string[$i+1]==' '){ //if it is a space or the next letter is a space, there's no reason to add a break character
      continue;
   }
   $new_string .= $string[$i]."&#8203;";
}
echo $new_string

这是一个特别好的解决方案,因为与 不同的是wordwrap(),它会自动调整非固定宽度的字体(基本上是实际使用的字体的 99%)。

同样,如果您需要生成的 PDF 可搜索,这不是一个好方法,但它会让它看起来像您想要的那样。

于 2012-10-11T22:37:26.333 回答
4

您只需在代码中使用 substr 函数。我为此举了一个例子。首先将您的输出放入变量中。

$get_value = "testtestetstetstetstetstettstetstetstet";
$first = substr("$get_value",0,3);
$second = substr("$get_value",4,7);

等等。

于 2012-10-12T07:08:15.597 回答
4

在您的测试中,单词 break 将不起作用,因为单词 break 仅在特定句子中的单词之间起作用。所以你可以使用多个单词的句子,然后尝试使用分词器

于 2012-10-12T06:17:56.770 回答
3

您可以使用"\r\n"打印换行符。确保使用双引号。如果您的字符串在变量中,那么您需要使用字数统计功能并附加此字符串。您还可以使用PHP_EOL来避免平台依赖性。

于 2012-10-08T12:55:41.147 回答
2

html2pdf 不支持这个分词:break-all css

参考:http ://www.yaronet.com/en/posts.php?sl=&h=0&s=151321#0

于 2012-10-23T12:20:34.750 回答
0

您可以使用此方法。

<?php
$get_value = "testtestetstetstetstetstettstetstetstet";
$first = substr("$get_value",0,3);
$second = substr("$get_value",4,7);
$third = substr("$get_value",8,11);
?>
于 2012-10-22T07:44:27.667 回答
0

我想添加一点自己对 HTML2PDF 和表格的经验。

我使用这个解决方案生成了一个 PDF,其中包含一个填充有交货确认(产品列表)的表格。此类列表可能包含多达数千个产品(行)。

我遇到了单元格中的格式和长字符串问题。第一个问题是,即使我将表格的宽度设置为 100% 和标题 ( <th>) 列的宽度(HTML2PDF 不支持<colgroup>,因此我无法全局定义它),表格也变得太宽 - 有些列超出了可见区域. 我使用wordwrap()with<br />作为分隔符来分解看起来像是在工作的长字符串。不幸的是,事实证明,如果第一行和最后一行有这么长的字符串,则整个表都将在前面加上页。不是一个真正的混蛋,但也不好看。最终的解决方案是(适用于宽度可以超出可见区域的表格):

  • 以像素为单位设置表格和每一行 的固定宽度
    • 对于 A4 字母大小,我使用 550 像素的总宽度和默认边距,但您必须稍微调整一下才能在列之间分配宽度
  • wordwrap使用空格或&#8203;/\xe2\x80\x8b作为分隔符

对于您希望以 100% 的可见区域宽度展开的小表格,可以使用以%.

于 2015-08-12T07:21:30.970 回答
-1

我认为这个功能是一个跛行的解决方案。

function String2PDFString($string,$Length)
    {
    $Arry=explode(" ",$string);
    foreach($Arry as $Line)
        {
        if(strlen($Line)>$Length)
            $NewString.=wordwrap ($Line,$Length," ",true);
        else
            $NewString.=" ".$Line;
        }
    return $NewString;
    }
于 2014-11-24T21:00:12.053 回答