enflow/document-replacer

修改docx模板并转换为PDF

3.2.0 2024-03-15 12:38 UTC

README

Latest Version on Packagist Software License Build Status Total Downloads

《enflow/document-replacer》包提供了一个简单的方法来修改docx模板、替换文本并保存。通过unoserver/unoconvert添加了将其导出为PDF的能力。

安装

您可以通过composer安装此包

composer require enflow/document-replacer

PDF转换

此包包含了一个使用unoserver将docx模板转换为PDF的实现。您可以使用以下命令在您的机器上全局安装:

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt install libreoffice
sudo pip install unoserver

转换器

强烈推荐使用新的unoconvert转换器。如果您无法升级,我们仍然暂时提供已废弃的UnoconvConverterUnoconvConverter已被废弃,将在3.0版本中删除。

服务器

Unoserver与unoconvert协同工作。Unoserver作为守护进程在服务器上运行,unoconvert通过它传递文件。要了解为什么这更有效,请参阅https://github.com/unoconv/unoserver/#overview

使用以下命令启动服务器:unoserver --daemon

建议使用如supervisord这样的服务器来设置此服务,不使用--daemon标志,以便在需要时自动重启进程。

使用方法

use Enflow\DocumentReplacer\DocumentReplacer;

DocumentReplacer::template('filename.docx')
    ->converter(UnoserverConverter::class)
    ->replace([
        '${user}' => 'Michel',
        '${address.city}' => 'Alphen aan den Rijn',
        '${company}' => 'Enflow',
    ])
    ->save('document.pdf');

图像

如果您想在文档中替换图像,可以将Image类传递给替换数组,如下所示:

use Enflow\DocumentReplacer\DocumentReplacer;
use Enflow\DocumentReplacer\ValueTypes\Image;

DocumentReplacer::template('filename.docx')
    ->converter(UnoconvConverter::class)
    ->replace([
        '${primary}' => Image::forPath('image.png'),
        '${second}' => Image::forBase64('iVBORw0KGgoA...'),
    ])
    ->save('document.pdf');

图像搜索模式模型可以是

  • ${search-image-pattern}
  • ${search-image-pattern:[width]:[height]:[ratio]}
  • ${search-image-pattern:[width]x[height]}
  • ${search-image-pattern:size=[width]x[height]}
  • ${search-image-pattern:width=[width]:height=[height]:ratio=false} 其中
  • [width]和[height]可以是纯数字或带有度量单位的数字,这些单位由Word支持(cm|mm|in|pt|pc|px|%|em|ex)
  • [ratio]仅用于false-f以关闭图像的宽高比。默认情况下,模板图像大小使用“容器”大小。

更多信息可以在PHPWord文档中找到

非默认服务器选项

在非默认选项(IP 127.0.0.1 / 端口 2002)上运行服务器?您可以将接口和端口传递给UnoserverConverter

DocumentReplacer::template('filename.docx')
    ->converter(UnoserverConverter::class, [
        'interface' => '192.168.0.1',
        'port' => 1533,
    ])

测试

$ composer test

贡献

请参阅CONTRIBUTING以获取详细信息。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件michel@enflow.nl联系,而不是使用问题跟踪器。

致谢

关于Enflow

Enflow是一家位于荷兰阿芬的数字创意代理机构。我们专注于开发Web应用程序、移动应用程序和网站。您可以在我们的网站上找到更多信息在这里

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件