在ZF2中生成PDF?

时间:2014-05-16 13:04:35

标签: php pdf zend-framework2 dompdf

我正在开始一个新项目,我也是Zend Framework 2的新手。 您有什么建议从您希望作为变量传递的html代码生成pdf($ html)? 我在网上看到DOMPDF非常好,但我不确定如何使用它,查看文档。 什么是初学者最简单的方法?

3 个答案:

答案 0 :(得分:18)

您选择的DOMPDF是对的。它是Zend Framework 2中最容易使用的。只需添加一个简单的模块(DOMPDFModule)就可以了。因为你是Zend Framework 2的新手;这是如何使用它。

第1步:下载DOMPDFModule

“dino / dompdf-module”:“dev-master”添加到 composer.json 文件中的 require 部分
示例:
composer.json

"require": {
    "php": ">=5.3.3",
    "zendframework/zendframework": "2.2.*",
    "dino/dompdf-module": "dev-master"
}

现在使用 composer 安装更新依赖项。 Composer将自动包含依赖项,否则我们将使用 include(“dompdf.php”)来包含这些依赖项。

示例:

php composer.phar install

接下来,我们必须将 DOMPDFModule 添加到 config / application.config.php 中的模块部分中 示例:
application.config.php

'modules' => array(
    'Application',
    'DOMPDFModule',
),

我们已准备好在我们的项目中使用它。

第2步:在Zend Framework 2项目中使用它

打开我们要生成PDF的控制器并添加
使用DOMPDFModule \ View \ Model \ PdfModel;
到顶部;在命名空间之后。

示例:
IndexController.php

<?php
namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use DOMPDFModule\View\Model\PdfModel;

接下来,我们必须将必要的PDF生成代码放入所需的操作中。

示例:
我假设;要下载pdf,我们使用以下路线 的 example.com/generatepdf

为此创建一个 generatepdfAction()方法,我们将按如下方式放置PDF生成逻辑。

IndexController.php

public function generatepdfAction()
{
    $pdf = new PdfModel();
    return $pdf;
}

与Zend Framework 2中的大多数操作一样;此操作还将具有相应的视图文件 generatepdf.phtml ,其中我们实际放置要转换为PDF的HTML。

示例:
generatepdf.phtml

<html>
  <body>
      <h1>My Name is Blah</h1>
  </body>
</html>

现在,如果我们去了我们创建的路线;如果浏览器支持查看PDF,PDF将显示在同一窗口中。

将变量传递给视图文件

可以使用 PdfModel() setVariables()方法在 generatepdfAction()中完成 示例:
IndexController.php

public function generatepdfAction()
{
    $pdf = new PdfModel();
    $pdf->setVariables(array(
      'name' => 'John Doe',
    ));
    return $pdf;
}

generatepdf.phtml

<html>
  <body>
      <h1>My Name is <?php echo $this->name; ?></h1>
  </body>
</html>

设置文件名并强制下载

设置文件名将触发PDF文件的自动下载。可以使用 PdfModel() setOption()方法设置文件名。

示例:
IndexController.php

public function generatepdfAction()
{
    $pdf = new PdfModel();
    $pdf->setOption("filename", "my-file");
    return $pdf;
}

将自动添加文件扩展名(.pdf)。

设置纸张尺寸和纸张方向

纸张尺寸和纸张方向可以通过 paperSize paperOrientation 选项设置

示例:
IndexController.php

public function generatepdfAction()
{
    $pdf = new PdfModel();
    $pdf->setOption("paperSize", "a4"); //Defaults to 8x11
    $pdf->setOption("paperOrientation", "landscape"); //Defaults to portrait
    return $pdf;
}

希望这有帮助。

答案 1 :(得分:2)

看看:http://www.mpdf1.com/mpdf/index.php

它从html生成pdf。如果你熟悉css和html,那么库很容易启动。它还具有良好的文档和丰富的功能。

从他们的文档中借鉴:

include('../mpdf.php');

// Create an instance of the class:
$mpdf=new mPDF();

// Write some HTML code:
$mpdf->WriteHTML('<p>Hello World</p>');

// Output a PDF file:
$mpdf->Output();
exit;

Manual

Generated files examples page

答案 2 :(得分:0)

如果你使用DOMPDF,Zend Framework 2有一个模块DOMPDFModule,它使pdf生成变得轻而易举。

<?php

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use DOMPDFModule\View\Model\PdfModel;

class ReportController extends AbstractActionController
{
    public function monthlyReportPdfAction()
    {
        $pdf = new PdfModel();
        $pdf->setOption('filename', 'monthly-report'); // Triggers PDF download, automatically appends ".pdf"
        $pdf->setOption('paperSize', 'a4'); // Defaults to "8x11"
        $pdf->setOption('paperOrientation', 'landscape'); // Defaults to "portrait"

        // To set view variables
        $pdf->setVariables(array(
          'message' => 'Hello'
        ));

        return $pdf;
    }
}

替代

您可以使用Snappy从网址或html页面使用wkhtmltopdf生成PDF。对于Zend Framework 2,有一个模块MvlabsSnappy