【问题标题】:Generate PDF in ZF2?在 ZF2 中生成 PDF?
【发布时间】:2014-07-04 22:24:21
【问题描述】:

我正在开始一个新项目,而且我对 Zend Framework 2 也很陌生。 您对从要作为变量 ($html) 传递的 html 代码生成 pdf 有什么建议? 我正在阅读 DOMPDF 非常好的网络,但我不确定如何使用它,查看文档。 对于初学者来说,最简单的方法是什么?

【问题讨论】:

  • mpdf1.com/mpdf/index.php - 从 html 生成 pdf。如果您已经熟悉 css 和 html,那么该库很容易上手。它还具有良好的文档和丰富的功能。
  • 感谢您的回答!我试试看。

标签: php pdf zend-framework2 dompdf


【解决方案1】:

您选择的 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

modules 部分>示例:
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 中的大多数 Action 一样;此操作还将有一个相应的视图文件 generatepdf.phtml,我们在其中实际放置要转换为 PDF 的 HTML。

示例:
生成pdf.phtml

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

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

将变量传递给查看文件

可以在generatepdfAction()中使用PdfModel()setVariables()方法完成

示例:
IndexController.php

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

生成pdf.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)将自动添加。

设置纸张尺寸和纸张方向

纸张大小和纸张方向可以通过 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;
}

希望这会有所帮助。

【讨论】:

  • 谢谢芬尼!我会试试这个并写下来。
  • 此答案是使用 ZF2 生成 pdf 的最佳“初学者友好型”。非常感谢有趣!效果很好!!
  • :) 很高兴它有帮助。大多数核心 PHP 开发人员是 Zend Framework 2 的新手,他们对如何使用 DOMPDF 感到困惑。所以想以初学者友好的方式发布答案。如果它适合您在问题中提到的目的;接受它作为答案。谢谢。
  • +1 了解详情。值得注意的是,生成的 PDF 不会缓存/存储在任何地方。这只是一个直接的文件输出。
  • 这只是一个完美的答案。你必须为此爱上 Stackoverflow!万分感谢!这实际上应该是 github repo 的自述文件的一部分!
【解决方案2】:

如果您使用 DOMPDF,有一个模块,DOMPDFModule 用于 Zend Framework 2,它使生成 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,它使用wkhtmltopdf 从 url 或 html 页面生成 PDF。对于 Zend Framework 2,有一个模块 MvlabsSnappy

【讨论】:

  • DOMPDFModule 模块不适用于 Zend Framework 3。你能建议我在 Zend Framework 3 中安装此模块的任何替代方案吗?
  • 该模块目前似乎无人维护。所以,我看不到模块创建者很快就会移植它来支持 zf3。但是,您总是可以创建一个问题来找出答案。如果您现在想要一个简单的,您可以使用 dompdf 库在控制器中自己创建 pdf 响应,方法是从同一个模块中获取想法。签出PdfStrategy 和 DOMPDFModule\View\Renderer\PdfRenderer::render
  • 感谢您的快速回复。我会试着找出一些东西。
【解决方案3】:

看看: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

【讨论】:

  • 请记住,上面的代码是独立于框架的,您真正需要使用它的只是安装它并包含它。
猜你喜欢
  • 2013-03-23
  • 2010-09-26
  • 2018-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多