标签 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;">&nbsp;</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>