PHP Handbuch
Zurück |  | Nach vorne

# X. ClibPDF Funktionen

Mit der ClibPDF können Sie PDF-Dokumente mit PHP erstellen. Diese Bibliothek ist zum Herunterladen erhältlich von FastIO, aber für deren kommerzielle Verwendung ist es erforderlich, dass Sie eine Lizenz erwerben. Funktionalität und API der ClibPDF sind der PDFlib ähnlich.

Diese Dokumentation sollten Sie zusammen mit dem ClibPDF-Handbuch lesen, weil letzteres diese Bibliothek viel ausführlicher erklärt.

Die Namen vieler Funktionen in der ClibPDF, im PHP-Modul und in der PDFlib sind gleich. Außer cpdf_open() nehmen alle Funktionen die Bezeichnung des Dokuments als ihren ersten Parameter.

Diese Bezeichnung wird gegenwärtig nicht intern verwendet, weil ClibPDF die gleichzeitige Erzeugung mehrerer PDF-Dokumente nicht unterstützt. Da das Ergebnis nicht vorhersehbar ist, sollten Sie es am besten nicht einmal testen. Die Folgen, die das in einer multi-threaded Umgebung hätte, kann ich nicht abschätzen. Laut ClibPDF-Autor wird sich das in einer der nächsten Versionen ändern (als dieses geschrieben wurde, war Version 1.10 aktuell). Verwenden Sie das pdflib-Modul, wenn Sie diese Funktionalität benötigen.

> Anmerkung: Die Funktion cpdf_set_font() hat sich seit PHP 3 geändert und unterstützt nun asiatische Zeichensätze. Der Kodierungsparameter ist keine Zahl mehr, sondern eine Zeichenkette.

Eine nette Eigenschaft der ClibPDF (und der PDFlib) ist die Möglichkeit, das PDF-Dokument vollständig im Speicher zu erzeugen, ohne temporäre Dateien zu verwenden. Sie bietet auch die Möglichkeit, Koordinaten in einer vordefinierten Längeneinheit zu übergeben. Dies ist eine praktische Fähigkeit, die bei Verwendung der PDFlib aber auch mit pdf_translate() simuliert werden kann.

Eine weitere nette Eigenschaft von ClibPDF ist die Tatsache, dass jede Seite jederzeit geändert werden kann, selbst wenn schon eine neue Seite geöffnet wurde. Die Funktion cpdf_set_current_page() erlaubt es, die aktuelle Seite zu verlassen und mit den Änderungen einer anderen Seite fortzufahren.

Die meisten Funktionen sind ziemlich einfach zu benutzen. Der schwierigste Teil ist wahrscheinlich die Erzeugung eines sehr einfachen PDF-Dokuments überhaupt. Das folgende Beispiel sollte für Sie eine gute Starthilfe sein. Es erzeugt ein Dokument mit einer Seite. Die Seite enthält den Umriss des Textes "Times-Roman" in 30-Punkt-Schrift. Der Text ist unterstrichen.

Beispiel 1. Ein einfaches ClibPDF-Beispiel
    <?php
    $cpdf = cpdf_open(0);
    cpdf_page_init($cpdf, 1, 0, 595, 842);
    cpdf_add_outline($cpdf, 0, 0, 0, 1, "Seite 1");
    cpdf_begin_text($cpdf);
    cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
    cpdf_set_text_rendering($cpdf, 1);
    cpdf_text($cpdf, "Times Roman outlined", 50, 750);
    cpdf_end_text($cpdf);
    cpdf_moveto($cpdf, 50, 740);
    cpdf_lineto($cpdf, 330, 740);
    cpdf_stroke($cpdf);
    cpdf_finalize($cpdf);
    Header("Content-type: application/pdf");
    cpdf_output_buffer($cpdf);
    cpdf_close($cpdf);
    ?>

Die pdflib-Distribution enthält ein komplexeres Beispiel, das eine Reihe von Seiten mit einer Analoguhr erzeugt. Hier ist dieses Beispiel, das unter Verwendung der ClibPDF-Erweiterung in PHP konvertiert wurde:

Beispiel 2. pdfclock-Beispiel der pdflib 2.0 Distribution
    <?php
    $radius = 200;
    $margin = 20;
    $pagecount = 40;

    $pdf = cpdf_open(0);
    cpdf_set_creator($pdf, "pdf_clock.php3");
    cpdf_set_title($pdf, "Analog Clock");

    while($pagecount-- > 0) {
      cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);

      cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0);  /* wipe */

      cpdf_translate($pdf, $radius + $margin, $radius + $margin);
      cpdf_save($pdf);
      cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);

      /* minute strokes */
      cpdf_setlinewidth($pdf, 2.0);
      for ($alpha = 0; $alpha < 360; $alpha += 6)
        {
        cpdf_rotate($pdf, 6.0);
        cpdf_moveto($pdf, $radius, 0.0);
        cpdf_lineto($pdf, $radius-$margin/3, 0.0);
        cpdf_stroke($pdf);
        }

      cpdf_restore($pdf);
      cpdf_save($pdf);

      /* 5 minute strokes */
      cpdf_setlinewidth($pdf, 3.0);
      for ($alpha = 0; $alpha < 360; $alpha += 30)
      {
        cpdf_rotate($pdf, 30.0);
        cpdf_moveto($pdf, $radius, 0.0);
        cpdf_lineto($pdf, $radius-$margin, 0.0);
        cpdf_stroke($pdf);
      }

      $ltime = getdate();

      /* draw hour hand */
      cpdf_save($pdf);
      cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0);
      cpdf_moveto($pdf, -$radius/10, -$radius/20);
      cpdf_lineto($pdf, $radius/2, 0.0);
      cpdf_lineto($pdf, -$radius/10, $radius/20);
      cpdf_closepath($pdf);
      cpdf_fill($pdf);
      cpdf_restore($pdf);

      /* draw minute hand */
      cpdf_save($pdf);
      cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0);
      cpdf_moveto($pdf, -$radius/10, -$radius/20);
      cpdf_lineto($pdf, $radius * 0.8, 0.0);
      cpdf_lineto($pdf, -$radius/10, $radius/20);
      cpdf_closepath($pdf);
      cpdf_fill($pdf);
      cpdf_restore($pdf);

      /* draw second hand */
      cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
      cpdf_setlinewidth($pdf, 2);
      cpdf_save($pdf);
      cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
      cpdf_moveto($pdf, -$radius/5, 0.0);
      cpdf_lineto($pdf, $radius, 0.0);
      cpdf_stroke($pdf);
      cpdf_restore($pdf);

      /* draw little circle at center */
      cpdf_circle($pdf, 0, 0, $radius/30);
      cpdf_fill($pdf);

      cpdf_restore($pdf);

      cpdf_finalize_page($pdf, $pagecount+1);
    }

    cpdf_finalize($pdf);
    Header("Content-type: application/pdf");
    cpdf_output_buffer($pdf);
    cpdf_close($pdf);
    ?>

Zurück | Zum Anfang | Nach vorne
method_exists | Nach oben | cpdf_add_annotation