nazrulwazir / pdf
使用HTML或DOCX模板构建PDF的工具。
Requires
- gears/di: *
- gears/string: *
- google/apiclient: 1.*
- jakoch/phantomjs-installer: 1.9.8
- symfony/filesystem: 2.*
- symfony/process: 2.*
Requires (Dev)
- codegyre/robo: *
- guzzlehttp/guzzle: 4.*
- phpunit/phpunit: 4.*
- sgh/pdfbox: dev-master
README
正在寻找维护者,我现在几乎不再进行PHP开发,我已经转向其他方向,现在主要工作在dotnet core、node.js和golang。如果有任何人对接管这些项目感兴趣,请联系我 - brad@bjc.id.au
PS. 我知道这是一个比较受欢迎的仓库,我知道有些人对它有一些问题。我现在用athenapdf来满足我所有的PDF生成需求。
The Pdf Gear
这个项目最初是一个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
类访问。
将文档转换为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