ClibPDF Funktionen

PHP Handbuch
Zurück |  | Nach vorne

# X. ClibPDF Funktionen

# Einführung

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.

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.

# Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

`CPDF_PM_NONE` (integer)

`CPDF_PM_OUTLINES` (integer)

`CPDF_PM_THUMBS` (integer)

`CPDF_PM_FULLSCREEN` (integer)

`CPDF_PL_SINGLE` (integer)

`CPDF_PL_1COLUMN` (integer)

`CPDF_PL_2LCOLUMN` (integer)

`CPDF_PL_2RCOLUMN` (integer)

# Beispiele

Beispiel 1. Ein einfaches ClibPDF-Beispiel
    <?php
    $cpdf = cpdf_open(0);
    cpdf_page_init($cpdf, 1, 0, 595, 842, 1.0);
    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);
    ?>

# Siehe auch

Siehe auch die Dokumentation der PDFlib-Erweiterung.

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