PDF-Dokument ohne PDFlib mit PHP erzeugen

Viele von euch werden wohl XAMPP benutzen, um lokal in PHP zu entwickeln und zu testen. In der Windows-Version enthält es auch die PHP-Extension PDFlib, die aber leider auf vielen Hostingpaketen mit Linux als Betriebssystem nicht enthalten ist. Da PDFlib mehrere hundert Euro Lizenzgebühren kostet stellen sich viele die Frage, ob es sinnvolle und kostenlose Alternativen gibt. Glücklicherweise gibt es Alternativen und eine sehr umfangreiche möchte ich euch kurz vorstellen.

Die kostenlose TCPDF Library

Nachdem ich ein paar kostenlose PDF Klassen für PHP getestet habe, hat sich ein klarer Sieger herausgestellt. Die Klasse TCPDF zeichnet sich nicht nur durch seinen großen Funktionsumfang, sondern auch durch seine sehr gute Quellcode-Kommentierung und die gute Dokumentation der Funktionen.

Ein einfaches Beispiel

Um zu zeigen, wie einfach es ist eine PDF zu erzeugen hier ein kleines Beispiel. Und wie man es von einem Programmierbeispiel erwartet schreiben wir einen einfachen Text mit „Hallo Welt“ in die PDF:

<?php
	require_once('tcpdf/tcpdf.php');

	$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
	$pdf->setPrintHeader(false);
	$pdf->setPrintFooter(false); 

	$pdf->SetFont('times', 'BI', 20);
	$pdf->AddPage();
	$pdf->Cell(0, 10, 'Hallo Welt!', 0, 1, 'C', 0, 'https://kau-boys.de');
	$pdf->Output('example1.pdf', 'I');
?>

Zuerst wird die Klasse per require eingebunden. Anschließend erzeugen wir an neues TCPDF Objekt und weisen ihm als Orientierung Portrait (Hochformat) mit Millimeter als Einheit und einer Seitengröße im DIN A4 Format zu. Anschließend deaktivieren wir noch die Standard Kopf- und Fußzeile.

Mit setFont() können wir die Schriftart, die Formatierung und die Schriftgröße festlegen. Jetzt fügen wir eine neue Seite hinzu und erzeugen eine Zelle mit unserem Text und einem Link. Zuletzt geben wir die Datei aus und der Browser zeigt sie direkt an. Alternativ kann auch der Download-Dialog erzwungen werden. Das Beispiel könnt ihr euch hier ansehen:

Beispiel

Das Beispiel ist stark vereinfach und nutzt nur die allernötigsten Funktionen. Auf der Seite von TCPDF findet ihr auch eine Liste mit vielen weiteren Beispielen, die ihr euch ansehen solltet. Sehr beeindruckend sind auch die Beispiele mit Formularen, die entweder mit Funktionen von TCPDF oder mit einem einfachen HTML-Formular erzeugt werden können.

Ich hoffe, dass euch das kleine Beispiel weiterhelfen konnte und euch dazu ermutigt hat, es einfach einmal selbst auszuprobieren. Über Kommentare würde ich mich wie immer sehr freuen.

Veröffentlicht von

Bernhard ist fest angestellter Webentwickler, entwickelt in seiner Freizeit Plugins, schreibt in seinem Blog über WordPress und andere Themen, treibt sich gerne bei den WP Meetups in Berlin und Potsdam herum und läuft nach Feierabend den ein oder anderen Halbmarathon.

10 Kommentare » Schreibe einen Kommentar

    • Es gibt eine Funktion Bookmark mit der man Lesezeichen setzen kann. Meinst du das? Ich habe noch nie Tags in einem PDF gesehen. Hast du vielleicht mal ein Beispiel?

  1. Hallo,

    gibt es für TCPDF auch ein deutschsprachiges Handbuch ?

    Oder – falls dies nicht der Fall ist – eine deutschsprachige Webseite, die dieses Tool grundlegend erklärt ?

    • Ich kenne leider kein deutschsprachiges Handbuch. Aber die Beispiele auf der Website erklären sich in vielen Fällen von selbst. Wenn du der englischen Sprache mächtig bist, solltest du auch keine großen Probleme haben, anhand der Funktionsnamen mit der Klasse arbeiten zu können.

      Ich kenne auch keine Seite, die das Tool ausführlich beschreibt. Ich habe ja hier versucht, ein einfaches Beispiel auszuzeigen. Wenn du eine konkrete Fragestellung hast, kann ich gerne noch einmal einen Artikel dazu schreiben.

      • Danke für die schnelle Rückantwort – schade.

        Meine konrkrete Aufgabenstellung :
        Ich muß Daten aus einer SQL-Datenbank auslesen – 8 Sprachen (Spalten) und die Inhalte (Zeilen) je nach Vorauswahl als PDF ausdrucken. Das gesamte Konstrukt (PHP und MySQL) ist in UTF-8 angelegt. Jetzt möchte ich das PDF „bauen“, d.h. ich benötige einen UTF-8 fähigen Fond und das Seitenlayout. Ich fange einfach an und melde mich bei auftretenden Problemen – wenn es für dich OK ist !?

        PS: Sprachen sind Deutsch, Englisch, Französisch, Spanisch, Dänisch, Holländisch, Ungarisch und Türkisch !

  2. Durch die Suche nach meinem Problem bin ich auf diese Seite gestoßen und stelle einfach hier mal meine Frage. Wenn sie nicht zum Thema gehört, die Anfrage einfach ignorieren. Würde mich aber über eine Beantwortung freuen. Auch ein einfaches NEIN, oder WEISS nicht oder gibt es nicht ist ok.

    Ich hoste auf einem 1und1-Server eine Website von der auch PDF-Files aufrufbar sind. Diese PDFs werden mit einem script auf den Server geladen, was auch gut funktioniert. Erstellt wird dieses PDF, beim Kunden, aus einer Word-Datei und wird dann mittels des scripts hochgeladen.
    Leider geht beim Kunden manchmal etwas schief, was es ist bleibt mir verschlossen. Ich vermute es liegt am Anwender.
    OK, wie dem auch sei, ich möchte die PDF-Datei auf dem Server erzeugen, sodass der Kunde seine Word-Datei mittels des scripts auf den Server schickt.
    Gibt es eine Möglichkeit ein PDF aus einer Word-Datei automatisch auf einem Server erstellen zu lassen?

    • Ich kenne leider keine PHP Funktion, die Word zu PDF konvertiert. Es ist zwar gut möglich, dass es solche Funktionen gibt, aber die Konvertierung direkt durch Word ist sehr gut und ich würde immer diese Methode nutzen.

      Als Lösung für die Fehlervermeidung beim Hochladen würde ich wohl eine Upload-Funktion implementieren, die entweder nur PDF Dateien annimmt oder zumindest dem Nutzer einen Hinweis gibt, wenn er ein Word-Dokument hochlädt.

      • Vielen dank für die Antwort, ich habe das Problem gefixed. Die in Word erstellte PDF-Datei wird mittels script und ftp auf den Server geladen. Ich habe den ftp-Transfer auf binary umgestellt und damit war das Problem gelöst. Es lag also nicht am Kunden sondern am Programmierer. Ist mir nicht aufgefallen, da es eine Zeit lang funktioniert hat. Warum, bleibt mir verschlossen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert