enflow / document-replacer
修改docx模板并转换为PDF
Requires
- php: ^8.2
- phpoffice/phpword: ^0.18.2|^1.0
- symfony/process: ^6.0|^7.0
Requires (Dev)
- laravel/pint: ^1.0
- phpunit/phpunit: ^10.5|^11.0
This package is auto-updated.
Last update: 2024-09-08 23:00:44 UTC
README
《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转换器。如果您无法升级,我们仍然暂时提供已废弃的UnoconvConverter。 UnoconvConverter已被废弃,将在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)。有关更多信息,请参阅许可证文件。