2012-12-24 54 views
6

我想創建一個包含12個月數據等巨大數據的PDF文件。 每月從MySQL表中包含500行。我已經嘗試過使用FPDF,但花費太多的時間是不可接受的。如果還有其他更好的PHP庫或類可以輕鬆完成並且不會使系統繁忙?使用PHP創建從MySQL獲取大量數據的PDF文件

如果有一個腳本需要一個月的時間將一個月的數據寫入一個月,然後逐個寫入PDF並最終創建PDF文件?

+0

你想要的東西像HTML到PDF嗎? –

+0

舊數據(即前幾個月)會改變嗎?如果沒有,那麼你可以保留'previous-months.pdf'的文件副本,並重新生成當前月份。然後,在向用戶提供服務時,合併這兩個PDF文件 - 這可能會更快。 – halfer

+1

或者,當用戶希望下載長的PDF報告時,將需求排列在表中,並使用cron-job生成加電子郵件發送給他們。 – halfer

回答

1

構建PDF總是很長。如果你有大量的資源,它將會非常長,你無法避免。 我可以看到一種方式對你的用戶來說更柔和一些:

發送給他們一個html呈現器,然後用Ajax使pdf生成異步。所以你可以顯示一個狀態欄。並通知您的用戶您正在執行他們的需求。

  • 使用dom2pdf或這樣的庫,使您的HTML渲染PDF文件
  • 創建一個使用FPDF和硬編碼配置
  • 然後生成可technicaly通過三種方式進行乳膠字符串,然後使用proc_open要求乳膠編譯器構建PDF文件。這是一個非常快速和可靠的工具,但它需要你有一個專用服務器而不是共享主機。

1
// you can used fpdf like this. 
<?php 
require('fpdf.php'); 

class PDF extends FPDF 
{ 
    // Page header 
    function Header() 
    { 
    // Logo 
    $this->Image('logo.png',10,6,30); 
    // Arial bold 15 
    $this->SetFont('Arial','B',15); 
    // Move to the right 
    $this->Cell(80); 
    // Title 
    $this->Cell(30,10,'Title',1,0,'C'); 
    // Line break 
    $this->Ln(20); 
    } 

    // Page footer 
function Footer() 
{ 
    // Position at 1.5 cm from bottom 
    $this->SetY(-15); 
    // Arial italic 8 
    $this->SetFont('Arial','I',8); 
    // Page number 
    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C'); 
} 
} 

// Instanciation of inherited class 
$pdf = new PDF(); 
$pdf->AliasNbPages(); 
$pdf->AddPage(); 
$pdf->SetFont('Times','',12); 
for($i=1;$i<=40;$i++) 
$pdf->Cell(0,10,'Printing line number '.$i,0,1); 
$pdf->Output(); 
?> 
2

我照例從PHP使用創建非常大的PDF文件(通常)相同的方法。首先,我創建文檔的網頁版本並將其輸出到文件。然後我通過wkhtmltopdf運行該文件。這種方法比其他任何方式都取得了更大的成功。 HTML應該很快生成,而wkhtmltopdf的速度和效率令人驚訝。另外,您可以使用CSS3技術進行精細的格式化。

對於非常大的PDF文件,我也生成了較小的PDF文件,然後將它們與pdfmeld合併。這也使您可以選擇添加書籤。

+0

感謝您寶貴的建議。如果可能,請提供演示鏈接? – Nantu