使用 PHP LibreOffice 和 ncjoes/office-converter 库转换文件

Posted

技术标签:

【中文标题】使用 PHP LibreOffice 和 ncjoes/office-converter 库转换文件【英文标题】:Converting files using PHP LibreOffice and the ncjoes/office-converter library 【发布时间】:2021-11-14 07:38:10 【问题描述】:

我使用 ampps 作为 Windows 10 apache 服务器,我的 php 版本是 7.3。我从 LibreOffice 下载页面下载了它并安装在我的电脑上。然后我通过作曲家https://github.com/ncjoes/office-converter 安装了这个库。我按照给出的示例进行尝试,但它不会转换并给出错误。如果您能在我错的地方帮助我,我将不胜感激。这是我的代码示例和遇到的错误:

<?php
if (!file_exists(__DIR__.'/vendor/autoload.php')) echo 'autoload.php mevcut değil!';
else require __DIR__.'/vendor/autoload.php';

use NcJoes\OfficeConverter\OfficeConverter;
use PHPUnit\Framework\TestCase;

class OfficeConverterTest extends TestCase

    /**
     * @var OfficeConverter $converter
     */
    private $converter;
    private $outDir;

    public function setUp()
    
        parent::setUp();

        $DS = DIRECTORY_SEPARATOR;
        $file = __DIR__."$DSsources$DStest.docx";
        $this->outDir = __DIR__."$DSresults";

        $this->converter = new OfficeConverter($file, $this->outDir);
    

    public function testDocxToPdfConversion()
    
        $output = $this->converter->convertTo('result.pdf');

        $this->assertFileExists($output);
    

    public function testDocxTohtmlConversion()
    
        $output = $this->converter->convertTo('result.html');

        $this->assertFileExists($output);
    


$donustur = new OfficeConverterTest();
$donustur->testDocxToPdfConversion();
?>

Fatal error: Uncaught Error: Call to a member function convertTo() on null in C:\Program Files\Ampps\www\converter\converter.php:29 Stack trace: #0 C:\Program Files\Ampps\www\converter\converter.php(43): OfficeConverterTest-&gt;testDocxToPdfConversion() #1 main thrown in C:\Program Files\Ampps\www\converter\converter.php on line 29

【问题讨论】:

【参考方案1】:

在运行测试时,我们应该将它们留给phpunit,但您正在尝试手动调用(在代码的最后两行)。

但是如果你坚持手动调用,那就改:

$donustur = new OfficeConverterTest();
$donustur->testDocxToPdfConversion();

进入:

$donustur = new OfficeConverterTest();
$donustur->setUp();
$donustur->testDocxToPdfConversion();

这样您就可以呼叫setUp(),而phpunit 通常会自动呼叫您。

另请参阅: How do I run all my PHPUnit tests?How to run single test method with phpunit?

页面示例

如果你想在网页上使用这个逻辑,它应该看起来像:

<?php
if (!file_exists(__DIR__.'/vendor/autoload.php')) echo 'autoload.php mevcut değil!';
else require __DIR__.'/vendor/autoload.php';

use NcJoes\OfficeConverter\OfficeConverter;

echo 'Converting...<br>';

$input = __DIR__ . '/test.docx';
$converter = new OfficeConverter($input, __DIR__.'/results');
$output = $converter->convertTo('result.pdf');

echo 'Saved at:' . $output . '<br>';

【讨论】:

//$donustur= new OfficeConverterTest(); //$donustur->testDocxToPdfConversion();我注释掉了代码,但是当我刷新页面时,我看到一个空白页面。当我检查结果文件夹时,它是空的,所以它没有转换。 @HuseyinTelli 该代码用于使用 PHPUnit 进行测试,而不是用于放置页面(并且始终转换相同的 test.docx 文件),仅复制您需要的逻辑(参见我的示例)。跨度> 非常感谢您提供的示例。但是,我收到一个错误。所以,如果你有知识,你能帮我解决我遇到的错误吗? 致命错误:未捕获的 NcJoes\OfficeConverter\OfficeConverterException:转换失败!联系服务器管理员。在 C:\Program Files\Ampps\www\converter\vendor\ncjoes\office-converter\src\OfficeConverter\OfficeConverter.php:54 堆栈跟踪:#0 C:\Program Files\Ampps\www\converter\converter.php (11): NcJoes\OfficeConverter\OfficeConverter->convertTo('result.pdf') #1 main 在 C:\Program Files\Ampps\www\converter\vendor\ncjoes\office-converter\src\OfficeConverter\第 54 行的 OfficeConverter.php @HuseyinTelli 确保输入文件和目标目录都存在,如果错误仍然发生,您需要阅读它的代码,因为“联系服务器管理员”信息不多。

以上是关于使用 PHP LibreOffice 和 ncjoes/office-converter 库转换文件的主要内容,如果未能解决你的问题,请参考以下文章

PHP 如何插入嵌套元素 Libreoffice 样式

Libreoffice php使用命令行office转pdf,pdf转图片

在 Windows PHP exec() 上运行(生成 PDF)soffice LibreOffice 不起作用

Libreoffice 无法在 php 运行时启动

PHP word PDF excel 文档互转 预览 (linux libreoffice)

Libreoffice shell_exec 在 PHP 脚本中失败