massive/pdf-bundle

用于管理PDF文档的Massive套件

0.4.2 2022-08-02 08:15 UTC

This package is auto-updated.

Last update: 2024-08-30 01:11:25 UTC


README

基于KnpSnappyBundle构建: https://github.com/KnpLabs/KnpSnappyBundle

安装

使用composer安装套件。

composer require massive/pdf-bundle

将套件添加到你的symfony内核。

new Knp\Bundle\SnappyBundle\KnpSnappyBundle(),
new Massive\Bundle\PdfBundle\MassivePdfBundle(),

安装wkhtmltopdf

Ubuntu

apt-get install wkhtmltopdf
apt-get install xvfb
echo ‘xvfb-run –server-args=”-screen 0, 1024x768x24″ /usr/bin/wkhtmltopdf $*’ > /usr/bin/wkhtmltopdf.sh
chmod a+x /usr/bin/wkhtmltopdf.sh
ln -s /usr/bin/wkhtmltopdf.sh /usr/local/bin/wkhtmltopdf
wkhtmltopdf http://www.google.com output.pdf

MacOSX

http://wkhtmltopdf.org/downloads.html

配置Knp Snappy Bundle**

请参阅KnpSnappyBundle的配置。

使用方法

控制器特性

控制器特性是生成PDF的最简单方法

<?php

namespace AppBundle\Controller;

use Massive\Bundle\PdfBundle\Controller\RenderPdfTrait;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class YourController extends Controller
{
    use RenderPdfTrait;

    public function pdfAction(Request $request): Response
    {
        return $this->renderPdf(
            '@pdfs/your.html.twig',
            [
                'parameter' => 'hello'
            ],
            $request->getRequestFormat()
        );
    }
}

注册路由,将默认_format设置为pdf

    <route id="your.pdf" path="/your.{_format}">
        <default key="_controller">AppBundle:Your:pdf</default>
        <default key="_format">pdf</default>
    </route>

现在你可以通过/your访问PDF,或者使用/your.html获取HTML响应(适合开发)。

生成PDF

/** @var \Massive\Bundle\PdfBundle\Pdf\PdfFactory $pdfFactory */
$pdfFactory = $this->get('massive_pdf.pdf_factory'); // get the service or inject it in your services configuration
$pdf = $pdfFactory->create('pdf.html.twig');

嵌入本地资源

local_asset通过使用file://代替https://来避免HTTP请求,从而提高性能

<img src="{{ local_asset('/images/image.jpg') }}" alt="Local Asset">

这仅在$request->getRequestFormat()返回pdf而不是html时才有效。

如果你要强制使用file://,请将第二个参数设置为true

<img src="{{ local_asset('/images/image.jpg', true) }}" alt="Local Asset">