actualreports/pdfgeneratorapi-laravel

Laravel 的 PDF 生成器 API 包

v1.0.6 2019-05-14 20:53 UTC

This package is not auto-updated.

Last update: 2024-09-25 10:03:32 UTC


README

此 Laravel 包创建控制器和路由,以便轻松使用 PDF 生成器 API 服务。它还包括用于打印、下载生成的文件以及在编辑视图中打开模板的 JavaScript 接口。

安装

使用以下命令通过 composer 安装此包

composer require actualreports/pdfgeneratorapi-laravel

如果您不使用 Laravel 5.5 自动发现,请将服务提供者和别名添加到 config/app.php。如果您运行 Laravel 5.5,则此操作将自动完成。

添加提供者

ActualReports\PDFGeneratorAPILaravel\ServiceProvider::class,

添加别名

'PDFGeneratorAPI' => ActualReports\PDFGeneratorAPILaravel\Facade::class,

将配置文件发布到您的配置文件夹(config/pdfgeneratorapi.php)

php artisan vendor:publish --provider="ActualReports\PDFGeneratorAPILaravel\ServiceProvider" --tag=config

将 JavaScript 发布到您的资源文件夹(resources/assets/vendor/pdfgeneratorapi/index.js)

php artisan vendor:publish --provider="ActualReports\PDFGeneratorAPILaravel\ServiceProvider" --tag=public --force

配置

将配置添加到您的 .env 文件

PDF_GENERATOR_KEY={YOUR_API_KEY}
PDF_GENERATOR_SECRET={YOUR_API_SECRET}
PDF_GENERATOR_BASE_URL=https://us1.pdfgeneratorapi.com/api/v3/
PDF_GENERATOR_USE_DATA_URL=true

如果 "PDF_GENERATOR_USE_DATA_URL" 设置为 true,则我们发送一个数据文件的 URL 而不是在请求正文中发送数据。此功能是由于 URL 长度限制而存在的。当我们通过带有查询参数的 json 数据重定向用户到编辑视图时,我们受到浏览器 URL 长度的限制,并且数据字符串可能不完整。

要使此功能正常工作,您需要链接您的公共文件夹。数据文件保存到 /storage/app/public/pdfgenerator

php artisan storage:link

用法

我们包含了一个 JavaScript 接口,该接口调用下面定义的路由,并在浏览器中显示结果。如果您需要更多灵活性,您可以创建自己的前端界面,使用这些路由。

数据存储库

主要控制器依赖于 ActualReports\PDFGeneratorAPILaravel\Repositories\DataRepository 来获取发送到 PDF 生成器服务的请求数据。默认情况下,数据存储库通过 Input::get('data') 在请求中查找 "data" 参数。

您可以通过实现接口 ActualReports\PDFGeneratorAPILaravel\Contracts\DataRepository 并在 AppServiceProvider.php 的 register() 函数中重写绑定来添加自己的 DataRepository。

$this->app->bind(
    'ActualReports\PDFGeneratorAPILaravel\Contracts\DataRepository',
    'App\Repositories\DataRepository'
);

用户存储库

主要控制器依赖于 ActualReports\PDFGeneratorAPILaravel\Repositories\UserRepository 来为已登录用户生成唯一的 workspace 标识符。

您可以通过实现接口 ActualReports\PDFGeneratorAPILaravel\Contracts\UserRepository 并在 AppServiceProvider.php 的 register() 函数中重写绑定来添加自己的 UserRepository。

$this->app->bind(
    'ActualReports\PDFGeneratorAPILaravel\Contracts\DataRepository',
    'App\Repositories\DataRepository'
);

路由

可用路由

  • pdfgenerator.templates.all: GET /pdfgenerator/templates
  • pdfgenerator.templates.get: GET /pdfgenerator/templates/{template}
  • pdfgenerator.templates.output: GET|POST /pdfgenerator/templates/{template}/{output}/{format}
  • pdfgenerator.templates.new: GET|POST /pdfgenerator/templates/new
  • pdfgenerator.templates.edit: GET|POST /pdfgenerator/templates/{template}/edit
  • pdfgenerator.templates.copy: GET|POST /pdfgenerator/templates/{template}/copy

JavaScript 接口

初始化 JavaScript 接口

PDFGeneratorAPI.init();

获取可用模板列表

PDFGeneratorAPI.list().then((response) => {
  console.log(response);      
});

执行打印命令,生成文档并打开浏览器打印对话框

PDFGeneratorAPI.print(template, format, data).then(() => {
  console.log('resolve print promise');
});

执行下载命令,生成文档并自动开始下载

PDFGeneratorAPI.download(template, format, data).then(() => {
  console.log('resolve download promise');
});

执行内联命令,生成文档并在新标签页/窗口中打开它

PDFGeneratorAPI.inline(template, format, data).then(() => {
  console.log('resolve inline promise');
});

在新标签页/窗口中打开模板编辑器

PDFGeneratorAPI.edit(template, data).then(() => {
  console.log('resolves when editor tab/window is closed');
});

创建给定模板的副本,并在新标签页/窗口中打开模板编辑器

PDFGeneratorAPI.copy(template, data, 'New name for copied template').then(() => {
  console.log('resolves when editor tab/window is closed');
});