利用PHPWord库加载带公司信头的.docx模板,通过预设占位符替换,将MySQL数据库中的记录动态写入Word文档。该方法避免了传统拼接HTML导致的格式错误与文件损坏,实现了安全可靠、规范高效的文档自动化输出,适用于批量生成合同、报告等场景。
先说一个残酷的现实:如果你还在用 echo 往 .doc 文件里拼 HTML,想当然地以为 Word 能识别——趁早停手。这条路从根上就走不通。传统 .doc 是二进制格式,而现代 .docx 是个 ZIP 压缩包,里面是一堆 XML 文档,结构完全不同。你那种 readfile("test.doc") 输出原始二进制流,再强行拼接 HTML 字符串,文件结构直接崩溃,Word 打不开,或者打开一片空白——这不是偶然,是必然。
那怎么办?真正靠谱的做法,是转向 OOXML 标准,用成熟的库来操作 .docx 模板。这就绕不开 PHPWord(推荐 v1.2+)。它专为生成和修改 Office Open XML 文档设计,支持模板变量替换、保留样式、处理表格图片页眉页脚……公司信头这种复杂模板,正好在它的能力范围内。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
准备模板:把 Word 模板另存为 .docx(千万别再用 .doc)。在需要填充数据的地方插入占位符,例如 {{NAME}}、{{EMAIL}}。建议用双大括号,避免与 XML 底层标记冲突。
安装 PHPWord:用 Composer 一步到位。
composer require phpoffice/phpword
PHP 填充逻辑——这才是核心,既安全又可扩展。
getSections()[0];
$textElements = $section->getElements();
// 更健壮的方式:使用 TemplateProcessor(推荐)
$template = new PhpOffice\PhpWord\TemplateProcessor($templatePath);
$template->setValue('NAME', htmlspecialchars($_POST['name'], ENT_XML1, 'UTF-8'));
$template->setValue('EMAIL', htmlspecialchars($_POST['email'], ENT_XML1, 'UTF-8'));
// 3. 设置响应头(关键:Content-Type 必须匹配 .docx)
ob_end_clean();
header('Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment; filename="letter_' . date('Y-m-d_H-i-s') . '.docx"');
header('Cache-Control: max-age=0');
header('Pragma: public');
header('Expires: 0');
// 4. 输出生成的文档流
$template->saveAs('php://output');
exit;
}
?>{{KEY}} 或 KEY(取决于你调用 setValue() 的方式),不能有空格或特殊字符。$_POST['name'] 务必调用 htmlspecialchars(..., ENT_XML1),否则 XML 注入分分钟崩掉文档。php://output 无需写入权限,放心用。cloneRow)、图片插入、页眉页脚、自定义字体——所有模板原有样式,包括公司信头,都会被完整继承。别再抱着“HTML 拼接 .doc”的旧思路不放了。基于 OOXML 标准、用 PHPWord 操作 .docx 模板,是目前实现专业级 Word 文档自动生成唯一稳健的方案。它不光是解决了兼容性问题,更重要的是保证了样式、信头、布局零丢失,同时也兼顾了安全性和可维护性。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述