0

如何使 dompdf 与 Symfony 2.1 项目一起工作?我遵循了这个TUTORIAL但我仍然遇到这个异常:

注意:使用未定义的常量 DOMPDF_LIB_DIR - 在 [blablabla]/vendor/dino/dompdf/lib/DOMPDF/stylesheet.cls.php 第 16 行中假定为“DOMPDF_LIB_DIR”

如果不是这样,使用 Symfony 2.1 从 html 创建 pdf 的最佳和最简单的库是什么?

4

5 回答 5

3

以下是我在 Symfony2 项目中为我提供 DOMPDF 所做的工作:

  1. 需要 DinoPDF 作曲家包:php composer.phar 需要 Dino/dompdf,版本 0.1.1(或 dev-master)

  2. DomPDF 初始化文件需要在加载过程中的某处被 required() :

    • 将 vendor/dino/dompdf/dompdf_config.inc.php.dist 复制到 app/dompdf_config.inc.php
    • 将 vendor/dino/dompdf/dompdf_config.custom.inc.php.dist 复制到 app/dompdf_config.custom.inc.php
    • 添加你的 app/autoload.php:

      require_once __DIR__.'/dompdf_config.inc.php';
      

dompdf_config.inc.php 定义了 DOMpdf 安装的路径。DinoPDF 发行版更改了库中的路径,因此必须注意:

DOMPDF_INC_DIR:主要的 DOMPDF 类。在 DOMPdf 的 dinoPDF 发行版中,此文件夹从 dompdf/include 重命名为 dompdf/lib/DOMPDF

DOMPDF_LIB_DIR : 附加资源 - 字体等。在 DinoPDF 分发的 DOMPdf 中,此文件夹从 dompdf/lib 重命名为 dompdf/lib/vendor

以下是我对 dompdf_config.inc.php 所做的更改:

/**
 * The root of your DOMPDF installation
 */
define("DOMPDF_DIR", str_replace(DIRECTORY_SEPARATOR, '/',                     realpath(__DIR__.'/../vendor/dino/dompdf/')));
/**
 * The location of the DOMPDF include directory
 * Main DOMPdf classes
 * In dinoPDF distribution of DOMPdf this folder is renamed from dompdf/include to     dompdf/lib/DOMPDF
 */
define("DOMPDF_INC_DIR", DOMPDF_DIR . "/lib/DOMPDF");

/**
 * The location of the DOMPDF lib directory
 * Additional resources - fonts, etc.
 * In dinoPDF distribution of DOMPdf this folder is renamed from dompdf/lib to     dompdf/lib/vendor
 */
define("DOMPDF_LIB_DIR", DOMPDF_DIR . "/lib/vendor");

/** Include the custom config file if it exists */
if ( file_exists(__DIR__ . "/dompdf_config.custom.inc.php") ){
    require_once(__DIR__ . "/dompdf_config.custom.inc.php");
}

def("DOMPDF_FONT_DIR", DOMPDF_LIB_DIR . "/fonts/");

这应该正确地包含库,以便它可以在控制器中使用,例如。像这样:

/**
 * @Route("/export_pdf", name="export_pdf")
 */
public function exportPDFAction($id)
{   
    $html =
    '<html><body>'.
    '<p>Put your html here, or generate it with your favourite '.
    'templating system.</p>'.
    '</body></html>';

    $dompdf = new \DOMPDF();
    $dompdf->load_html($html);
    $dompdf->render();

    $response = new Response();

    $response->setContent($dompdf->output());
    $response->setStatusCode(200);
    $response->headers->set('Content-Type', 'application/pdf');

    return $response;
}
于 2012-11-27T22:18:27.887 回答
2

有一个更简单的方法,因为 dompdf 本身现在具有基本的作曲家支持:http ://blog.viison.com/post/58696419659/dompdf-symfony2

很抱歉没有在此处发布内联步骤,但我前段时间已经写过博客文章了!

于 2013-10-08T10:21:37.667 回答
1

实际上有一种更简单的方法可以将 DomPDF 包含在 Symfony2 项目中。

首先,在您的文件中添加 DomPDF composer.json

{   
    "require": {
        // ...
        "dompdf/dompdf": "dev-master"
    }
}

安装后,编辑app/autoload.php您的 Symfony 应用程序文件并在末尾(return语句之前)添加这些行:

// Requirements for DOMPDF
define('DOMPDF_ENABLE_AUTOLOAD', false);
require_once __DIR__.'/../vendor/dompdf/dompdf/dompdf_config.inc.php';

你完成了!

但正如 Slavik 上面提到的, dompdf可能有更好的解决方案,例如使用wkhtmltopdf.

于 2013-11-07T15:37:41.820 回答
0

您还需要包含该dompdf_config.inc.php文件。

于 2012-09-20T13:41:40.640 回答
0

还有其他选择,例如:

wkhtmltopdf - 一个基于 WebKit 引擎的控制台 html2pdf 转换工具,它保证了标准兼容。

KnpSnappyBundle - 将 Symfony2 与 wkhtmltopdf 集成的包

于 2012-11-30T18:09:32.507 回答