【问题标题】:phpexcel pdf rendering library has not been definedphpexcel pdf渲染库尚未定义
【发布时间】:2013-02-05 10:10:35
【问题描述】:

在尝试使用 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');

【问题讨论】:

  • 你能展示你实际的渲染器配置代码吗?

标签: pdf pdf-generation phpexcel


【解决方案1】:

我让它工作了。尽管我想说我有一个突破性的时刻并且完全理解它,但我不知道我是如何让它发挥作用的。但是,希望它可以帮助某人,让我列出我做了什么。

我在 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 库文件夹的路径结束。

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

【讨论】:

  • 请注意,这次我没有使用标题。就我而言,我的最终目标是从命令行运行脚本。不过,我看不出有任何理由说明基于浏览器的脚本不能与适当设置的标头一起工作。
  • 嗨,我也遇到了渲染路径问题。我应该包括什么东西的路径?
  • 它需要您的 pdf 渲染库所在的路径。也就是说,在我上面的示例中,在 XAMPP 下,我在 H:\ 的根目录下安装了 XAMPP。对于 PHP,我的包含路径是 \php\pear,我在其中附加了 \Classes。在 \Classes 中存在 dompdf 目录。所以 Windows 中的完整路径是 H:\xampp\php\pear\Classes\。在您的脚本中,您只需将您的 $rendererLibraryPath 设置为包含渲染器库目录的文件夹。
  • 感谢您的回答。幸运的是,我在很多天前就能理解它,所以现在我可以使用它了:)
【解决方案2】:

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');

【讨论】:

    【解决方案3】:

    如果您收到此错误并且您已设置正确的 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'
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2022-01-06
      • 2017-06-18
      • 1970-01-01
      相关资源
      最近更新 更多