Dirk Eckert: pdf mit php aus mysql-datenbank erzeugen

Hallo,

ich versuche, mit php ein pdf zu erzeugen. Der Inhalt kommt aus einer MySQL-Datenbank. Das klappt mit Hilfe der entsprechenden Skripte zur pdf-Erzeugung ganz gut.

Ich bekomme das Script aber nicht so hin, dass automatisch eine oder eben mehrere pdf-Seiten erstellt werden, je nachdem, wie lang der Inhalt aus der Datenbank ist.

Kann mir da jemand helfen, oder weiss jemand ein Beispielscript im Internet?

Besten Dank
Dirk Eckert

  1. Hallo,

    ich versuche, mit php ein pdf zu erzeugen. Der Inhalt kommt aus einer MySQL-Datenbank. Das klappt mit Hilfe der entsprechenden Skripte zur pdf-Erzeugung ganz gut.

    Welcher Scripte? Verwendest Du PDFLib (http://www.php.net/manual/en/ref.pdf.php) oder CLibPDF? (http://www.php.net/manual/en/ref.cpdf.php)

    Ich bekomme das Script aber nicht so hin, dass automatisch eine oder eben mehrere pdf-Seiten erstellt werden, je nachdem, wie lang der Inhalt aus der Datenbank ist.

    Du musst Dir die aktuelle Position auf der Seite merken, und wenn dieser Zeiger unter einen bestimmten Wert rutscht, musst Du eine neue Seite starten. (um das jetzt mal ganz abstrakt zu betrachten)

    Grüße,

    Christian

    1. Hallo,

      ich versuche, mit php ein pdf zu erzeugen. Der Inhalt kommt aus einer MySQL-Datenbank. Das klappt mit Hilfe der entsprechenden Skripte zur pdf-Erzeugung ganz gut.

      Welcher Scripte? Verwendest Du PDFLib (http://www.php.net/manual/en/ref.pdf.php)

      die PDFLib

      oder CLibPDF? (http://www.php.net/manual/en/ref.cpdf.php)

      Ich bekomme das Script aber nicht so hin, dass automatisch eine oder eben mehrere pdf-Seiten erstellt werden, je nachdem, wie lang der Inhalt aus der Datenbank ist.

      Du musst Dir die aktuelle Position auf der Seite merken, und wenn dieser Zeiger unter einen bestimmten Wert rutscht, musst Du eine neue Seite starten. (um das jetzt mal ganz abstrakt zu betrachten)

      Gut, das klappt soweit, außer dass das Script noch nicht in der Lage ist, eine dritte Seite anzufangen, bzw. zu erkennen, wann der Text zu Ende ist (stattdessen beginnt der Text von vorne). Das sieht bisher so aus

      ...
      //Seite 1, zweispaltig
      $nr = pdf_show_boxed($pdfdoc, $z["t"], 20.0, 20.0, 190.0, 200.0, "left");
      $nr = pdf_show_boxed($pdfdoc, substr($z["t"], -$nr), 220.0, 20.0, 190.0, 200.0, "left");
      pdf_end_page($pdfdoc);

      //Seite 2, Rest von 1 wird in $nr übergeben
      if (isset ($nr)) {
      pdf_begin_page($pdfdoc, 421, 595);
      pdf_set_font($pdfdoc, "Times-Roman", 6, "host");
      $nr = pdf_show_boxed($pdfdoc, substr($z["t"], -$nr), 20.0, 20.0, 190.0, 555.0, "left");
      $nr = pdf_show_boxed($pdfdoc, substr($z["t"], -$nr), 220.0, 20.0, 190.0, 555.0, "left");
      pdf_end_page($pdfdoc);
      }

      Grüße, Dirk

      Grüße,

      Christian

      1. Hallo,

        Gut, das klappt soweit, außer dass das Script noch nicht in der Lage ist, eine dritte Seite anzufangen, bzw. zu erkennen, wann der Text zu Ende ist (stattdessen beginnt der Text von vorne). Das sieht bisher so aus

        ...

        Deinen Code verstehe ich jetzt nicht so ganz...

        "Abstrakter" Beispielcode:

        // seite hier anfangen
        pdf_begin_page($pdfdoc, 421, 595);
        // evtl. noch etwas ausgeben
        // zähler starten
        $counter = 0;

        for ($i = 0; $i < $anz_datensaetze; $i++) {
          // datensaetze ausgeben und counter hochzählen
          if ($counter > $max_anz_datensaetze_pro_seite) {
            // evtl. noch was ausgeben
            // seite schließen
            pdf_end_page ($pdfdoc);
            // seite hier anfangen
            pdf_begin_page($pdfdoc, 421, 595);
            // evtl. noch etwas ausgeben
            // zähler starten
            $counter = 0;
          }
        }

        // evtl. noch was ausgeben
        // seite schließen
        pdf_end_page ($pdfdoc);

        So sollte das vom Prinzip her funktionieren.

        Grüße,

        Christian