PHP代码报错求助:BadMethodCallException问题解决方案
问题修复方案
1. 解决createtemplate方法未定义错误
你遇到的报错核心是方法名拼写/版本不匹配:
- PHP是大小写敏感的,PHPWord中模板加载方法为驼峰命名:旧版本(≤0.13)用
createTemplate(),新版本(≥0.14)用loadTemplate(),全小写的createtemplate是无效的。 - 若你贴的代码是正确的,但报错显示调用了
createtemplate,说明实际运行的代码存在拼写错误,修正为对应版本的驼峰方法名即可。
版本匹配修正:
- 查看PHPWord版本:执行
composer show phpoffice/phpword - 版本≥0.14时用:
$document = $PHPWord->loadTemplate($wordFile);
- 版本≤0.13时用:
$document = $PHPWord->createTemplate($wordFile);
2. 修正Word转PDF的错误逻辑
你当前代码里用TemplateProcessor->saveAs()生成PDF是行不通的——这个方法只能输出Word格式。要转PDF,必须用PHPWord的IOFactory配合第三方PDF库。
步骤:
- 安装PDF依赖(以MPDF为例):
composer require mpdf/mpdf
- 替换原有代码的转换逻辑:
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 先验证上传状态 if ($_FILES['word-file']['error'] !== UPLOAD_ERR_OK) { echo '<p>文件上传失败,请重试。</p>'; exit; } $wordFile = $_FILES['word-file']['tmp_name']; require_once 'vendor/autoload.php'; // 直接加载Word文档,无需手动实例化PhpWord $phpWord = \PhpOffice\PhpWord\IOFactory::load($wordFile); // 创建PDF写入器并保存 $pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'PDF'); $pdfWriter->save('converted.pdf'); echo '<p>Word文档已转成PDF:<a href="converted.pdf" target="_blank">点击查看</a></p>'; } ?>
额外注意点
- 确保上传的是
.docx格式(PHPWord对.doc支持有限) - 检查当前目录的写入权限,保证脚本能生成PDF文件
- 若版本兼容问题持续,锁定稳定版本:
composer require phpoffice/phpword:0.18.3
内容的提问来源于stack exchange,提问作者Music Style
相关产品推荐
相关产品推荐

