alex-oliveira / ao-pdf
使用 Laravel 填充 PDF 模板的资源。
Requires
- php: >=5.5.9
- laravel/framework: ^5.0|^6.0|^7.0|^8.0
This package is auto-updated.
Last update: 2024-08-29 04:52:06 UTC
README
此包是为那些想要创建自己的定制 PDF 服务的人准备的。
如果您只想使用标准的容器服务,您可以在https://hub.docker.com/r/aocode/ao-pdf找到官方镜像。
先决条件
安装 "pdftk"
UBUNTU
$ sudo snap install pdftk
$ sudo ln -s /snap/bin/pdftk /bin/pdftk
https://linuxhint.com/install_pdftk_ubuntu/
https://askubuntu.com/questions/1028522/how-can-i-install-pdftk-in-ubuntu-18-04-and-later
安装
1) 安装
$ composer require alex-oliveira/ao-pdf
2) 配置 "config/app.php" 文件
'providers' => [
/*
* Package Service Providers...
*/
AOPDF\AOPDFServiceProvider::class,
],
路由
包的 ServiceProvider 提供了四个可用于资源使用的路由
GET: /pdf/fill
- 创建和下载短文档的路由。
POST: /pdf/fill
- 创建长文档的路由。
GET: /pdf/download
- 下载长文档的路由。
GET: /pdf/test
- 测试包功能的路由。
使用
基本
use AOPDF\AOPDF;
...
$document_part_1 = [
'template' => 'https://github.com/alex-oliveira/ao-pdf/raw/master/example.pdf',
'params' => [
'client_name' => 'Alex Oliveira',
'client_cpf' => '12345678900',
]
];
...
$data = AOPDF::encode([
$document_part_1, $document_part_2, $document_part_3, $document_part_n...
]);
-
确定文档的组成。
- 要组成一个文档,需要为相同的内容配置一个或多个部分。
- 每个部分都有自己的独立配置。
- 服务将单独处理每个部分,并在最后将所有部分连接起来以返回一个单独的 PDF 文件。
- 没有关于文档分区的规则,您只需根据方便和/或需要来灵活使用即可。
-
确定用于创建部分的模板。
- 每个部分必须有一个名为 template 的属性,包含一个用于下载 PDF 文件的 URL。
- 在第一次使用 URL 时,包将下载文件并保存以供将来使用。
- 要更改要使用的 template,只需更改请求中提供的 URL。
- URL 指定的 PDF 文件必须包含将要填充的字段。
-
确定用于填充字段的参数。
- 每个部分必须有一个名为 params 的属性,包含一个组织为 键 和 值 的数据列表。
- 每个属性的 键 必须与作为 template 使用的 PDF 文件中字段的名称完全匹配。
- 在 template 中找不到的 键 不会生成错误,只会被忽略。
- 可以嵌套属性并应用过滤器,以实现更复杂的使用。
-
准备数据以进行处理。
- 创建包含文档所有部分配置的列表后,需要对其进行编码以发送。
- 使用 AOPDF::encode($data) 函数正确编码数据。
- 一旦数据编码完成,您就可以通过 http://{{MY_HOST}}/pdf/fill 路由,使用 GET 或 POST 请求发送数据。
- 使用 GET 请求文档使用少量数据,使用 POST 请求文档使用大量数据。
- 如果您想简化请求类型的管理,只需使用 POST。
GET 请求(适用于少量数据的请求)
redirect()->to('http://{{__MY_HOST__}}/pdf/fill?data=' . $data);
-
这是使用此服务最简单的方法。
-
数据通过URL发送,通过名为data的参数在queryString中发送,并作为对请求的响应开始下载PDF文件。
-
此方法的缺点是URL发送数据的量有限。如果需要发送很多数据,您将不得不使用POST。
POST请求(用于大量数据的请求)
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'http://{{__MY_HOST__}}/pdf/fill', [
'form_params' => [
'data' => $data
]
]);
$content = json_decode($response->getBody()->getContents());
redirect()->to('http://{{__MY_HOST__}}/pdf/download?file=' . $content->file_name);
-
这种方法将增加工作流程的步骤,但允许发送大量数据以构建文档。
-
需要在一个名为data的字段中发送数据到请求体,但响应将不是一个PDF文件,而是一个服务器上临时文件的名称。
-
要获取PDF文件,需要发起一个新的类型为GET的请求到路由http://{{MY_HOST}}/pdf/download,在queryString中通过名为file的字段告知临时文件的名称。
-
这样做后,文件将被处理并开始下载。
关于缓存系统
-
该软件包有一个文件缓存系统。每个请求的最终PDF文件将被保留6小时,如果在期间重复请求,将返回缓存文件。
-
存储的文件通过请求的md5散列进行标识,因此任何对请求的更改都会改变散列,从而被视为一个新的请求。
使用格式化器
可用的格式化器