Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] FPDF Problem

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] FPDF Problem

    Hallo zusammen. Hoffe das ich hier richtig gelandet bin.

    Folgendes Problem habe ich. Ich möchte Daten aus meiner db auslesen, und in mehrere pdf schreiben. Also jeweils ein Eintrag für eine PDF. Danach die PDF serverseitig zusammenführen und zum download anbieten.

    Ich habe meinen Quellcode bisher soweit:

    PHP-Code:
    <?php
    define
    ('FPDF_FONTPATH','font/');
    require(
    'fpdi.php');
    require_once(
    'fpdf.php');

    require_once (
    'mysql.inc.php');
    // db connect
    $db_link mysql_connect MYSQL_HOST
                               
    MYSQL_BENUTZER
                               
    MYSQL_KENNWORT );
     
    $db_sel mysql_select_dbMYSQL_DATENBANK )
       or die(
    "Auswahl der Datenbank fehlgeschlagen");
     
    $sql mysql_query("SELECT * FROM datenbankname");
    // anzahl Zeilen
    $num mysql_num_rows($sql);

    // ausgabe
    echo '<table border="1">';
    while (
    $zeile mysql_fetch_array$sqlMYSQL_ASSOC))
    {
      echo 
    "<tr>";
      echo 
    "<td>"$zeile['id'] . "</td>";
      echo 
    "<td>"$zeile['name'] . "</td>";
      echo 
    "</tr>";
    }
    echo 
    "</table>";
    // ausgabe anzahl Zeilen
    echo $num;

    mysql_free_result$sql );

    // pdf erstellen

    //$num = 10;

    for($i=1$i <= $num$i++){ 
        
    $pdf=new FPDF();  
        
    $pdf->SetFont('Arial','',12);  
        
    $pdf->AddPage(); 
        
    $pdf->Cell(0,0,"Seite $i"); 
        
    $pdf->Output($i.'.pdf''F');  
      } 

      
    // pdf zusammenführen
    class concat_pdf extends fpdi {


         var 
    $files = array();

         function 
    concat_pdf($orientation='P',$unit='mm',$format='A4') {
             
    parent::fpdi($orientation,$unit,$format);
         }

         function 
    setFiles($files) {
             
    $this->files $files;
         }

         function 
    concat() {
             foreach(
    $this->files AS $file) {
                 
    $pagecount $this->setSourceFile($file);
                 for (
    $i 1$i <= $pagecount$i++) {
                      
    $tplidx $this->ImportPage($i);
                      
    $this->AddPage();
                      
    $this->useTemplate($tplidx);
                 }
             }
         }

    }

    $pdf= new concat_pdf();

    for(
    $j=1$j <= $num$j++){ 
    $pdf->setFiles(array("$j.pdf"));
    $pdf->concat();
    }
    $pdf->Output("NeuerName.pdf","D");

    ?>
    Es funktioniert wenn ich $num auf 10 Stelle und sage er soll eben 10 PDF erstellen. Die erstellt er und bietet sie zum download an. Wenn ich jetzt allerdings die Daten aus der db abfrage und $num auf die Anzahl der Zeilen in der db setze, kommt folgender Fehler:

    FPDF error: Some data has already been output, can't send PDF file

    Verstehe nicht genau woran es hapert. Hat jemand eine Idee?

    Vielen dank schonmal.

    ERGÄNZUNG:

    also mir ist klar was der Fehler bedeutet, verstehe aber nicht wo er ist?
    Des weiteren ist mir auch klar das aktuell noch keine Informationen in die PDF geschrieben werden aus der db. Aber der Zugriff funktioniert ja. Leider wird irgendwas schon in den output gepackt?

  • #2
    du gibst eine Tabelle aus, bevor du dein PDF erzeugst und ausgibst...

    Kommentar


    • #3
      Jau daran lags. Wie doof. Danke für die schnelle Hilfe.

      Kommentar


      • #4
        Jetzt scheiterts am nächsten. Ich möchte gerne einen Eintrag jeder Spalte einmal pro pdf haben. Sprich das Script nimmt zeile 1 und packt die infos in die pdf1.. dann zeile 2 und in pdf2 usw.

        kriege leider nur Fehler und Probleme.

        Das ist mein Ansatz:

        PHP-Code:
        $row mysql_fetch_array($sqlMYSQL_ASSOC);

        for(
        $i=1$i <= $num$i++){ 
            
        $pdf=new FPDF();  
            
        $pdf->SetFont('Arial','',12);  
            
        $pdf->AddPage(); 
            
        $pdf->Cell(0,0,'.$row->name.');
            
        $pdf->Output($i.'.pdf''F');  
          } 
        Hier das geänderte Gesamte nochmal:

        PHP-Code:
        <?php
        define
        ('FPDF_FONTPATH','font/');
        require(
        'fpdi.php');
        require_once(
        'fpdf.php');

        require_once (
        'mysql.inc.php');
        // db connect
        $db_link mysql_connect MYSQL_HOST
                                   
        MYSQL_BENUTZER
                                   
        MYSQL_KENNWORT );
         
        $db_sel mysql_select_dbMYSQL_DATENBANK )
           or die(
        "Auswahl der Datenbank fehlgeschlagen");
         
        $sql mysql_query("SELECT * FROM dbname");
        // anzahl Zeilen
        $num mysql_num_rows($sql);


        // ausgabe anzahl Zeilen
        mysql_free_result$sql );

        // pdf erstellen

        //$num = 10;
        $row mysql_fetch_array($sqlMYSQL_ASSOC);

        for(
        $i=1$i <= $num$i++){ 
            
        $pdf=new FPDF();  
            
        $pdf->SetFont('Arial','',12);  
            
        $pdf->AddPage(); 
            
        $pdf->Cell(0,0,'.$row->name.');
            
        $pdf->Output($i.'.pdf''F');  
          } 

          
        // pdf zusammenführen
        class concat_pdf extends fpdi {


             var 
        $files = array();

             function 
        concat_pdf($orientation='P',$unit='mm',$format='A4') {
                 
        parent::fpdi($orientation,$unit,$format);
             }

             function 
        setFiles($files) {
                 
        $this->files $files;
             }

             function 
        concat() {
                 foreach(
        $this->files AS $file) {
                     
        $pagecount $this->setSourceFile($file);
                     for (
        $i 1$i <= $pagecount$i++) {
                          
        $tplidx $this->ImportPage($i);
                          
        $this->AddPage();
                          
        $this->useTemplate($tplidx);
                     }
                 }
             }

        }

        $pdf= new concat_pdf();

        for(
        $j=1$j <= $num$j++){ 
        $pdf->setFiles(array("$j.pdf"));
        $pdf->concat();
        }
        $pdf->Output("NeuerName.pdf","D");

        ?>
        error: Warning: mysql_fetch_array(): 11 is not a valid MySQL result resource in C:\xampp\htdocs\fpdi\concat_pdf.php on line 26
        FPDF error: Some data has already been output, can't send PDF file


        Line 26 ist $row = mysql_fetch_array($sql, MYSQL_ASSOC);

        Kommentar


        • #5
          PHP-Code:
          mysql_free_result$sql ); 
          Damit "leerst" du den Ergebnis-Cache und deine Ergebnisse sind weg.

          Kommentar


          • #6
            Ja richtig. Das hab ich jetzt ans Ende des PDF erstellens gepackt. Sollte man das eig. immer machen? Also das leeren? oder ist das egal?

            Kommentar


            • #7
              In den neueren PHP-Versionen (so >4.2 o.ä.) ist das egal. Bei Ende des Skriptes wird das "automatisch" ausgeführt.

              Kommentar


              • #8
                super danke. Ihr habt mir sehr geholfen.

                Kommentar

                Lädt...
                X