当前位置: 首页 > wzjs >正文

中国搜索提交网站wordpress自定义页面分页

中国搜索提交网站,wordpress自定义页面分页,网站建设平台 汉龙,演讲介绍自己做的网页在企业级应用中,经常需要根据模板批量生成标准化 Word 文档(如合同、报表、证明等),且需支持文本替换、表格动态生成、图片插入等功能。本文基于 PHPOffice/PHPWord 库,通过封装工具函数 writeDocxByTemplate&#xff…

在企业级应用中,经常需要根据模板批量生成标准化 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($value)) {// 克隆行:$key 为模板中的行标识(如 'product'),克隆次数为数组长度$templateProcessor->cloneRow($key, count($value));// 遍历行数据,替换每行的占位符foreach ($value as $rowIndex => $rowData) {$rowNumber = $rowIndex + 1; // 行号从 1 开始(PHPWord 规则)foreach ($rowData as $macro => $replace) {// 处理行内图片(如 'imgProduct' 对应模板中的 ${Product#1})if (substr($macro, 0, 3) === 'img') {$placeholder = substr($macro, 3) . '#' . $rowNumber;if (!empty($replace)) {setWordImageValue($templateProcessor, $placeholder, $replace);} else {$templateProcessor->setValue($placeholder, ' ');}} // 处理行内文本(如 'productName' 对应模板中的 ${productName#1})else {$placeholder = $macro . '#' . $rowNumber;$templateProcessor->setValue($placeholder, $replace ?? ' ');}}}} // 处理普通文本(直接替换占位符)elseif (is_scalar($value)) {$templateProcessor->setValue($key, $value);}}// 保存生成的文档$templateProcessor->saveAs($fileName);return $fileName;
}/*** 向 Word 模板插入图片(封装图片处理细节)* @param \PhpOffice\PhpWord\TemplateProcessor $templateProcessor 模板处理器* @param string $placeholder 图片占位符(如 'Logo',对应模板中的 ${Logo})* @param string $imagePath 图片路径(支持本地路径或 URL)* @param array $options 图片选项(宽、高,可选)*/
function setWordImageValue($templateProcessor, $placeholder, $imagePath, $options = [])
{// 图片默认尺寸(可根据需求调整)$width = $options['width'] ?? 150; // 宽度(像素)$height = $options['height'] ?? null; // 高度(null 表示按比例缩放)// 检查图片是否存在if (!file_exists($imagePath)) {throw new \Exception("图片不存在:{$imagePath}");}// 获取图片信息(类型、尺寸)$imageInfo = getimagesize($imagePath);$imageType = $imageInfo[2] === IMAGETYPE_PNG ? 'image/png' : 'image/jpeg';// 替换模板中的图片占位符$templateProcessor->setImageValue($placeholder,['path' => $imagePath,'type' => $imageType,'width' => $width,'height' => $height,]);
}

2. 函数核心逻辑解析

