2012-01-16 158 views
2

我有一個名爲welcomemailtemplate.html的html文件,我需要將該文件轉換爲PDF。PHP:將html文件轉換爲pdf

我首先使用由Yii框架提供了下面的方法讀取此文件:

$filename = Yii::app()->basePath.'\views\email\welcomemailtemplate.html'; 
$handle = fopen($filename, "r"); 
$contents = fread($handle, filesize($filename)); 
$name = $model->name; 
fclose($handle); 
$message = str_replace ("[username]", $name, $contents); 

然後,向生成的PDF文件時,設置以下參數:

Yii::import('application.vendors.*'); 
     require_once('tcpdf/tcpdf.php'); 
     require_once('tcpdf/config/lang/eng.php'); 
     $pdf = new TCPDF(); 
     $pdf->SetCreator("Torget"); 
     $pdf->SetAuthor('test name'); 
     $pdf->SetTitle('Savani Test'); 
     $pdf->SetSubject(' Torget Order Confirmation'); 
     $pdf->SetKeywords(' Torget, Order, Confirmation'); 
     //$pdf->SetHeaderData('', 0, PDF_HEADER_TITLE, ''); 
     $pdf->SetHeaderData('', 0, "Torget Order", ''); 
     $pdf->setHeaderFont(Array('helvetica', '', 8)); 
     $pdf->setFooterFont(Array('helvetica', '', 6)); 
     $pdf->SetMargins(15, 18, 15); 
     $pdf->SetHeaderMargin(5); 
     $pdf->SetFooterMargin(10); 
     $pdf->SetAutoPageBreak(TRUE, 0); 
     $pdf->SetFont('dejavusans', '', 7); 
     $pdf->AddPage(); 

如果我通過內容如下,它創建PDF:

$pdf->writeHTML("<span>Hello World!</span>", true, false, true, false, ''); 

但是,如果我通過讀取html文件co ntent用於使用以下方法它給出以下錯誤PDF創建:

$pdf->writeHTML($message, true, false, true, false, ''); 
     $pdf->LastPage(); 

錯誤消息:

Undefined index: thead 
+1

也許該模板是無效的HTML?你有沒有嘗試驗證它? – 2012-01-16 09:10:34

+0

html模板文件可以在瀏覽器上查看,所以我假設它沒有任何錯誤 – KItis 2012-01-16 09:11:58

+2

@KItis - 瀏覽器執行大量的錯誤恢復,所以這是一個可怕的假設。 – Quentin 2012-01-16 09:20:57

回答

3

嘗試驗證使用W3C驗證http://validator.w3.org/該文件。
我已經與tcpdf工作過,但我放棄了,因爲它似乎並不可靠。您也可以嘗試使用wkhtmltopdf二進制文件(僅當您的主機允許您使用proc_open/proc_close時)。似乎對我來說更穩定一些。它也有一個PHP class來幫助你使用它。

1

CutyCapt對你來說似乎是一個很好的選擇。它也很容易整合。