You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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库。

步骤:

  1. 安装PDF依赖(以MPDF为例):
composer require mpdf/mpdf
  1. 替换原有代码的转换逻辑:
<?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:00:55