hai大家我正在使用html2pdf,它不支持word-break:break-all css任何想法?
例如
<td style="width:30%;word-break:break-all ;">
testtestetstetstetstetstettstetstetstetstetstetstetstetstetstetstets
</td>
输出pdf宽度超过30%,如字符串长度
输出pdf:testtestetstetstetstetstettstetstetstetstetstetstetstetstetstetstets
我想要输出:
testtestetstetstetstetstettstets
tetstetstetstetstetstetstetstets
答案 0 :(得分:11)
word-break
,因此您可以尝试使用绝对宽度word-break
。
那就是说,这里有一些我知道可行的东西:PHP中的wordwrap。因此,您可以使用echo $yourvar;
来代替echo wordwrap($yourvar, 75, "\n", true)
,而总是剪切字符串,即使它只是一个长字符串。需要花一点时间才能获得与您正在寻找的宽度相匹配的字符数,但它会起作用。
<?php
$foo = str_repeat('test',12);
echo wordwrap($foo, 20, '<br />', true);
输出:
testtesttesttesttest
testtesttesttesttest
testtest
答案 1 :(得分:6)
试试这个;
<td style="width:30%; word-wrap:break-word;">
testtestetstetstetstetstettstetstetstetstetstetstetstetstetstetstets
</td>
不是word-break
它是word-wrap
;
答案 2 :(得分:5)
如果您希望长字符串在边界容器中一致地包装,我认为您应该能够通过在每个字母之间插入zero-width space characters(​
或\xe2\x80\x8b
)来实现此目的orignial字符串。这将具有包装的效果,就像每个字符都是它自己的单词一样,但不向最终用户显示空格。这可能会导致您在最终产品上进行文本搜索或索引时出现问题,但它应该从审美角度可靠地完成任务。
因此:
testtestetstetstetstetstettstetstetstetstetstetstetstetstetstetstets
变为
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​s​t​e​t​s​t​e​t​s​t​e​t​s​t​e​t​s​t​e​t​s​t​e​t​s​t​e​t​s​t​e​t​s​t​e​t​s​t​e​t​s
(显示:“具体情况”吨式T(E T)吨式T(E T)式T(E T)式T(E T)式T(E T)s ^ T E吨式T(E T)式T(E T)式T(E T)式T(E T)式T(E T)的“)
因此,如果你将它包装起来,它将完全包裹到其容器的边界。的 Here's a fiddle of it as an example 强>
只需编写一个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]."​";
}
echo $new_string
这是一个特别好的解决方案,因为与wordwrap()
不同,它会自动调整非固定宽度字体(基本上是实际使用的字体的99%)。
同样,如果您需要生成可搜索的PDF,这不是一个好方法,但它会使看起来就像您想要的那样。
答案 3 :(得分:4)
在你的测试中,单词break不会起作用,因为单词break只能在特定句子中的单词之间起作用。所以你可以使用多个单词的句子然后尝试使用断字器
答案 4 :(得分:4)
您只需在代码中使用substr函数。 我举了一个例子。首先将输出放在变量中。
$get_value = "testtestetstetstetstetstettstetstetstet";
$first = substr("$get_value",0,3);
$second = substr("$get_value",4,7);
等等。
答案 5 :(得分:3)
您可以使用"\r\n"
打印换行符。确保使用双引号。如果您的字符串在变量中,那么您需要使用字数统计函数并附加此字符串。您还可以使用PHP_EOL
来避免平台依赖。
答案 6 :(得分:2)
html2pdf不支持这个单词分解:break-all css
答案 7 :(得分:0)
您可以使用此方法。
<?php
$get_value = "testtestetstetstetstetstettstetstetstet";
$first = substr("$get_value",0,3);
$second = substr("$get_value",4,7);
$third = substr("$get_value",8,11);
?>
答案 8 :(得分:0)
我想在HTML2PDF和表格中添加一些自己的经验。
我使用此解决方案生成PDF,其中包含一个充满交付确认(产品列表)的表格。此类列表最多可包含数千种产品(行)。
我在单元格中遇到格式化和长字符串问题。第一个问题是,即使我将表格的宽度设置为100%并且标题(<th>
)列的宽度(HTML2PDF不支持<colgroup>
,表格也变得太宽,所以我无法和#39;定义全局) - 某些列不在可见区域内。我使用wordwrap()
和<br />
作为分隔符来分解看起来像它正在工作的长字符串。不幸的是,事实证明,如果在第一行和最后一行中存在这么长的字符串,则整个表格 prepended 并且追加与空页面。不是一个真正的bugger,但也不好看。最终的解决方案是(适用于宽度可以超出可见区域的桌子):
wordwrap
中使用空格或​
/ \xe2\x80\x8b
作为分隔符对于您希望以100%的可见区域宽度进行传播的小型表格,可以使用%
中表示的宽度。
答案 9 :(得分:-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;
}