php pdf插件 dompdf 使用中的一点问题解决办法参考
中文乱码问题
1、下载类库语言安装脚本
https://github.com/dompdf/utils.git
2、将里面的load_font.php文件拷贝到dompdf根目录,和autoload.inc.php同级
3、下载一个宋体字体 simsun.ttf,也放到项目根目录,这时load_font.php和simsun.ttf应该在同一级目录
4、在根目录执行命令安装字体
php load_font.php simsun.ttf simsun 命令说明 php load_font.php 调用这个文件,并传入字体路径,字体名字
注意这一步,最后的simsun最好不要添加引号,看有一些例子写了引号,导致后面声明字体使用不上。
进入到这个目录:C:\wamp64\www\tp5\vendor\dompdf\dompdf\lib\fonts
找到这个文件:dompdf_font_family_cache.php
看下是否有以下这段,没有就添加上,有就最好。
中文换行问题
1、寻找到Text.php文件
我的目录:C:\wamp64\www\tp5\vendor\dompdf\dompdf\src\FrameReflower\Text.php
2、找到相关代码
// split the text into words
$words = preg_split('/([\s-]+)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
$wc = count($words);3、替换以上代码,或者注释掉以上代码,添加我们的代码。
preg_match_all("/./u", $text, $array);
$words = array(0);
$wc = count($words);4、小提示,可能因为版本的变迁,文件、代码位置不一样,大家最好使用目录全文搜索那一段代码,而不是直接去找那个文件。
页面设置问题
1、设置页面
//网上你可能看到很多这样的例子,我要竖着的看啊,坑。 $dompdf->setPaper('A4', 'landscape');//找了类库说明,发现还有一个参数,这下终于可以正常显示了。 $dompdf->setPaper('A4', 'portrait');2、为了更好将HTML转换成PDF,建议将HTML宽高设置成和A4大小接近,避免不必要的麻烦。个人还是要根据实际pdf显示情况来调节。
body {
margin: 0;
width: 820px;
height: 1160px;
}
表格table向下合并td后,再分页情况下第2页有接着分页就会乱了
这是由于使用了rowspan>1 的话,那下边的相应的行就必然少了一些td,如果分页dompdf就没有加以处理,导致下一页少了td造成,那我们就应该换一种思路,不要使用rowspan,可以通过边框border样式来达到合并格子的需求,只不过无法实现垂直居中了,不过效果还成:
.pure-table {
border-collapse: collapse;
border-spacing: 0;
empty-cells: show;
border-right: 1px solid #cbcbcb;
border-bottom: 1px solid #cbcbcb;
}
.pure-table td,.pure-table th{
border-left: 1px solid #cbcbcb;
border-top: 1px solid #cbcbcb;
}
<table class="pure-table pure-table-bordered pact-but" style="width: 800px;">
<thead>
<tr style="background-color: #ffff00;">
<th>分区</th>
<th>名称</th>
<th>数量</th>
<th>单位</th>
<th>备注</th>
</tr>
</thead>
<tbody>
<?php foreach ($hetong->fields['supplies'] as $zone => $items) :
foreach ($items as $k => $item) :
$_desc = zmf::mbChunkString($item['desc'], 20);
?>
<tr>
<?php if ($k == 0) : ?>
<td>
<span><?= $item['zone'] ?></span>
</td>
<?php else: ?>
<td style="border-top: 0;"> </td>
<?php endif ?>
<td><?= $item['title'] ?></td>
<td><?= $item['num'] ?></td>
<td><?= $item['unit'] ?></td>
<td>
<?php foreach ($_desc as $v):?>
<span style="display: block;"><?= $v ?></span>
<?php endforeach; ?>
</td>
</tr>
<?php endforeach; ?>
<?php endforeach; ?>
</tbody>
</table>