函数通过遍历 $datas 数组,根据数据类型(文本 / 数组 / 图片)执行不同操作:

  • 文本替换: 直接调用 setValue 替换模板中的 ${占位符};
  • 图片插入: 识别键名以 img 开头的数据(如 ‘imgLogo’ => ‘logo.png’),通过 setImageValue 替换图片占位符;
  • 表格生成: 当数据为数组时,调用 cloneRow 克隆模板中的表格行,再按行号(#1、#2)替换每行数据。

四、模板设计规范

模板文件(.docx)需按以下规则设置占位符,确保数据正确填充:

1. 文本占位符

在 Word 模板中直接输入 ${占位符},如:

标题:${Title}
公司:${Company}
生成日期:${Date}

2. 图片占位符

图片占位符与文本类似,使用 ${图片标识},但需在模板中预留图片位置(可插入一张空白图片作为占位,或直接输入 ${Logo} 文本)。

3. 表格占位符(动态行)

表格需按「一行模板」设计,通过 cloneRow 动态生成多行:

  1. 表格行的「标识占位符」:如 ${Product}(作为整行的克隆标识);
  2. 行内单元格占位符:需包含行号占位符 #,如 KaTeX parse error: Expected '}', got '#' at position 13: {ProductName#̲}、{Price#}(实际填充时会替换为 #1、#2)。

示例表格模板:

产品名称单价数量金额
${ProductName#}${Price#}${Qty#}${Total#}
${Product}

五、使用示例:生成带图片和表格的合同

以下示例演示如何使用 writeDocxByTemplate 生成一份包含公司 logo、产品表格的合同文档。

1. 准备数据

$datas = [// 文本数据'Title' => '产品采购合同','Company' => 'XX科技有限公司','Date' => date('Y年m月d日'),'TotalAmount' => '¥25,000.00',// 图片数据(键名以 'img' 开头)'imgLogo' => 'static/logo.png', // 公司logo'imgSignature' => 'static/signature.png', // 签名图片// 表格数据(数组形式,对应模板中的 ${Product} 行)'Product' => [['ProductName#' => '笔记本电脑','Price#' => '5,000.00','Qty#' => 2,'Total#' => '10,000.00','imgProduct#' => 'static/laptop.png' // 行内图片],['ProductName#' => '打印机','Price#' => '3,000.00','Qty#' => 5,'Total#' => '15,000.00','imgProduct#' => 'static/printer.png']]
];

2. 调用函数生成文档

// 模板路径
$template = 'templates/contract_template.docx';
// 生成的文件名
$outputFile = 'output/contract_' . date('Ymd') . '.docx';// 生成文档
try {$result = writeDocxByTemplate($outputFile, $template, $datas);echo "文档生成成功:{$result}";
} catch (Exception $e) {echo "生成失败:{$e->getMessage()}";
}

3. 效果展示

生成的 Word 文档会自动替换:

  • 文本占位符为实际数据;
  • 图片占位符为指定图片;
  • 表格行根据数组长度动态生成,每行填充对应数据。

五、常见问题与解决方案

1. 占位符未替换

  • 检查 $datas 中的键名是否与模板占位符一致(区分大小写);
  • 确保模板中的占位符格式正确(${占位符},注意英文大括号)。

2. 图片不显示或变形

  • 图片路径需为绝对路径或相对于脚本的相对路径;
  • 通过 setWordImageValue 的 $options 参数指定宽高(如 [‘width’ => 200]);
  • 避免使用过大的图片(建议压缩至 1MB 以内)。

3. 表格行克隆后格式错乱

  • 模板表格需保持「一行模板」,避免合并单元格(复杂表格可能导致克隆异常);
  • 行内占位符必须包含 #(如 ${Name#}),否则无法按行替换。

4. 中文乱码

  • 确保模板使用支持中文的字体(如「微软雅黑」「宋体」);
  • PHP 脚本编码为 UTF-8(避免数据本身乱码)。

六、扩展场景

  • 多模板支持:根据业务类型动态选择模板(如 $template = $type == 1 ? ‘template1.docx’ : ‘template2.docx’);
  • 页眉页脚动态设置

文章转载自:

http://YtUTy3v2.bqdpy.cn
http://vjNWO08b.bqdpy.cn
http://jjxQ0DiF.bqdpy.cn
http://yh8690Li.bqdpy.cn
http://2FbVy8Js.bqdpy.cn
http://7OQbDR5s.bqdpy.cn
http://BCN6SP10.bqdpy.cn
http://eMTuZcyk.bqdpy.cn
http://BsS4obZr.bqdpy.cn
http://lnc77Vii.bqdpy.cn
http://rNzaisOD.bqdpy.cn
http://JZ8ztlup.bqdpy.cn
http://C1GIQI83.bqdpy.cn
http://Xsa2TicG.bqdpy.cn
http://MT6i3GyA.bqdpy.cn
http://kcn6Zgve.bqdpy.cn
http://ANJnnkUR.bqdpy.cn
http://apNkjciq.bqdpy.cn
http://NOUNPF7A.bqdpy.cn
http://UnpM5Rmh.bqdpy.cn
http://SIA3xbxV.bqdpy.cn
http://F2ixC5X6.bqdpy.cn
http://f1r6gcd3.bqdpy.cn
http://0EFi2DJX.bqdpy.cn
http://ouri1pdm.bqdpy.cn
http://pc75qAzb.bqdpy.cn
http://8iDEriOK.bqdpy.cn
http://7GUaCaPo.bqdpy.cn
http://oHt2lCdH.bqdpy.cn
http://XEfDIjxi.bqdpy.cn
http://www.dtcms.com/wzjs/706824.html

相关文章:

  • 济南网站推广优化哈尔滨制作网站价格
  • 如何制作页设计wordpress插件检测seo是否合理
  • 做网站客户需要提供的资料wordpress编辑器段间距
  • 各电商网站的特点商标查询天眼查
  • 网站运营主管是干什么的表情包制作在线生成器
  • 做个网站成本外贸网站有哪些
  • 购物网站如何备案外贸网站系统
  • 贵州省兴义市建设局网站wordpress怎么获取数据库名
  • 网站是什么程序做的品牌宣传型网站
  • 柳州市诚信体系建设网站百度验证网站所有权
  • 好网站建设公司哪里好iis的默认网站没有自动启动
  • 网站设计精美案例上海企业网站设计制作
  • 一学一做看视频网站有哪些国际十大公关公司
  • 网站伪静态文件软件开发者平台有哪些
  • 教做西餐的网站ipad wordpress 应用
  • 毕节市网站建设做化工的外贸网站都有什么地方
  • 贵州城乡住房和建设厅网站国外好看的网站设计
  • 域名到期对网站的影响wordpress 换数据库
  • 网站建设字体变色代码智慧政务门户网站建设方案
  • wordpress 仿站小工具粤健康app下载
  • 好站站网站建设餐饮业网站建设
  • 网站设计和建设帮忙卖货的平台
  • 做苗木网站哪家做得好wordpress 主题显示图片
  • 大连三合一网站制作网页设计实验报告总结与展望
  • 如何作网站做技能培训和那个网站合作好
  • 浙江 网站建设做请帖网站
  • 网站挂马检测流程图江苏省建设考试网站准考证打印
  • 企业计划书网站关键词优化推广哪家快
  • 招标网址网站大全万户网络app
  • 网站建设合同百度文库公司起名用字大全