alek13 / gears-pdf
[`gears/pdf` 分支] 使用 HTML 或 DOCX 模板构建 PDF 的工具。
Requires
- php: ^5.6 || ^7.0
- gears/di: *
- gears/string: ^1.1
- jakoch/phantomjs-installer: 1.9.8
- symfony/filesystem: 2.* || 3.*
- symfony/process: 2.* || 3.*
Requires (Dev)
- codegyre/robo: *
- google/apiclient: 1.*
- guzzlehttp/guzzle: 4.*
- phpunit/phpunit: 4.*
- sgh/pdfbox: dev-master
- symfony/finder: 2.*
Suggests
- google/apiclient: Install to support the Google Docx Converter.
README
警告:这只是一个将 gears/pdf
移植到 php 7 的项目。(从 phpgearbox/pdf
分支而来)
寻找维护者,我现在几乎没有做 PHP 开发,我已经转向 dotnet core、node.js 和 golang。如果有人有兴趣接管这些项目,请与我联系 - brad@bjc.id.au
PS. 我知道这是最受欢迎的仓库之一,我知道有些人遇到一些问题。我现在使用 athenapdf 来处理所有的 PDF 生成需求。
PDF 齿轮
该项目最初是一个 DOCX 模板引擎。现在它已经发展到一个版本,可以使用无头版本的 webkit 和 phantomjs 将 HTML 转换为 PDF。
DOCX 模板非常适合需要客户在一段时间内更新和管理文档的情况,尤其是文本密集型文档。例如,我使用它来自动生成一些法律合同,其中对像姓名、公司名称和地址这样的属性进行简单替换。客户,一家保险公司,可以提供更新的模板 Word 文档,其中可能包含对政策和其他条件的细微变化。
HTML 到 PDF 引擎非常适合需要更多控制文档设计的案例。它对我们程序员来说也更自然,使用标准的 HTML 和 CSS,以及一些 JavaScript。
如何安装
通过 composer 安装很简单
composer require alek13/gears-pdf
您还需要将以下内容添加到您的根 composer.json
文件中。
"scripts":
{
"post-install-cmd": ["PhantomInstaller\\Installer::installPhantomJS"],
"post-update-cmd": ["PhantomInstaller\\Installer::installPhantomJS"]
}
DOCX:如果您打算使用 DOCX 模板,您需要安装 libre-office-headless 或 unoconv 在您的服务器上。
如何使用,基础教程
通过主 Pdf
类可以访问两个 API。
要将 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