PHP 基于模板动态生成 Word 文档:图片 + 表格数据填充全方案(PHPOffice 实战)

发布于:2025-07-10 ⋅ 阅读:(20) ⋅ 点赞:(0)

在企业级应用中,经常需要根据模板批量生成标准化 Word 文档(如合同、报表、证明等),且需支持文本替换、表格动态生成、图片插入等功能。本文基于 PHPOffice/PHPWord 库,通过封装工具函数 writeDocxByTemplate,实现「模板驱动 + 动态数据填充」的 Word 生成方案,适用于各类业务场景。

一、技术栈与核心依赖

核心库: PHPOffice/PHPWord(PHP 处理 Word 文档的主流库,支持模板替换、图片插入、表格操作等)
功能目标:

  • 文本内容批量替换
  • 动态生成表格(支持多行数据克隆)
  • 图片插入(支持模板占位符替换)
  • 兼容 .docx 格式模板

二、环境准备:安装 PHPWord

首先通过 Composer 安装 PHPOffice/PHPWord:

composer require phpoffice/phpword

注意:PHP 版本需 ≥ 7.1,且确保 php_zip、php_xml 等扩展已启用(处理 Word 文档依赖)。

三、核心实现:通用 Word 生成函数

封装 writeDocxByTemplate 函数,实现「文本 + 表格 + 图片」的一站式填充。函数逻辑如下:

1. 函数完整代码

/**
 * 根据 Word 模板生成文档(支持文本、表格、图片填充)
 * @param string $fileName 生成的文件名(含路径,如 'output.docx')
 * @param string $template 模板路径(如 'template.docx')
 * @param array $datas 填充数据(格式:['占位符' => '替换值' 或 数组/图片路径])
 * @return string 生成的文件路径
 */
function writeDocxByTemplate($fileName, $template, $datas)
{
   
    // 初始化模板处理器
    $templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor($template);
    
    foreach ($datas as $key => $value) {
   
        // 处理图片(键名以 'img' 开头,如 'imgLogo' 对应模板中的 ${Logo})
        if (substr($key, 0, 3) === 'img') {
   
            $placeholder = substr($key, 3); // 提取占位符(如 'Logo')
            if (!empty($value)) {
   
                // 插入图片(调用自定义图片处理函数)
                setWordImageValue($templateProcessor, $placeholder, $value);
            } else {
   
                // 图片为空时,用空格替换占位符(避免残留 ${xxx})
                $templateProcessor->setValue($placeholder, ' ');
            }
        } 
        // 处理数组(通常为表格数据,需要克隆行)
        elseif (is_array(

网站公告

今日签到

点亮在社区的每一天
去签到