在ZF2中生成PDF?

lui*_*r99 4 php pdf dompdf zend-framework2

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

Fin*_*ham 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"
}
Run Code Online (Sandbox Code Playgroud)

现在使用composer 安装更新依赖项.Composer将自动包含依赖项,否则我们将使用include包含("dompdf.php")示例:

php composer.phar install
Run Code Online (Sandbox Code Playgroud)

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


'modules' => array(
    'Application',
    'DOMPDFModule',
),
Run Code Online (Sandbox Code Playgroud)

我们准备在我们的项目中使用它.

第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;
Run Code Online (Sandbox Code Playgroud)

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

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

为此创建一个generatepdfAction()方法,我们将在其中放置PDF生成逻辑,如下所示.

IndexController.php

public function generatepdfAction()
{
    $pdf = new PdfModel();
    return $pdf;
}
Run Code Online (Sandbox Code Playgroud)

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

示例:
generatepdf.phtml

<html>
  <body>
      <h1>My Name is Blah</h1>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

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

将变量传递给视图文件

它可以在完成generatepdfAction()通过使用setVariables()的方法PdfModel()

实施例:
IndexController.php

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

generatepdf.phtml

<html>
  <body>
      <h1>My Name is <?php echo $this->name; ?></h1>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

设置文件名并强制下载

设置文件名将触发PDF文件的自动下载.可以使用PdfModel()setOption()方法设置文件名.示例:IndexController.php


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

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

设置纸张尺寸和纸张方向

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

示例:
IndexController.php

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

希望这可以帮助.