使用HTML或DOCX模板的PDF生成器。
Requires
- el-gitto-junior/string: ^0.6.1
- gears/di: *
- jakoch/phantomjs-installer: 1.9.8
- symfony/filesystem: ^3.3
- symfony/process: ^3.3
Requires (Dev)
- codegyre/robo: *
- google/apiclient: 1.*
- guzzlehttp/guzzle: 4.*
- phpunit/phpunit: 4.*
- sgh/pdfbox: dev-master
- symfony/finder: ^3.3
Suggests
- google/apiclient: Install to support the Google Docx Converter.
README
此项目最初是一个DOCX模板引擎。现在它已经发展到了也支持使用无头版本的 webkit 和 phantomjs 将HTML转换为PDF。
DOCX模板非常适合那些客户端需要随着时间的推移更新和管理文档的情况,尤其是文本密集型文档。例如,我使用它来自动生成一些法律合同,其中一些属性(如姓氏、公司名称和地址)会进行简单的替换。客户,一家保险公司,可以提供更新的模板Word文档,其中可能包含政策和其他条件的细微变化。
HTML到PDF引擎非常适合需要更多文档设计控制的场景。对我们程序员来说,使用标准的HTML、CSS和一点点JavaScript也更自然。
如何安装
通过composer安装很简单
composer require gears/pdf:*
您还需要将以下内容添加到您的根 composer.json
文件中。
"scripts":
{
"post-install-cmd": ["PhantomInstaller\\Installer::installPhantomJS"],
"post-update-cmd": ["PhantomInstaller\\Installer::installPhantomJS"]
}
DOCX:如果您打算使用DOCX模板,您需要在您的宿主机上安装libre-office-headless或unoconv。
如何使用,基础
两个API都通过主 Pdf
类访问。
将Word文档转换为PDF(无模板)
$pdf = Gears\Pdf::convert('/path/to/document.docx');
将生成的PDF保存到文件
Gears\Pdf::convert('/path/to/document.docx', '/path/to/document.pdf');
将HTML文档转换为PDF
$pdf = Gears\Pdf::convert('/path/to/document.html');
注意:保存到文件对HTML文档也适用。
DOCX模板
默认情况下,DOCX后端默认使用 libre-office-headless
,要使用 unoconv
,可以像这样覆盖转换器
$document = new Gears\Pdf('/path/to/document.docx'); $document->converter = function() { return new Gears\Pdf\Docx\Converter\Unoconv(); }; $document->save('/path/to/document.pdf');
注意:目前HTML后端仅使用phantomjs。
DOCX引擎有几种模板方法。第一种是setValue,它将所有 ${FOO}
的实例替换为 BAR
$document->setValue('FOO', 'BAR');
要克隆整个DOCX xml块,您可以将您的块包围在像 ${BLOCK_TO_CLONE}
& ${/BLOCK_TO_CLONE}
这样的标签中。此块中的所有内容将在生成的PDF中重复3次。
$document->cloneBlock('BLOCK_TO_CLONE', 3);
如果您需要用自定义的DOCX xml替换整个块,您可以这样做。但您需要确保您的XML符合DOCX标准。这是一个非常低级的方法,我通常不会使用它。
$document->replaceBlock('BLOCK_TO_REPLACE', '<docx><xml></xml></docx>');
要删除整个块,例如,您可能只想向特定用户显示文档的某些部分。
$document->deleteBlock('BLOCK_TO_DELETE');
最后一种方法对于向表格添加新行非常有用。类似于 cloneBlock
方法。您将标签放在表格的第一个单元格中。这是一行将克隆的行。
$document->cloneRow('ROW_TO_CLONE', 5);
有关更多示例,请参阅 单元测试。这些包含生成最终PDF所需的PHP代码以及原始DOCX模板。
注意:HTML到PDF转换器没有这些相同的模板功能。显然,这只是您可以根据需要模板化的标准HTML。
HTML PhantomJs 打印环境
这仍处于开发中,可能发生重大变化。因此,我目前不会记录这一部分...
致谢
DOCX模板代码最初来自 PHPWord
您可能仍然想使用PHPWord来生成您的DOCX文档。然后使用这个包将生成的文档转换为PDF。
由Brad Jones开发 - brad@bjc.id.au