首页 > 解决方案 > 使用 Unoconv 将 docx 转换为 pdf 时出错

问题描述

我正在尝试使用 Unoconv 将 .docx 文件转换为 .pdf 文件。Libreoffice 安装在我的服务器上,该脚本适用于服务器上的另一个网站。

使用该行use Unoconv\Unoconv;会产生HTTP ERROR 500.

有人知道我为什么得到一个HTTP ERROR 500吗?

这是我的脚本:

<?php
    require './Unoconv.php';
    use Unoconv\Unoconv;
        
    $originFilePath = './uf/invoice/17/word/202100021.docx';
    $outputDirPath  = './uf/invoice/17/pdf/202100021.pdf';
    
    Unoconv::convertToPdf($originFilePath, $outputDirPath);

    header("Content-type:application/pdf");
    header("Content-Disposition:attachment;filename=202100021.pdf");
?>

这是我的 Unoconv.php 脚本:

<?php

namespace Unoconv;

class Unoconv {

    public static function convert($originFilePath, $outputDirPath, $toFormat)
    {
        $command = 'unoconv --format %s --output %s %s';
        $command = sprintf($command, $toFormat, $outputDirPath, $originFilePath);
        system($command, $output);

        return $output;
    }

    public static function convertToPdf($originFilePath, $outputDirPath)
    {
        return self::convert($originFilePath, $outputDirPath, 'pdf');
    }

    public static function convertToTxt($originFilePath, $outputDirPath)
    {
        return self::convert($originFilePath, $outputDirPath, 'txt');
    }

}
?>

标签: phplibreofficeunoconv

解决方案


从包装代码开始,try...catch首先获取错误消息:

<?php
try {
    require 'Unoconv.php';
    use Unoconv\Unoconv;
    
    $map1 = $_SESSION['companyid'];
    $filename = $result1['filename'];
    
    $originFilePath = './uf/doc/'.$map1.'/word/'.$filename.'.docx';
    $outputDirPath  = './uf/doc/'.$map1.'/pdf/'.$filename.'.pdf';
    
    Unoconv::convertToPdf($originFilePath, $outputDirPath);
    
    header("Content-type:application/pdf");
    header("Content-Disposition:attachment;filename=".$filename.".pdf");
    readfile($outputDirPath);
} catch (\Exception $e) {
    die($e->getMessage());
}

推荐阅读