2012-12-24 18 views
6

Voglio fare un file PDF che conterrà enormi dati, come 12 mesi di dati. Ogni mese contiene 500 righe dalla tabella MySQL. Ho provato con FPDF ma ci vuole troppo tempo che è inaccettabile. Se c'è qualche altra migliore libreria o classe PHP per renderla facilmente e non rendere il sistema occupato?Crea un file PDF prendendo i dati enorme da MySQL utilizzando PHP

Se c'è qualche script che avrà 12 mesi i dati un mese un mese e scriverlo in PDF uno per uno e, infine, creare il file PDF?

+0

si desidera smething come HTML a PDF? –

+0

I vecchi dati (ad esempio nei mesi precedenti) cambieranno del tutto? In caso contrario, potresti conservare una copia di 'previous-months.pdf' e rigenerare solo il mese corrente. Quindi, quando serve all'utente, unire i due file PDF - che sarà probabilmente più veloce. – halfer

+1

In alternativa, quando un utente desidera scaricare un report PDF lungo, accodare il requisito in una tabella e utilizzare una generazione di processi di cron più email per inviarlo a loro. – halfer

risposta

1

Costruire un PDF è sempre molto lunga. Se hai una grande quantità di risorse, sarà molto lunga, non puoi evitarlo. Riesco a vedere un modo per farlo in modo più morbido per gli utenti:

Inviando loro un rendering html, e quindi con Ajax rendere la generazione di file PDF asincrona. Quindi puoi visualizzare una barra di stato. e informa i tuoi utenti che stanno eseguendo la loro richiesta.

Poi la generazione può essere technicaly eseguita in tre modi:

  • utilizzando FPDF e duro codifica la disposizione
  • utilizzando dom2pdf o una libreria per rendere il vostro html rendere un file pdf
  • creare un stringa di lattice e quindi utilizzando proc_open chiedere compilator lattice per costruire un file pdf. È uno strumento davvero veloce e affidabile, ma ha bisogno di un server dedicato e non di un host condiviso.
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

Io abitualmente creo molto grandi file PDF da PHP utilizzando (di solito) lo stesso metodo. Per prima cosa creo una versione di una pagina Web del documento e la metto in uscita in un file. Quindi eseguo il file tramite wkhtmltopdf. Ho avuto sempre più successo con questo metodo rispetto a qualsiasi altro. L'HTML dovrebbe essere veloce da generare e wkhtmltopdf è sorprendentemente veloce ed efficiente. Inoltre, è possibile utilizzare le tecniche CSS3 per la formattazione elaborata.

Per estremamente grandi file PDF Ho anche generato quelli più piccoli e poi fusa con pdfmeld. Questo ti dà anche la possibilità di aggiungere segnalibri.

+0

Grazie per il tuo prezioso suggerimento. Si prega di fornire un link dimostrativo se possibile? – Nantu