1

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

3 回答 3

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

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

于 2013-02-13T09:21:59.480 回答
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');
于 2014-08-11T19:37:34.800 回答
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'
    );
}
于 2015-06-19T06:51:00.177 回答