文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

thinkphp5使用phpword生成固定模板

2023-10-06 10:02

关注
  1. 所需工具 composer2:官网下载下来安装即可

2.所需依赖 在thinkphp5的项目根目录下运行安装命令:

composer require phpoffice/phpword

然后再package.json的require中即可看到:"phpoffice/phpword": "^1.0"

3.参考网站 phpword的官方手册:https://phpword.readthedocs.io/en/latest/templates-processing.html 4.准备测试模板.word,如下图所示,分为三个区域,普通文字区域、表格区域、图片区域用${}来标识

5.封装phpword测试代码:

_save_path = $params['save_path'];        }    }    public function generateWordByTemplate($template_path, $params)    {        try {            $phpword = new PhpWord();            $document = new TemplateProcessor($template_path);                        $document->setValue('name', $params['name']);            $replacements = array(                array('a' => 'Batman', 'b' => 'Gotham City', 'c' => 'c', 'd' => 'd', 'e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i', 'j' => 'j', 'k' => 'k', 'l' => 'l'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),                array('a' => 'Superman1', 'b' => 'Metropolis', 'c' => 'cc', 'd' => 'dd', 'e' => 'ee', 'f' => 'ff', 'g' => 'gg', 'h' => 'hh', 'i' => 'ii', 'j' => 'jj', 'k' => 'kk', 'l' => 'll'),            );            //$document->cloneBlock('blockname', 0, true, false, $replacements);            $document->cloneRowAndSetValues('a', $replacements);            $document->setImageValue('pic', $params['img']);            $document->saveAs($this->_save_path);        } catch (\Exception $e) {            throw new \Exception($e->getMessage());        }    }}

调用Pword代码:

public function test_generate()    {        try {            $root_path = $_SERVER['DOCUMENT_ROOT'];            $relative_path = '/static/download/files/test_generate/'.date('Ymd').'/';            if (!is_dir($root_path.$relative_path)) {                mkdir($root_path.$relative_path, 0777, true);            }            $relative_path .= 'report_test_'.date('Ymd').'.docx';            $word = new \Custom\Pword(['save_path' => $root_path.$relative_path]);            $image_path = $root_path.'/static/upload/images/extract/20221121/f1ce8b962b50d49251e935cd2678f7dd.png';            $image_size = getimagesize($image_path);            //表格的数据库直接放在了Pword中进行了测试,后续真中用的时候需要在逻辑层进行传参            //插入的图片进行了宽度的约束,防止图片插入过大而显示不全,高度会自动缩放,所以不用指定            $word->generateWordByTemplate($root_path.'/static/dna_template.docx',                     ['name' => '测试123',                     'img' => [ 'path' => $image_path,'width'=> $image_size[0] < 600 ? $image_size[0] : 600, 'height' => $image_size[1]],                ]            );                        echo $relative_path;        } catch (\Exception $e) {            throw new \Exception($e->getMessage());        }    }

6.最终的生成word文档为,截图两部分,图片为黑色的,请见谅:

如果在安装phpword中存在问题,可以看我相关文章查看

来源地址:https://blog.csdn.net/zhouyonggo/article/details/129662134

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