phpexcel pdf渲染库尚未定义

时间:2013-02-05 10:10:36

标签: pdf pdf-generation phpexcel

尝试使用PHPExcel 1.7.6(内存不足错误)生成PDF后,我升级到1.7.8。我不能为我的生活弄清楚如何使它工作。我已经尝试过tcPDF和mPDF,两者都是一样的。

将它放回Excel输出,我可以看到我正确设置了路径。所有我能得到的是“PDF渲染库尚未定义”,我无法弄清楚它想要什么 - 我已经尝试了'mPDF5.4','MPDF54'(文件夹本身的实际名称),' mpdf','mpdf.php'......每次都一样。

我已经使用PHPExcel超过一年了,所以我并不是全新的。我已经失去了比我更愿意承认这个问题的时间,而且我没有发现任何地方描述这个问题,所以我感觉不止一点点愚蠢,我似乎是唯一一个无法想象的人这个。

我正在使用的实际代码如下:

ini_set('include_path', ini_get('include_path').'\\Classes\\');

$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;
$rendererLibrary = 'mPDF5.4';
$rendererLibraryPath = ini_get('include_path') . $rendererLibrary;

(也就是说,很好的是示例代码的副本。)

为了完整性,我正在使用的标题是

echo header("Content-Type: application/pdf");
echo header("Content-Disposition: attachment; filename=".$filename.".pdf" );
echo header('Cache-Control: max-age=0');

这些靠近文件的顶部,当然。

在文件末尾附近,输出代码为

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save('php://output');

3 个答案:

答案 0 :(得分:2)

我得到了它的工作。就像我想说我有一个突破性的时刻并完全理解它一样,我不知道我是如何让它发挥作用的。但是,希望它可以帮助某人,让我列出我做的事情。

我在Windows上运行XAMPP。我的文件结构在xampp \ php \ PEAR \ Classes中有PHPExcel本身的文件夹。 domPDF在同一个文件夹中,我将其重命名为'dompdf'。

由于我不再记得的原因,我设置了包含路径:

ini_set('include_path', ini_get('include_path').'\\Classes\\');

要设置渲染路径,我使用了以下内容:

$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
$rendererLibrary = 'dompdf';
$rendererLibraryPath = ini_get('include_path') . $rendererLibrary;

对于实际的作家创作,我使用以下内容:

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
$objWriter->save($path.$fullFileName);

我注意到的一件事可能会让事情与众不同:

// include 'PHPExcel/Writer/Excel2007.php';

也就是说,与我在PHPExcel中所做的一切不同,我根本不包括Writer文件夹中的任何内容。我记得最好的,这次与一周前我问这个问题时的情况有所不同。一旦我从1.7.8中的Tests文件夹中获取01simple-download-pdf.php文件,主要是从它复制代码并将其调整到我的路径。

总结一下,单独留下$ rendererName。 $ rendererLibrary是包含库的文件夹的名称,在我的例子中是'dompdf'。 $ rendererLibraryPath实际上是设置该文件夹的路径,因此它以包含pdf库文件夹的路径结束。

很明显,我不是haber-leet hax0r,但是SO已经为我回答了许多编程问题。我希望这可以帮助别人,所以他们不会像我一样浪费时间。

答案 1 :(得分:0)

PHPOffice也包含PHPWord。我有与PHPWord相同的错误消息。这是针对LINUX的。用'PhpExcel'替换'PhpWord'应该可以解决这个问题。您必须根据需要修改路径$ rendererLibraryPath。

$rendererName = \PhpOffice\PhpWord\Settings::PDF_RENDERER_DOMPDF;
$rendererLibraryPath = realpath(__DIR__ . '/../../../../../dompdf-0.6.1');
\PhpOffice\PhpWord\Settings::setPdfRenderer($rendererName, $rendererLibraryPath);
$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'PDF');
$objWriter->save('helloWorld.pdf');

答案 2 :(得分:0)

如果您收到此错误,并且您已设置TCPDF或DOMPDF文件夹的正确路径(您不必编写完整路径),那么还要确保您有以下这些行:

if (!PHPExcel_Settings::setPdfRenderer(
        $rendererName,
        $rendererLibraryPath
    )) {
    die(
        'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
        EOL .
        'at the top of this script as appropriate for your directory structure'
    );
}