使用 unoconv 转换时,docx 文件中显示的图像在 pdf 中不可见

问题描述 投票:0回答:1

使用 unoconv 转换时,docx 文件中显示的图像在 pdf 中不可见,而图像使用

显示
$document = new \PhpOffice\PhpWord1\TemplateProcessor($docx_temp_file_path);
$imagePath = '/abc.png';
if (file_exists($imagePath)) {
    $document->setImageValue($key, $imagePath);
}

这是unoconv代码

public function docxToPdf( $docx_file_path, $pdf_file_path )
{
    $pythonPath = '/usr/bin/python';
    $unoconvPath = '/usr/bin/unoconv';
    $command = sprintf(
        '"%s" "%s" -f pdf "%s" 2>&1', 
        $pythonPath,
        $unoconvPath,
        $docx_file_path
    );

    exec($command, $output, $return);
    //
    if (is_array($output) && !empty($output[0])) {
        throw new Exception(json_encode(implode('; ', $output), true));
    }
    return true;
}

这里附上 docx 文件的示例链接docx 文件

php pdf docx phpword unoconv
1个回答
0
投票

您的 Word 文档页脚中包含 3 个图像。 footer1.xml 文件包含以下内容:

<w:pict><v:shape type="#_x0000_t75" style="width:;height:70px" stroked="f"><v:imagedata r:id="rId1" o:title=""/></v:shape></w:pict>
<w:pict><v:shape type="#_x0000_t75" style="width:;height:70px" stroked="f"><v:imagedata r:id="rId3" o:title=""/></v:shape></w:pict>
<w:pict><v:shape type="#_x0000_t75" style="width:;height:70px" stroked="f"><v:imagedata r:id="rId2" o:title=""/></v:shape></w:pict>

所有图片都有这种风格:

width:;height:70px

如您所见,宽度缺失。在这种情况下,Word 使用默认值,但 LibreOffice 不显示图像。 由于 unoconv 使用 LibreOffice 转换为 PDF,因此生成的文档中缺少图像。

我可以通过在模板中指定来重现该问题:

${key::70:false}

您可以通过指定宽度来修复它:

${key:70:70:false}

或者通过删除比率参数:

${key::70}
© www.soinside.com 2019 - 2024. All rights reserved.