2013-02-05 111 views
1

嘗試並未能使用PHPExcel 1.7.6(內存不足錯誤)生成PDF後,我升級到1.7.8。我不能爲了我的生活找出如何讓它工作。我試過tcPDF和mPDF,兩者都是一樣的。phpexcel pdf渲染庫尚未定義

把它放回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; 

(也就是說,頗能一個示例代碼複印件)

在完整性的利益,頭m使用的是

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

有一件事我注意到可能會使事情發生變化w因爲這樣做:

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

也就是說,與一切,我在PHPExcel所做的,我不包括從所有的編輯器文件夾東西。我記得最好的是,這一次和一週前的問題有所不同。一旦我從1.7.8的Tests文件夾中抓取了01simple-download-pdf.php文件,它主要是從它複製代碼並將其調整到我的路徑。

總結一下,只留下$ rendererName。 $ rendererLibrary是包含庫的文件夾的名稱,在我的情況下是'dompdf'。 $ rendererLibraryPath實際上是設置該文件夾的路徑,所以它以包含pdf庫文件夾的路徑結束。

應該很明顯,我不是超級hax0r,但是SO已經爲我回答了很多很多編程問題。我希望這可以幫助別人,所以他們不像我那樣浪費時間。

+0

請注意,這次我沒有使用頭文件。就我而言,這是我的最終目標是從命令行運行的腳本。儘管如此,我沒有看到任何理由說明基於瀏覽器的腳本無法正確設置標題。 – Bendustries

+0

嗨,我也有渲染路徑的麻煩。我應該包括哪些東西的路徑? – Limon

+1

它需要你的pdf渲染庫所在的路徑。就是說,在我上面的例子中,在XAMPP下,我在H:\的根目錄下安裝了XAMPP。對於PHP,我的include路徑是\ php \ pear,我追加了\ Classes。 \ Classes生活在dompdf目錄中。所以Windows中的完整路徑是H:\ xampp \ php \ pear \ Classes \。在您的腳本中,您只需將'$ rendererLibraryPath'設置爲包含渲染器庫目錄的文件夾即可。 – Bendustries

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