Php Html2pdf不';t支持单词break:break all css

Php Html2pdf不';t支持单词break:break all css,php,word-wrap,html2pdf,word-break,Php,Word Wrap,Html2pdf,Word Break,我使用的是html2pdf,它不支持单词break:break-all css有什么想法吗 范例 <td style="width:30%;word-break:break-all ;"> testtestetstetstetstetstettstetstetstetstetstetstetstetstetstetstets </td> 测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测

我使用的是html2pdf,它不支持单词break:break-all css有什么想法吗

范例

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

测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试测试
输出pdf采用30%以上的宽度,如字符串长度大小

输出pdf:TestTestTestTetStetStetStetStetStetStetStetStetStetStetStetStetStetStetTetStetStetStetStetTets

我想要输出:


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

也就是说,我知道有一些东西可以用:PHP。因此,与其
echo$yourvar
您可以使用
echo wordwrap($yourvar,75,“\n”,true)
来代替,它将始终剪切字符串,即使它只是一个长字符串。要使字符数与您要查找的宽度相匹配,需要进行一些修改,但这是可行的

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

您可以使用
“\r\n”
打印换行符。确保使用双引号。如果字符串在变量中,则需要使用单词计数函数并附加此字符串。您还可以使用
PHP_EOL
来避免平台依赖性。

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

因此:

变成

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​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)

因此,如果将其包装,它将完全包装到其容器的边界

只需编写一个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
$string=“testtestesttetstetstetstetstetstetstetstetstetstetstets”;
$new_string=“”;

对于($i=0;$i在您的测试中,单词break将不起作用,因为单词break只在特定句子中的单词之间起作用。因此,您可以使用多单词句子,然后尝试使用单词break,您只需在代码中使用substr函数即可。 我举了一个例子,首先把输出放在变量中

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

试试这个

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

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

不是
wordbreak
而是
wordwrap

您可以使用此方法

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


html2pdf不支持此单词break:break all css


参考:

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

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

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

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

我在单元格中遇到了格式和长字符串问题。第一个问题是,即使我将表格的宽度设置为100%,并且将标题(
)列的宽度设置为100%,表格也变得太宽了(HTML2PDF不支持
,因此我无法全局定义它)-一些列超出了可见区域。我使用了
wordwrap()
使用

作为分隔符来分解长字符串,看起来它正在工作。不幸的是,如果在第一行和最后一行中有这么长的字符串,那么整个表都被添加了前缀并附加了空页。这不是一个真正的错误,但看起来也不太好。最终的解决方案是(适用于宽度可能超出可见区域的桌子):

  • 设置表格和每行的固定宽度(以像素为单位)
    • 对于A4大小的字母,我使用的是550像素的总宽度和默认边距,但您必须在各列之间分配宽度
  • wordwrap
    中,使用空格或
    ​;
    /
    \xe2\x80\x8b
    作为分隔符

对于希望以100%可见区域宽度分布的小表,可以使用以
%

表示的宽度,为什么不计算字符数?您是否尝试过实际内容?它可能比修复生产中不太可能发生的问题更适合您。由于html2pdf的渲染问题,我们使用了因为它使用webkit呈现引擎。通过这种方式,我们创建了25pp以上的PDF报告。wkhtml还支持某种分页符的功能,您可以将内容保留在同一页面上,分页符位于:avoid;@srini迁移到wkhtmltopdf或phantomjs可能是最好的主意;)这都是动态内容,就像用户输入的名字一样lastname@srini那么?你仍然可以使用wordwrap来实现你的目标。事实上,使用
wordwrap
是HTML2PDF这些天的唯一方法…遗憾的是我没有使用mPDF…不过有一个警告-换行符必须是HTML的

wordwrap($string,$length,“
”);
。这是不可能的。我想你的html页面没有表标记。你可以设置td而不是div。我知道这是只工作的html页面,而不是html2pdf
<?php
$get_value = "testtestetstetstetstetstettstetstetstet";
$first = substr("$get_value",0,3);
$second = substr("$get_value",4,7);
$third = substr("$get_value",8,11);
?>
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;
    }