dompdf与Symfony 2.1项目

时间:2012-09-20 12:34:58

标签: symfony symfony-2.1 dompdf

如何让dompdf与Symfony 2.1项目一起使用? 我遵循了这个TUTORIAL,但我仍然得到这个例外:

  

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

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

4 个答案:

答案 0 :(得分:3)

以下是我在Symfony2项目中使用DOMPDF所做的工作:

  1. 需要DinoPDF编写器包: php composer.phar需要dino / dompdf,版本0.1.1(或dev-master)

  2. 需要在加载过程中的某个地方使用DomPDF初始化文件:

    • 将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';
      
  3. dompdf_config.inc.php定义了DOMpdf安装的路径。 DinoPDF分布改变了库中的路径,因此必须注意:

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

    DOMPDF_LIB_DIR :其他资源 - 字体等。在DOMPdf的dinoPDF分发中,此文件夹从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;
    }
    

答案 1 :(得分:2)

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

很抱歉没有在这里发布内联步骤,但我已经在不久前写过博文了!

答案 2 :(得分:1)

实际上,在Symfony2项目中包含DomPDF实际上是一种必须简单的方法。

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

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

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

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

你已经完成了!

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

答案 3 :(得分:0)

还有其他选项,例如:

wkhtmltopdf - 一个基于WebKit引擎的控制台html2pdf转换工具,可以保证标准的合规性。

KnpSnappyBundle - 将Symfony2与wkhtmltopdf集成的软件包