MikeHaertl/pdfable

PDFable是一个Yii扩展,用于使用PHPWkHtmlToPdf(包含)从网页创建PDF。

安装数: 30,330

依赖: 0

建议者: 0

安全性: 0

星标: 14

关注者: 7

分支: 4

开放问题: 2

类型:yii-extension

1.0.4 2017-03-21 12:01 UTC

This package is auto-updated.

Last update: 2024-08-24 03:46:39 UTC


README

PDFable是一个Yii扩展,用于使用PHPWkHtmlToPdf(包含)从网页创建PDF。

要求

PDFable要求您的系统上安装了wkhtmltopdf二进制文件。

安装

下载包文件并将其解压到extensions目录。注意,您可能想将目录重命名为pdfable

示例模块

要尝试此扩展,您可以在main.php中配置pdfable示例模块。

<?php
    'modules'=>array(
        'pdfable'=>array(
            'class'=>'ext.pdfable.pdfable.PdfableModule',
            // Optional: Set path to wkthmltopdf binary
            //'bin' => '/usr/bin/wkhtmltopdf',
        ),

然后,该模块应从http://localhost/index.php?r=pdfable/demo或您使用的任何主机名处可用。我建议您查看此示例模块的代码。

基本配置

PDFable是一个通过behaviors附加的控制器行为。

<?php
class MyController extends Controller
{
    public function behaviors()
    {
        return array(
            'pdfable'=>array(
                'class' => 'ext.pdfable.Pdfable',
            ),
        );
    }

基本使用

要从视图文件渲染单页PDF,只需调用renderPdf()而不是render()。这将把视图文件转换为PDF并在浏览器中显示。

    public function actionPdfDemo()
    {
        // Render this view as PDF and display inline in the browser:
        $this->renderPdf('pdfDemo');
    }

render()一样,您当然也可以使用自定义数据渲染更复杂的视图。如果想要打开下载对话框,您还可以将下载文件名作为第4个参数传递。

<?php
    public function actionInvoice($id)
    {
        $invoice=Invoice::model()->findByPk($id);

        $this->renderPdf('invoice',array(
            'invoice' => $invoice,
        ), array(), 'invoice_'.$invoice->id.'.pdf');
    }

第三个参数允许您将额外的PDF页面选项传递给wkhtmltopdf。请参阅下面的高级配置。

高级使用

多页PDF

也可以创建包含多个页面(=视图)的PDF。这里您将使用createPdf()方法。它返回一个PdfFile对象。

<?php
    public function actionPortfolio($id)
    {
        $portfolio = Portfolio::model()->findByPk($id);

        $pdf = $this->createPdf();
        $pdf->renderPage('intro');
        $pdf->renderPage('portfolio',array(
            'portfolio' => $portfolio,
        ));
        $pdf->send('portfolio_'.$id.'.pdf');
    }

从控制台命令使用

您还可以通过低级别的PdfFile类从控制台命令创建PDF。以下示例取自示例模块。

    public function actionIndex($filename)
    {
        $pdf = new PdfFile;

        // We have to set some paths ...
        $pdf->baseViewPath  = Yii::getPathOfAlias('ext.pdfable.pdfable.views');
        $pdf->layoutPath    = Yii::getPathOfAlias('ext.pdfable.pdfable.views.layouts');
        $pdf->viewPath      = Yii::getPathOfAlias('ext.pdfable.pdfable.views.demo');

        // ... and supply our custom CSS file
        $pdf->setOptions(array(
            'user-style-sheet'  => Yii::getPathOfAlias('ext.pdfable.pdfable.assets.css.pdf').'.css',
        ));

        $pdf->renderPage('invoice');
        $pdf->renderPage('page1');
        $pdf->renderPage('page2');

        $pdf->saveAs($filename);
    }

如果您想尝试示例命令,您可以将其添加到console.php中的commandMap

<?php
    'commandMap' => array(
        'demopdf' => array(
            'class' => 'ext.pdfable.pdfable.commands.DemopdfCommand',
        ),
    ),

然后,您可以使用./yiic demopdf --filename=/tmp/demo.pdf创建一个示例PDF。

高级配置

建议您查看PHPWkHtmlToPdf文档。那里描述的所有选项在PDFable中也可用。

默认页面选项

您可以在behaviors()方法中为文档和每个页面设置默认PDF选项。

<?php
   public function behaviors()
   {
       return array(
           'pdfable' => array(
               'class' => 'ext.pdfable.Pdfable',

               // Global PDF options (see wkhtmltopdf -H for details)
               'pdfOptions' => array(
                   'bin'   => '/usr/bin/wkhtmltopdf',  // path to executable (default)
                   'dpi'   => 600,
               ),

               // Default PDF page options (see wkhtmltopdf -H for details)
               'pdfPageOptions' => array(
                   'page-size'         => 'A5',

                   // You probably always need this, because CSS files from <link>
                   // tags in your document are ignored
                   'user-style-sheet'  => Yii::getPathOfAlias('webroot').'/css/pdf.css',
               ),

               // Use other tmp directory instead of Yii::app()->runtimePath
               'tmpAlias' => 'application.var.tmp',
           ),
       );
   }

覆盖硬编码的页面默认值

行为使用一些硬编码的文档和页面选项默认值(见PdfFile)。您的配置将始终与这些默认值合并。如果您不喜欢这种情况并想要完全的自由,则可以按以下方式配置行为

<?php
   public function behaviors()
   {
       return array(
           'pdfable' => array(
               'class' => 'ext.pdfable.Pdfable',

               'defaultPdfOptions' => array(
                   ...
                   // default PDF options here
                   // could also be an empty array to disable all defaults
                   ...
               ),

               'defaultPdfPageOptions' => array(
                   ...
                   // default PDF page options here
                   // could also be an empty array to disable all defaults
                   ...
               ),
           ),
       );
   }

自定义页面选项

您可以在renderPdf()的第三个参数中提供自定义的wkhtmltopdf页面选项。格式与PHPWkHtmlToPdf中的addPage()相同。