• User

    Php-mysql-pdf

    Salve, ho un problema
    Devo preparare delle stampe in PDF con dati che provengono da un database Mysql.

    Ho utilizzato un esempio che utilizzando il modulo fpdf.php stampa il contenuto di un file di tipo testo, dove i campi sono separati da ";".
    Non mi sembra una buona soluzione in quanto mi sembra strano che dal database mi devo costruire questo file di tipo txt e successivamente produrre la stampa;
    Il problema è che non riesco a fare le due cose nello stesso modulo. Mi da' il seguente errore:
    Warning: Cannot modify header information - headers already sent by (output started at c:\programmi\easyphp1-8\www\mensa\fpdf\tutorial\stampa_citta.php:11) in c:\programmi\easyphp1-8\www\mensa\fpdf\fpdf.php on line 1022
    **FPDF error: **Some data has already been output to browser, can't send PDF file

    Qualcuno mi può dare una mano con un esempio chiarificatore?
    Grazie
    Ciao
    Rita


  • Super User

    Senza il codice di stampa_citta.php non credo che si possa essere molto di aiuto.
    Non capisco perchè occorre creare il file di testo (forse percfhe non conosco questo "modulo fpdf".
    Hai provato ad utilizzare la classe R&OS ?


  • User

    Salve ,il mio codice si sviluppa su due pagine:
    la prima legge i dati dal database e costruisce il file CITTA.txt e corrisponde al codice seguente:

    $path ="CITTA.txt";
    $idmiofile =fopen($path,"w");
    $conn = mysql_connect("localhost","root","");
    mysql_select_db("mensa_scolastica")or die(print(mysql_error()));

    $strSQL="SELECT * FROM citta order by denominazione";
    $risultato = mysql_query($strSQL) or die (print(mysql_error()));
    $numero_righe = mysql_num_rows($risultato);
    echo("nr righe=".$numero_righe);

    $i=0;

    while($i <$numero_righe)
    {
    $codice = mysql_result($risultato,$i,'id');
    $denominazione = mysql_result($risultato,$i,'denominazione');
    $provincia = mysql_result($risultato,$i,'provincia');
    $CAP = mysql_result($risultato,$i,'CAP');
    //if (($provincia == null)or($provincia =""))
    // {
    // $provincia =" ";
    // }
    // if (($CAP == null)or( $CAP =""))
    //{
    // $CAP =" ";
    // }
    $line = $codice .";" . $denominazione. ";" . $provincia . ";" .$CAP ."\r\n";
    fwrite($idmiofile,$line);
    $i=$i+1;
    }

    mysql_close($conn);

    ?>

    il secondo codice, legge il file costruito e produce la stampa:

    <?php
    require('../fpdf.php');
    class PDF extends FPDF
    {
    //Load data
    function LoadData($file)
    {
    //Read file lines
    $lines=file($file);
    $data=array();
    foreach($lines as $line)
    $data[]=explode(';',chop($line));

    return $data;
    }
    //Simple table
    function BasicTable($header,$data)
    {
    //Header
    foreach($header as $col)
    $this->Cell(40,7,$col,1);
    $this->Ln();
    //Data
    foreach($data as $row)
    {
    foreach($row as $col)
    $this->Cell(40,6,$col,1);
    $this->Ln();
    }
    }
    //Better table
    function ImprovedTable($header,$data)
    {
    //Column widths
    $w=array(30,80,30,30);
    //Header
    for($i=0;$i<count($header);$i++)
    $this->Cell($w*,7,$header*,1,0,'C');
    $this->Ln();
    //Data
    foreach($data as $row)
    {
    $this->Cell($w[0],6,$row[0],'LR');
    $this->Cell($w[1],6,$row[1],'LR');
    $this->Cell($w[2],6,number_format($row[2]),'LR',0,'R');
    $this->Cell($w[3],6,number_format($row[3]),'LR',0,'R');
    $this->Ln();
    }
    //Closure line
    $this->Cell(array_sum($w),0,'','T');
    }
    //Colored table
    function FancyTable($header,$data)
    {
    //Colors, line width and bold font
    $this->SetFillColor(255,0,0);
    $this->SetTextColor(255);
    $this->SetDrawColor(128,0,0);
    $this->SetLineWidth(.3);
    $this->SetFont('','B');
    //Header
    $w=array(25,80,30,30);
    for($i=0;$i<count($header);$i++)
    $this->Cell($w*,7,$header*,1,0,'C',1);
    $this->Ln();
    //Color and font restoration
    $this->SetFillColor(224,235,255);
    $this->SetTextColor(0);
    $this->SetFont('');
    //Data
    $fill=0;
    foreach($data as $row)
    {
    $this->Cell($w[0],6,$row[0],'LR',0,'R',$fill);
    $this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
    $this->Cell($w[2],6,$row[2],'LR',0,'L',$fill);
    $this->Cell($w[3],6,$row[3],'LR',0,'L',$fill);
    $this->Ln();
    $fill=!$fill;
    }
    $this->Cell(array_sum($w),0,'','T');
    }
    }
    $pdf=new PDF();
    //Column titles
    $header=array('Codice','Denominazione','Provincia','CAP');
    //Data loading
    $data=$pdf->LoadData('CITTA.txt');
    $pdf->SetFont('Arial','',14);
    $pdf->AddPage();
    //$pdf->BasicTable($header,$data);
    //$pdf->AddPage();
    // $pdf->ImprovedTable($header,$data);
    // $pdf->AddPage();
    $pdf->FancyTable($header,$data);
    $pdf->Output();
    ?>

    1° problema : come agganciare la prima pagina alla seconda, perchè se li metto insieme mi dà l'errore di cui vi ho parlato prima:
    2° problema : come realizzare il tutto in una unica pagina.
    Grazie e a presto
    Rita


  • Super User

    L'errore che hai esposto nel primo post è dovuto a un comando **echo **, non puoi inviare dai al browser e poi cambiare il tipo di documento da produrre


  • Super User

    @Gorka said:

    L'errore che hai esposto nel primo post è dovuto a un comando **echo **, non puoi inviare dai al browser e poi cambiare il tipo di documento da produrre

    Era quello che cercavo 🙂