Html2pdf 不支持 word-break:break-all css



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

示例

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

输出pdf的宽度超过30%,如字符串长度大小

输出pdf:测试测试

我想要输出:

测试测试

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

也就是说,我知道这是可行的:PHP中的wordwrap。因此,您可以使用echo wordwrap($yourvar, 75, "n", true)来代替echo $yourvar;,这将始终剪切字符串,即使它只是一个长字符串。要想让字符数与你想要的宽度相匹配,需要一些技巧,但这是可行的。

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

输出:

testtesttesttesttest
testtesttesttesttest
testtest

试试这个;

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

不是CCD_ 5,而是CCD_;

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

因此:

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​。3;t​;tҳ;sҳ;eҳ;t⻣;s⻣;e⻣;tϫ;sϫ;tg;eϫ;t⻣;s⻣;tҳ;e 8203.t​;s​;t​;e​;t​;s​;t​;e​;t​;s​;t​;e​;t​;s​;t​;e​;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是可搜索的,这不是一个好方法,但它会让看起来像你想要的

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

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

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

等等

您可以使用"rn"打印换行符。一定要用双引号。如果您的字符串在变量中,则需要使用单词计数函数并附加此字符串。您还可以使用PHP_EOL来避免平台依赖性。

html2pdf不支持这个单词break:break all css

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

您可以使用此方法。

<?php
$get_value = "testtestetstetstetstetstettstetstetstet";
$first = substr("$get_value",0,3);
$second = substr("$get_value",4,7);
$third = substr("$get_value",8,11);
?>

我想添加一些自己使用HTML2PDF和表的经验。

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

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

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

对于希望扩展为100%可见区域宽度的小表,可以使用%表示的宽度。

我认为这个函数是一个清晰的解决方案。

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;
}

最新更新