MikeHaertl / pdfable
PDFable是一个Yii扩展,用于使用PHPWkHtmlToPdf(包含)从网页创建PDF。
Requires
- php: >=5.0.0
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()
相同。