尝试生成PDF时出现奇怪的错误消息

时间:2015-12-21 14:53:17

标签: php phpexcel

我尝试使用PHPExcel库生成PDF文件。

我正在使用示例文件,到目前为止,我只更改了库的路径。

这是我的代码:

<?php

/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Europe/London');

if (PHP_SAPI == 'cli')
    die('This example should only be run from a Web Browser');

/** Include PHPExcel */
require_once '../excelHelper/PHPExcel.php';


//  Change these values to select the Rendering library that you wish to use
//      and its directory location on your server
$rendererName = PHPExcel_Settings::PDF_RENDERER_TCPDF;
//$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;
//$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
//$rendererLibrary = 'tcPDF5.9';
$rendererLibrary = 'tcPDF.php';
//$rendererLibrary = 'DomPDF.php';
$rendererLibraryPath = '../excelHelper/PHPExcel/Writer/PDF/' . $rendererLibrary;


// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set document properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
                             ->setLastModifiedBy("Maarten Balliauw")
                             ->setTitle("PDF Test Document")
                             ->setSubject("PDF Test Document")
                             ->setDescription("Test document for PDF, generated using PHP classes.")
                             ->setKeywords("pdf php")
                             ->setCategory("Test result file");


// Add some data
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Hello')
            ->setCellValue('B2', 'world!')
            ->setCellValue('C1', 'Hello')
            ->setCellValue('D2', 'world!');

// Miscellaneous glyphs, UTF-8
$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A4', 'Miscellaneous glyphs')
            ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');

// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Simple');
$objPHPExcel->getActiveSheet()->setShowGridLines(false);

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);


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


// Redirect output to a client’s web browser (PDF)
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="01simple.pdf"');
header('Cache-Control: max-age=0');

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

但它引发了一个可怕的错误。我试着在过去的一个小时里修好它而没有任何运气。 这是:

[21-Dec-2015 14:47:02 Europe/London] PHP Fatal error:  Uncaught exception 'PHPExcel_Writer_Exception' with message 'Unable to load PDF Rendering library' in /home/notiogrg/public_html/dev/excelHelper/PHPExcel/Writer/PDF/tcPDF.php:35
Stack trace:
#0 /home/notiogrg/public_html/dev/excelHelper/PHPExcel/Autoloader.php(82): require()
#1 [internal function]: PHPExcel_Autoloader::Load('PHPExcel_Writer...')
#2 /home/notiogrg/public_html/dev/excelHelper/PHPExcel/Writer/PDF.php(70): spl_autoload_call('PHPExcel_Writer...')
#3 /home/notiogrg/public_html/dev/excelHelper/PHPExcel/IOFactory.php(141): PHPExcel_Writer_PDF->__construct(Object(PHPExcel))
#4 /home/notiogrg/public_html/dev/approvalRequest/generatePDF.php(102): PHPExcel_IOFactory::createWriter(Object(PHPExcel), 'PDF')
#5 {main}
  thrown in /home/notiogrg/public_html/dev/excelHelper/PHPExcel/Writer/PDF/tcPDF.php on line 35
你能告诉我一个线索吗?我确定我用导入或$rendererLibrary变量搞砸了一些东西,但我真的无法找到解决方案。

2 个答案:

答案 0 :(得分:2)

https://github.com/PHPOffice/PHPExcel/blob/develop/Documentation/markdown/Overview/10-Reading-and-Writing.md#pdf

您需要先安装tcPDF,它不与PHPExcel捆绑在一起。 然后你需要正确配置PHPExcel,甚至可能需要配置tcPDF。

答案 1 :(得分:1)

在这里提问之前,阅读flip card tutorial应该是你的第一选择。

  

PDF

     

PHPExcel允许您将电子表格编写为PDF格式,以便快速分发所表示的数据。

     

PDF限制请注意,PDF文件格式在样式单元格,数字格式等方面有一些限制。

     

PHPExcel_Writer_PDF

     

PHPExcel的PDF Writer是第三方PDF渲染库的包装器,如tcPDF,mPDF或DomPDF。在PHPExcel 1.7.8版之前,tcPDF库与PHPExcel捆绑在一起;但是从版本1.7.8开始,这被删除了。相反,您现在必须自己安装PDF渲染库;但PHPExcel将与许多不同的库一起使用。

     

目前,支持以下库:

|---------|---------|-----------------------------------------|----------------------------| | | Version | | | | Library | tested | Downloadable from | PHPExcel Internal Constant | |---------|---------|-----------------------------------------|----------------------------| | tcPDF | 5.9 | http://www.tcpdf.org/ | PDF_RENDERER_TCPDF | | mPDF | 5.4 | http://www.mpdf1.com/mpdf/ | PDF_RENDERER_MPDF | | domPDF | 0.6.0 | beta 3 http://code.google.com/p/dompdf/ | PDF_RENDERER_DOMPDF | |---------|---------|-----------------------------------------|----------------------------|

  

不同的图书馆有不同的优点和缺点。有些生成比其他更好的格式化输出,有些比其他更快或使用更少的内存,而有些生成更小的.pdf文件。根据自己的具体情况,开发人员可以选择使用哪种方式。

     

在实例化Writer以生成PDF输出之前,您需要指明您正在使用哪个渲染库以及它所在的位置。

$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;
$rendererLibrary = 'mPDF5.4';
$rendererLibraryPath = dirname(__FILE__).'/../../../libraries/PDF/' . $rendererLibrary;

if (!PHPExcel_Settings::setPdfRenderer(
    $rendererName,
    $rendererLibraryPath
    )) {
    die(
        'Please set the $rendererName and $rendererLibraryPath values' .
        PHP_EOL .
        ' as appropriate for your directory structure'
    );
}

您没有将$rendererLibraryPath设置为指向您安装的任何PDF渲染库的PHPExcel包装器(PHPExcel已经知道);您将其设置为指向已安装tcPdf的文件夹(或您正在使用的任何库)。