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, 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 &lt; 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 &lt; 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);
?>
Inhaltsverzeichnis
cpdf_add_annotation -- Fügt eine Anmerkung ein
cpdf_add_outline --  Fügt ein Lesezeichen für die aktuelle Seite hinzu
cpdf_arc -- Zeichnet einen Kreisbogen
cpdf_begin_text -- Beginnt einen Textabschnitt
cpdf_circle -- Zeichnet einen Kreis
cpdf_clip --  Beschränkt alle Zeichnungen auf den aktuellen Pfad
cpdf_close -- Schließt ein PDF-Dokument
cpdf_closepath_fill_stroke --  Schließt, füllt und zeichnet den aktuellen Pfad
cpdf_closepath_stroke --  Schließt einen Pfad und zeichnet eine Linie entlang des Pfades
cpdf_closepath -- Schließt den aktuellen Pfad
cpdf_continue_text -- Gibt den Text in der nächsten Zeile aus
cpdf_curveto -- Zeichnet eine Kurve
cpdf_end_text -- Beendet einen Textabschnitt
cpdf_fill_stroke --  Füllt und zeichnet den aktuellen Pfad
cpdf_fill -- Füllt den aktuellen Pfad
cpdf_finalize_page -- Beendet eine Seite
cpdf_finalize -- Beendet ein Dokument
cpdf_global_set_document_limits --  Setzt Beschränkungen für alle PDF-Dokumente
cpdf_import_jpeg -- Öffnet ein JPEG-Bild
cpdf_lineto -- Zeichnet eine Linie
cpdf_moveto -- Legt die aktuelle Position fest
cpdf_newpath -- Beginnt einen neuen Pfad
cpdf_open -- Öffnet ein neues PDF-Dokument
cpdf_output_buffer --  Gibt das PDF-Dokument aus dem Zwischenspeicher aus
cpdf_page_init -- Beginnt eine neue Seite
cpdf_place_inline_image -- Plaziert ein Bild auf der Seite
cpdf_rect -- Zeichnet ein Rechteck
cpdf_restore --  Stellt die zuvor gesicherte Umgebung wieder her
cpdf_rlineto -- Zeichnet eine Linie (relativ)
cpdf_rmoveto -- Legt die relative aktuelle Position fest
cpdf_rotate_text --  Legt den Drehwinkel für Text fest
cpdf_rotate -- Legt den Drehwinkel fest
cpdf_save_to_file -- Schreibt ein PDF-Dokument in eine Datei
cpdf_save -- Sichert die aktuelle Umgebung
cpdf_scale -- Legt die Vergrößerung fest
cpdf_set_action_url --  Setzt einen Hyperlink
cpdf_set_char_spacing -- Legt den Zeichenabstand fest
cpdf_set_creator -- Setzt das Urheberfeld des PDF-Dokuments
cpdf_set_current_page -- Setzt die aktuelle Seite
cpdf_set_font_directories --  Legt die Verzeichnisse fest, die bei Verwendung externer Schriftarten durchsucht werden
cpdf_set_font_map_file --  Legt bei Verwendung externer Schriftarten die Datei mit den Schriftart-Dateiname-Zuordnungen fest
cpdf_set_font -- Wählt die aktuelle Schriftart und -größe
cpdf_set_horiz_scaling -- Setzt die horizontale Textskalierung
cpdf_set_keywords --  Setzt das Schlüsselwortfeld des PDF-Dokuments
cpdf_set_leading -- Setzt den Zeilenabstand
cpdf_set_page_animation --  Legt den Übergang zwischen den Seiten fest
cpdf_set_subject -- Setzt das Themenfeld des PDF-Dokuments
cpdf_set_text_matrix -- Legt die Text-Matrix fest
cpdf_set_text_pos -- Legt die Textposition fest
cpdf_set_text_rendering -- Legt fest, wie Text wiedergegeben wird
cpdf_set_text_rise -- Legt die vertikale Textverschiebung fest
cpdf_set_title -- Setzt das Titelfeld PDF-Dokuments
cpdf_set_viewer_preferences --  Legt fest, wie das Dokument im Betrachter dargestellt wird
cpdf_set_word_spacing --  Legt den Abstand zwischen den Wörtern fest
cpdf_setdash -- Setzt eine gestrichelte Linie
cpdf_setflat -- Legt die Flachheit fest
cpdf_setgray_fill -- Setzt die Füllfarbe auf einen Grauwert
cpdf_setgray_stroke -- Setzt die Zeichenfarbe auf einen Grauwert
cpdf_setgray --  Setzt Zeichen- und Füllfarbe auf einen Grauwert
cpdf_setlinecap -- Legt den Typ der Linienenden fest
cpdf_setlinejoin -- Legt den Typ der Linienverbindungen fest
cpdf_setlinewidth -- Legt die Linienbreite fest
cpdf_setmiterlimit -- Legt die Gehrungsbegrenzung fest
cpdf_setrgbcolor_fill --  Setzt die Füllfarbe auf einen RGB-Farbwert
cpdf_setrgbcolor_stroke --  Setzt die Zeichenfarbe auf einen RGB-Farbwert
cpdf_setrgbcolor --  Setzt Zeichen- und Füllfarbe auf einen RGB-Farbwert
cpdf_show_xy -- Gibt Text an der angegebenen Position aus
cpdf_show -- Gibt Text an der aktuellen Position aus
cpdf_stringwidth --  Liefert die Breite einer Zeichenkette in der aktuellen Schriftart
cpdf_stroke --  Zeichnet eine Linie entlang des aktuellen Pfades
cpdf_text -- Gibt den Text mit Parametern aus
cpdf_translate --  Legt den Ursprung des Koordinatensystems fest