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

使用PHP+LibreOffice+ncjoes/office-converter转换文件报错求助

错误根因

你遇到的报错本质是$this->converter属性未被初始化,为null值时调用了成员方法导致的。之所以这个属性没初始化,是因为你直接手动实例化了继承自PHPUnit TestCase的测试类,并且直接调用测试方法:

setUp()是PHPUnit框架的约定方法,只有通过PHPUnit命令行工具运行测试用例时,框架才会自动在每个测试方法执行前调用setUp(),你手动new测试类后直接调用测试方法,setUp()全程没有执行,所以$this->converter没有被赋值。

解决方案

方案1:按PHPUnit规范运行测试(适合调试测试用例)

不要直接运行这个PHP文件,在项目根目录执行命令调用PHPUnit运行测试即可:

./vendor/bin/phpunit converter.php

这种情况下PHPUnit会自动触发setUp()执行,完成$converter属性的初始化。

方案2:改写代码脱离PHPUnit依赖(适合实际业务使用)

如果你只是要实现文档转换功能,不需要继承PHPUnit测试类,直接写业务逻辑即可,参考代码如下:

<?php
if (!file_exists(__DIR__.'/vendor/autoload.php')) {
    echo 'autoload.php 不存在!';
    exit;
}
require __DIR__.'/vendor/autoload.php';

use NcJoes\OfficeConverter\OfficeConverter;

$DS = DIRECTORY_SEPARATOR;
$file = __DIR__."{$DS}sources{$DS}test.docx";
$outDir = __DIR__."{$DS}results";
// 提前确认output目录存在且有读写权限,LibreOffice运行也需要对应目录权限
if (!is_dir($outDir)) {
    mkdir($outDir, 0777, true);
}

$converter = new OfficeConverter($file, $outDir);
// 转换为PDF
$outputPdf = $converter->convertTo('result.pdf');
var_dump('PDF转换完成,文件路径:'.$outputPdf);
// 转换为HTML
$outputHtml = $converter->convertTo('result.html');
var_dump('HTML转换完成,文件路径:'.$outputHtml);

额外注意事项

  • 确认你的LibreOffice安装路径已经加入Windows系统环境变量PATH,或者在初始化OfficeConverter时手动指定LibreOffice的可执行文件路径:
    // 示例,替换为你实际的LibreOffice安装路径下soffice.exe的路径
    $converter = new OfficeConverter($file, $outDir, 'C:\Program Files\LibreOffice\program\soffice.exe');
    
  • 确认sources/test.docx文件真实存在,results目录有PHP进程的读写权限。

内容的提问来源于stack exchange,提问作者Huseyin Telli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:48:04