phpword 模板使用

记录下项目中遇到的问题
应项目需求,需要将用户的数据生成word文档,最后找到了phpword,他可以通过事先设置好的模板生成相应的文档
效果

1.安装phpword

$ composer require phpoffice/phpword

2.准备一个 word 模板

3.在我们的控制器里编写代码

<?php

namespace App\Http\Controllers;

use PhpOffice\PhpWord\TemplateProcessor;
use PhpOffice\PhpWord\PhpWord;
use App\Http\Controllers\Controller;

class TestController extends Controller
{
    public function demo()
    {
        //实例化 phpword 类
        $PHPWord = new PhpWord();

        //指定事先制作好的模板文件路径
        $templateProcessor = new TemplateProcessor(public_path("Uploads/pdf/demo3.docx"));

        // 需要的数据
        $arr = [];
        $arr = [
            [
                'num' => 1,
                'add' => '临平1',
                'dec' => '描述1',
                'list' => [
                    ['list' => '未制定安全生产责任制,扣10分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣3分;未经责任人签字确认,扣100分'],
                ]
            ],
            [
                'num' => 2,
                'add' => '临平2',
                'dec' => '描述2',
                'list' => [
                    ['list' => '未制定安全生产责任制,扣4分;未经责任人签字确认,扣8分'],
                    ['list' => '未制定安全生产责任制,扣7分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣3分;未经责任人签字确认,扣200分'],
                ]
            ],
            [
                'num' => 3,
                'add' => '临平3',
                'dec' => '描述3',
                'list' => [
                    ['list' => '未制定安全生产责任制,扣10分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣9分;未经责任人签字确认,扣2分'],
                    ['list' => '未制定安全生产责任制,扣4分;未经责任人签字确认,扣8分'],
                    ['list' => '未制定安全生产责任制,扣7分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣3分;未经责任人签字确认,扣300分'],
                ]
            ],
        ];

        // 循环次数
        $count = count($arr);

            // 将 ${num} 所在行clone
            $templateProcessor->cloneRow('num', $count); //复制行

            foreach ($arr as $kk => $vv) {
                $list = '';
                for ($i = 0; $i < count($vv['list']); $i++) {
                    if ($i == (count($vv['list']) - 1)) {
                        $list = $list . ($i + 1) . ' .${list#' . ($kk + 1) . '#' . ($i + 1) . '}';
                    } else {
                        // <w:br/> 换行符
                        $list = $list . ($i + 1) . ' .${list#' . ($kk + 1) . '#' . ($i + 1) . '}<w:br/>';
                    }
                }
                $templateProcessor->setValue('list#' . ($kk + 1), $list);

            }

        // 保存新word文档
        $path = md5(time());
        if (!is_dir(public_path("Uploads/pdf"))) {
            mkdir(public_path("Uploads/pdf"), 0755, true);
        }
        // 将 word 文档保存至 你设置的路径
        $templateProcessor->saveAs(public_path("Uploads/pdf/" . md5(time()) . ".docx"));

    }
}

4.查看刚生成的文件

phpwprd 模板使用

5.将我们的数据填充进去

public function demo()
    {
        //实例化 phpword 类
        $PHPWord = new PhpWord();

        //指定模板文件
        $templateProcessor = new TemplateProcessor(public_path("Uploads/pdf/demo3.docx"));

        //通过setValue 方法给模板赋值
        $templateProcessor->setValue('project', "项目名称");

        $arr = [];
        $arr = [
            [
                'num' => 1,
                'add' => '临平1',
                'dec' => '描述1',
                'list' => [
                    ['list' => '未制定安全生产责任制,扣10分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣3分;未经责任人签字确认,扣100分'],
                ]
            ],
            [
                'num' => 2,
                'add' => '临平2',
                'dec' => '描述2',
                'list' => [
                    ['list' => '未制定安全生产责任制,扣4分;未经责任人签字确认,扣8分'],
                    ['list' => '未制定安全生产责任制,扣7分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣3分;未经责任人签字确认,扣200分'],
                ]
            ],
            [
                'num' => 3,
                'add' => '临平3',
                'dec' => '描述3',
                'list' => [
                    ['list' => '未制定安全生产责任制,扣10分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣9分;未经责任人签字确认,扣2分'],
                    ['list' => '未制定安全生产责任制,扣4分;未经责任人签字确认,扣8分'],
                    ['list' => '未制定安全生产责任制,扣7分;未经责任人签字确认,扣5分'],
                    ['list' => '未制定安全生产责任制,扣3分;未经责任人签字确认,扣300分'],
                ]
            ],


        ];

        // 循环次数
        $count = count($arr);
            // 第一层
            $templateProcessor->cloneRow('num', $count); //复制行

            foreach ($arr as $kk => $vv) {
                $list = '';
                for ($i = 0; $i < count($vv['list']); $i++) {
                    if ($i == (count($vv['list']) - 1)) {
                        $list = $list . ($i + 1) . ' .${list#' . ($kk + 1) . '#' . ($i + 1) . '}';
                    } else {
                        $list = $list . ($i + 1) . ' .${list#' . ($kk + 1) . '#' . ($i + 1) . '}<w:br/>';
                    }
                }
                $templateProcessor->setValue('list#' . ($kk + 1), $list);
            }
            foreach ($arr as $k => $v) {

                $templateProcessor->setValue('num#' . ($k + 1), $v['num']);
                $templateProcessor->setValue('add#' . ($k + 1), $v['add']);
                $templateProcessor->setValue('dec#' . ($k + 1), $v['dec']);

                for ($i = 0; $i < count($arr[$k]['list']); $i++) {
                    $templateProcessor->setValue('list#' . ($k + 1) . '#' . ($i + 1), $arr[$k]['list'][$i]['list']); //替换变量
                }
            }


        //保存新word文档
        $path = md5(time());
        if (!is_dir(public_path("Uploads/pdf"))) {
            mkdir(public_path("Uploads/pdf"), 0755, true);
        }
        $templateProcessor->saveAs(public_path("Uploads/pdf/" . md5(time()) . ".docx"));
    }

最终效果

phpwprd 模板使用

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 1个月前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
未填写
文章
1
粉丝
0
喜欢
12
收藏
1
排名:1699
访问:246
私信
所有博文