使用 Laravel 填充 PDF 模板的资源。

安装: 6

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 0

开放问题: 0

语言:富文本格式

类型:

dev-master 2020-05-31 05:59 UTC

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 路由,使用 GETPOST 请求发送数据。
    • 使用 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散列进行标识,因此任何对请求的更改都会改变散列,从而被视为一个新的请求。

使用格式化器

可用的格式化器