luketowers/oc-snappypdf-plugin

OctoberCMS 的 SnappyPDF 集成

安装: 969

依赖: 1

建议者: 0

安全: 0

星星: 12

关注者: 2

分支: 8

公开问题: 2

类型:october-plugin

1.0.6 2022-02-28 05:46 UTC

This package is auto-updated.

Last update: 2024-09-21 20:13:00 UTC


README

基于 wkhtmltopdf 和 wkhtmltoimage 转换库的 OctoberCMS 包装器,这些库通过 barryvdh/laravel-snappy 包提供。

安装

要从市场安装,请点击“添加到项目”按钮,然后在更新项目以拉入插件之前选择要添加的项目。

要从后端安装,请转到 设置 -> 更新与插件 -> 安装插件,然后搜索 LukeTowers.SnappyPDF

要从 仓库 安装,将其克隆到 plugins/luketowers/snappypdf,然后从您的项目根目录运行 composer update 以拉入依赖项。

要使用 Composer 安装,请在项目根目录中运行 composer require luketowers/oc-snappypdf-plugin

注意:在某些 Linux 系统上,您可能需要安装以下依赖项(通常在进程失败并显示“退出状态代码 127 表示出了问题”时)。来自 barryvdh/laravel-snappy#68

sudo apt-get install -y \
libxrender1 \
libfontconfig1 \
libx11-dev \
libjpeg62 \
libxtst6

如果您收到“退出状态代码 1 表示出了问题”,则可能需要安装以下依赖项。来自 wkhtmltopdf/wkhtmltopdf#3001 (comment)

sudo apt-get install -y \
libssl1.0-dev

注意:在 Homestead 中可能无法安装 libssl1.0-dev,请确保首先运行 sudo apt-get update

配置

您可能希望更改的主要配置值是 wkhtmltopdfwkhtmltoimage 的可执行二进制文件的路径。默认情况下,这些二进制文件由市场安装拉入 plugins/luketowers/snappypdf/vendor/bin(当从市场安装时),默认配置反映了这一点。默认情况下也支持通过克隆 仓库 并使用 composer update 加载依赖项来安装(其中二进制文件将位于您的项目的 vendor/bin 中)。

如果您需要更改用于定位这些二进制文件的路径,则有一些选择。如果您已经使用 .env 文件进行环境级别配置,则可以简单地添加 SNAPPY_PDF_BINARYSNAPPY_IMAGE_BINARY 以及它们相应的路径到您的 .env 文件,然后完成任务。

如果您不使用 .env 文件,或者需要更改除了二进制路径之外的其他配置值;则可以通过复制插件中的 config/config.php 到您的项目的 config/luketowers/snappypdf/config.php 文件来覆盖此插件的配置并更改必要的值(如 OctoberCMS 文档中指定)。

使用方法

当使用此插件时,强烈建议您将其添加为依赖项到您正在使用的插件中。

为了使用此插件提供的库(SnappyPDFSnappyImage),只需在您的 PHP 文件顶部使用 use 语句导入它们。

将 PDF 流到浏览器

以下示例将从控制器中渲染一条记录并将其流式传输到浏览器以供下载或查看。

<?php namespace MyVendor\MyPlugin\Controllers;

use File;
use Twig;
use Response;
use SnappyPDF;
use Backend\Classes\Controller;

use MyVendor\MyPlugin\Models\Example as ExampleModel;

class Examples extends Controller
{
    public function download($id)
    {
        // Load the example record
        $example = ExampleModel::find($id);

        // Load the template
        $template = File::get(plugins_path('myvendor/myplugin/views/example-record-template.htm'));

        // Render the template
        $renderedHtml = Twig::parse($template, [
            'example' => $example,
        ]);

        // Render as a PDF
        $pdf = SnappyPDF::loadHTML($renderedHtml)
            ->setOption('margin-top', 0)
            ->setOption('margin-bottom', 0)
            ->setOption('margin-left', 0)
            ->setOption('margin-right', 0)
            ->setPaper('letter')
            ->output();

        return Response::make($pdf, 200, [
            'Content-Type'        => 'application/pdf',
            'Content-Disposition' => "filename={$example->name}.pdf",
        ]);
    }
}

返回PDF给AJAX框架以供下载

<?php namespace MyVendor\MyPlugin\Controllers;

use File;
use Twig;
use Backend;
use Response;
use SnappyPDF;
use Backend\Classes\Controller;

use MyVendor\MyPlugin\Models\Example as ExampleModel;

class Examples extends Controller
{
    public function onDownloadPDF()
    {
        $recordId = input('recordId');
        return Backend::redirect("myvendor/myplugin/examples/download/$recordId");
    }
    
    public function download($id)
    {
        // Load the example record
        $example = ExampleModel::find($id);

        // Load the template
        $template = File::get(plugins_path('myvendor/myplugin/views/example-record-template.htm'));

        // Render the template
        $renderedHtml = Twig::parse($template, [
            'example' => $example,
        ]);

        // Render as a PDF
        $pdf = SnappyPDF::loadHTML($renderedHtml)->output();

        return Response::make($pdf, 200, [
            'Content-Type'        => 'application/pdf',
            'Content-Transfer-Encoding' => 'binary',
            'Content-Disposition' => "attachment; filename=\"{$example->name}.pdf\"",
        ]);
    }
}

有关使用库的更多信息,请参阅barryvdh/laravel-snappy仓库wkhtmltopdf手册