Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP
Code

Erstellung von PDFs mit PHP

by
Difficulty:IntermediateLength:LongLanguages:

German (Deutsch) translation by Katharina Nevolina (you can also view the original English article)

PDFs können das beste Format für die Verteilung von Dokumenten im Internet sein.  Im heutigen Tutorial zeige ich Ihnen, wie Sie PDFs mit PHP generieren können.  Machen wir das!

Auf die Geschwindigkeit kommen

Es gibt eine Reihe von Methoden, mit denen Sie PDFs mit PHP erstellen können.  Sie könnten die PDFlib-Bibliothek verwenden, aber es ist ziemlich teuer, zumindest für kommerzielle Arbeit.  Heute arbeiten wir mit der FPDF-Bibliothek, die sowohl für den privaten als auch für den kommerziellen Gebrauch kostenlos ist und überhaupt nicht schwer zu verwenden ist.

Um zu beginnen, gehen Sie auf die FPDF-Website und klicken Sie auf Downloads auf der linken Seite.  Unter allen Handbüchern, erhalten Sie das Zip-Archiv der Version 1.6 (obwohl es seit dem letzten Update eine Weile her ist, sind die Foren auf der Seite immer noch ziemlich aktiv).  Entpacken Sie die Dateien. Alles, was Sie von diesem Ordner benötigen, ist die Datei fpdf.php und das Verzeichnis fonts.

Lassen Sie uns ein "Hallo, Welt!" Beispiel, um uns auf den neuesten Stand zu bringen.  Das erste, was Sie tun müssen, ist natürlich die Bibliothek; dann erstellen wir eine neue Instanz der FPDF-Klasse.

hello_world.php

Beachten Sie, dass wir dem FPDF-Konstruktor drei Werte übergeben haben. der erste ist die Ausrichtung unserer Seite; In unserem Fall ist das Porträt (man könnte auch L'andscape machen).  Der nächste Parameter ist der Einheitentyp, den wir verwenden möchten. Wir wählen Punkte aus, denn das ist der Maßstab für Schriften. wir könnten mm, cm oder in gewählt haben.  Schließlich haben wir das Papierformat, das wir offensichtlich als Buchstaben gesetzt haben; Wir könnten es legal, A3, A4 oder A5 gesetzt haben.  Alle drei dieser Parameter sind Option; ihre Voreinstellungen sind ('P', 'mm', 'A4').

Bevor wir mit dem Hinzufügen von Text zu unserem Dokument beginnen können, müssen wir zwei Dinge tun: 1) eine Seite zur PDF hinzufügen und 2) die Schriftart einstellen.

Sie können die AddPage auch immer dann verwenden, wenn Sie einen Seitenumbruch einfügen möchten. Zuerst legen wir die Schriftart fest; Dies kann eine der integrierten Schriftfamilien sein (Courier, Helvetica/Arial, Times, Symbol oder ZapfDingbats) oder eine, die Sie mit der AddFont-Methode hinzugefügt haben.  Weiter ist das Schriftformat; wir haben uns als regelmäßig festgelegt, aber wir hätten 'B'old', 'I'talic', 'U'nderline oder irgendeine Gruppierung von denen ('BUI') machen können.  Zum Schluss legen wir die Schriftgröße in Punkten fest.

Jetzt können wir Text hinzufügen.  Der gesamte Text, den Sie in Ihr PDF schreiben, wird in Zellen geschrieben.

Was macht das?  Der erste Parameter ist die Breite der Zelle; der zweite ist die Höhe davon.  Natürlich ist der dritte der Text für die Zelle.  Es gibt einige andere Parameter, aber zuerst, mal sehen, wie das aussieht.  Um die PDF zu beenden, verwenden wir die Ausgabemethode.

Wir könnten dieser Methode zwei Parameter geben, aber im Moment lassen wir sie einfach weg.  Wie es jetzt ist, wird die PDF angezeigt, wenn wir die Seite besuchen.  Also lassen Sie uns das jetzt tun! Ich habe folgendes:


Gut gemacht! Sie haben Ihre erste PDF-Datei erstellt.  Gehen wir zurück zu der Zeile, die die Textzelle erstellt hat, und nehmen Sie eine Änderung vor:

Wir haben einen vierten Parameter hinzugefügt; Es ist die Grenze.  In unserem Fall haben wir eine Grenze gesetzt.  Sie können einen partiellen Rand mit einer Zeichenkette machen: "LB" fügt Grenzen links und unten hinzu; "TLBR" ist das gleiche wie 1.

Wenn Sie die Seite jetzt neu laden und feststellen, dass nichts passiert ist, fügen Sie der URL einfach eine zufällige Abfragezeichenfolge hinzu, um die Aktualisierung zu erzwingen.

Wir werden bald ein kleines Reciept-generierendes Skript erstellen, aber schauen wir uns zuerst an, wie wir einige weitere Optionen einstellen können.


Voller Screencast

 

SetFillColor / SetTextColor

Sie können Textzellen mit einer Hintergrundfarbe füllen; wir werden sehen, wie das in unserer App zu tun ist, aber zuerst müssen Sie die Füllfarbe festlegen.  Übergeben Sie einfach diese Funktion den roten, grünen und blauen Werten (zwischen 0 und 255).  Sie können die Textfarbe auf die gleiche Weise einstellen.

Wenn Sie alle drei Farben auf denselben Wert einstellen möchten, verwenden Sie nur einen Parameter.

SetLineWidth

Beim Zeichnen von Rahmen auf Zellen ist es nicht schwer, die Breite des Rahmens anzupassen.  Rufen Sie einfach diese Methode auf, indem Sie einen Float übergeben; Denken Sie daran, dass Sie beim Erstellen der FPDF-Instanz die Einheiten festgelegt haben, an denen Sie gemessen haben.  Wenn Sie beginnen, sind die Grenzen 0,2 mm breit.

SetAuthor / SetTitle / SetSubject / SetCreator / SetKeywords

Diese Methoden dienen zum Festlegen der Eigenschaften einer PDF-Datei, der Metadaten.  Jeder von ihnen nimmt eine Zeichenfolge mit dem entsprechenden Inhalt.  Sie können auch einen optionalen booleschen Wert verwenden, der die Codierung bestimmt: true ist UTF-8 und false ist ISO-8859-1.

SetMargins / SetTopMargin / SetLeftMargin / SetRightMargin

Standardmäßig sind die Seitenränder 1 cm.  Sie können den oberen, linken und rechten Rand mit ihren jeweiligen Funktionen einzeln einstellen oder alle auf einmal einstellen.

Aber was ist mit dem unteren Rand?  Ich bin froh, dass du gefragt hast, dass das von einer anderen Funktion erledigt wird.

SetAutoPageBreak

Diese Funktion verwendet einen booleschen Wert und bestimmt, ob die Bibliothek bei Bedarf einen Seitenumbruch hinzufügen soll oder ob Sie dies manuell tun möchten.  Wenn der Wert true ist (der Standardwert), können Sie einen zweiten Parameter hinzufügen, der angibt, wie nahe Sie vor dem Brechen kommen möchten.  Standardmäßig ist dies 2 cm.


Einen Beleg erzeugen

Jetzt, da wir eine PDF-generierende Güte haben, beginnen wir unsere kleine Anwendung.  Wir beginnen mit der Erstellung eines HTML-Formulars.  Wenn der Nutzer auf "Senden" klickt, nehmen wir die Werte aus dem Formular und verwenden sie, um eine Empfangsbestätigung für unseren Kunden zu erstellen.

Zunächst einmal eine kleine HTML-Shell:

Sie können sehen, dass wir ein Formular eingerichtet haben, das in create_reciept.php gepostet wird, das wir in Kürze erstellen werden.  Fügen Sie ein Feldset hinzu und füllen Sie es mit Elementen für die persönlichen Informationen unserer Kunden.

index.html

Beachten Sie zwei Dinge: Wir werden das Styling für .col sehen, wenn wir zum CSS kommen; Dadurch können wir diese Felder in zwei Spalten anordnen.  Zweitens habe ich allen Eingaben Werte gegeben, nur um uns später Zeit zu sparen.

Wir fügen ein weiteres Feldset für die Produkte hinzu, die der Kunde kauft:

Ich denke, die Informationen, die wir hier zeigen, sind für einen Tisch geeignet, also verwenden wir sie.  Außerdem habe ich am Ende der Namen der Eingänge eine Reihe eckiger Klammern gesetzt; Beachten Sie, dass wir eine Reihe von Eingaben namens product[] und eine Menge namens price[] haben.  Diese werden als Arrays veröffentlicht.

Natürlich endet unser Formular mit einem Absenden-Button.

Jetzt können wir mit dem CSS fortfahren.  Wir werden das nicht im Detail besprechen, aber es ist überhaupt nichts kompliziertes.  Sie können es in style.css setzen, mit dem wir im HTML verlinkt haben.

style.css

Wie Sie sehen können, geben wir den meisten Elementen ein minimalistisches Design; nichts Erderschütterndes, aber es wird den Augen schaden.  So sieht unser Formular aus:


Wenn also unser Kunde das Formular ausfüllt und auf submit klickt, werden die Formulardaten in create_reciept.php gepostet.  Lassen Sie uns jetzt die Datei erstellen!


Der Quittungsgenerator

Wir sind jetzt wieder bei PHP.  Das Wichtigste zuerst: Hollen Sie Ihr die Bibliothek:

Als Nächstes werden wir, anstatt eine Instanz der FPDF-Klasse zu erstellen, diese um eine eigene Klasse erweitern.  Das wird uns erlauben, einige nette Dinge zu tun.   Jetzt genau beobachten: 

Wir haben unsere neue Klasse gestartet, indem wir einen Konstruktor geschrieben haben.  Wir haben allen Parametern Standardwerte gegeben, damit unser Konstruktor ohne sie aufgerufen werden kann.  In der Funktion rufen wir den Konstruktor unserer Elternklasse auf und legen dann die Ränder fest

Jetzt haben wir zwei spezielle Funktionen: Header und Footer.

Diese Funktion wird am Anfang jeder Seite unserer PDF ausgeführt.  Wir haben zuerst die Schriftart, Füllfarbe und Textfarbe festgelegt.  Dann geben wir unsere Zelle aus.  Beachten Sie, dass wir die Breite auf 0 festgelegt haben. Das ist ein spezieller Wert. Die Zelle nimmt den gesamten Raum rechts vom Startpunkt ein (bis sie den rechten Rand erreicht).  Da wir am linken Rand beginnen, erhalten wir eine Zelle die gesamte Breite der Seite (minus Margen). 

Jetzt für die Footer-Funktion:

Auch hier beginnen wir mit der Einstellung der Schriftart und der Textfarbe. wir können nicht sicher sein, was diese Werte sein werden, wenn wir zum Header kommen, also werden wir sie nur zur Sicherheit einstellen.  Als nächstes setzen wir die X- und Y-Koordinaten.  Das legt die Position der linken oberen Ecke unserer nächsten Zelle fest.  Wir setzen X auf 0, um sicherzustellen, dass wir am Anfang der Zeile stehen.  Wir setzen Y auf -60; eine negative Zahl ist relativ zum unteren Rand der Seite, also setzt das unseren Cursor 60 Pixel über dem unteren Rand.

Als nächstes erstellen wir eine Zelle; wir verwenden wieder den 0-breiten Trick; wir setzen die Höhe auf 20 Punkte.  Wir setzen den Text, geben ihm einen oberen Rand und zentrieren den Text.  Das ist es!

Wir kommen wieder in unsere Klasse zurück, aber jetzt beginnen wir mit dem Erstellen der Quittung.  Nachdem wir eine Instanz unserer Klasse erstellt, eine Seite hinzugefügt und die Schriftart festgelegt haben, können wir uns dem Geschäft widmen.

Als erstes werden wir unseren Cursor bewegen. Das können wir mithilfe der SetY-Methode erreichen.

Das bewegt uns nicht um 100 Punkte; Es setzt uns 100 Punkte vom Anfang der Seite.  Das schließt die Marge nicht mit ein, also sind wir 30 von unten in unserer Kopfzeile.

Wir beginnen mit dem Erstellen einer Zelle, die 100pt breit und 13pt hoch ist, mit dem Text "Ordered By". Als nächstes setzen wir die Schriftart zurück, um das Fett zu entfernen.  Dann erstellen wir eine andere Zelle und geben ihr den Namen, den wir von unserer Form erhalten haben.  In einem echten Projekt werden Sie diese Werte natürlich überprüfen, bevor Sie sie verwenden.

Wir werden das Kaufdatum hinzufügen:

Auch hier setzen wir die Schrift fett. Nach dem Schreiben von "Date" entfernen wir das Fett und drucken das aktuelle Datum mit der Datumsfunktion von PHP.  Das Format, das wir angegeben haben, gibt uns den Namen des Monats, die Tagesnummer gefolgt von einem Komma und das vierstellige Jahr.  Wir setzen den Rand auf 0 (Standard), damit wir zum Zeilenparameter gelangen können.  Wir setzen es auf 1, was unsere Position auf den Anfang der nächsten Zeile setzt; Es entspricht dem Drücken von "Enter" in einem Textverarbeitungsprogramm.

Gehen wir weiter. . .

Die SetX-Funktion macht dasselbe wie die SetY-Funktion, außer dass sie uns von rechts absetzt.  Wir setzen unsere Position 100pt rechts vom linken Rand.  Als nächstes kursivieren wir unsere Schriftart und beginnen mit der Ausgabe der Adresse.  Alle drei Zeilen der Adresse sind 200pt breit und 15pt hoch.  Das wichtigste, was hier zu beachten ist, ist, dass unser Zeilenparameter 2 ist.  Das bedeutet, dass wir nach jeder Zelle zur nächsten Zeile und "Tab-In" gehen, um mit der vorherigen Zelle übereinzustimmen.  Schließlich rufen wir die Ln-Methode auf, die einen Zeilenumbruch hinzufügt.  Ohne einen Parameter wird es unsere Position auf der Höhe der letzten gedruckten Zelle verschieben.  Wir haben einen Parameter übergeben, also gehen wir 100pt runter.

So sehen wir bisher aus:


Bild : Adresse / Datum

Jetzt drucken wir eine Tabelle der Produkte aus, die unser Kunde gekauft hat.

Wir haben die beiden Arrays aus unserer HTML-Datei übergeben.  Aber woher kommt diese PriceTable-Methode?  Wir werden es jetzt innerhalb unserer PDF_receipt-Klasse schaffen. Das ist ein weiterer Vorteil der Erweiterung der Klasse: wir können potenziell arbeitsintensive Funktionen in einer Methode erfassen.

Hier ist die Funktion.  Wir beginnen mit der Einstellung von Schriftart, Textfarbe, Füllfarbe und Linienbreite.  Als nächstes richten wir unsere Header-Zellen ein.  Die haben jeweils einen Rand links, oben und rechts, zentrierten Text und eine Füllung.

Als nächstes entfernen wir "halb fett" aus der Schriftart und setzen die Füllfarbe und Linienbreite zurück.  Wir erstellen auch eine Variable $fill, die auf false gesetzt ist.  Wir werden das verwenden, um unserem Tisch Zebrastreifen hinzuzufügen.

Die for-Schleife durchläuft das Array Produkte und Preise (sie sollten die gleiche Anzahl von Elementen haben, basierend auf der Tabelle in unserer HTML-Datei).  Wir erstellen für jeden Eintrag eine Zelle, indem wir den Produktnamen unter "Artikelbeschreibung" und den Preis unter "Preis" setzen.  Sie haben beide eine Grenze.  Das Produkt ist linksbündig, der Preis ist rechtsbündig.  Schließlich verwenden beide $fill, was derzeit falsch ist.  Nach jeder Zeile wechseln wir den Wert von $fill in den entgegengesetzten booleschen Wert, sodass die nächste Zeile den grauen Hintergrund hat.

Nachdem wir alle Einkäufe durchlaufen haben, wollen wir den Gesamtpreis angeben.  Wir werden unseren Cursor 367pt vom linken Rand der Seite stoßen.  Dann erstellen wir eine Zelle "Total" und schließlich verwenden wir die PHP-Funktion array_sum, um alle Preise in $prices zusammenzufassen.  Und das ist die Preistabelle!

Wenn wir uns wieder dem PDF-Dokument zuwenden, werden wir jetzt 50pt überspringen.

Bis jetzt haben wir nur die Cell-Funktion verwendet, um auf unsere Seite zu drucken.  Es gibt zwei weitere Methoden, die wir ebenfalls verwenden können: MultiCell und Write.  Beide Funktionen sind für Textzeilen vorgesehen, die für eine einzelne Zelle mit voller Breite zu lang sind.  Schauen wir uns zuerst MultiCell an.

MultiCell ist Cell sehr ähnlich, nur wenn es die Breite erreicht, die Sie für die Zelle angegeben haben, wird eine weitere darunter erzeugt und mit dem Schreiben fortgefahren.  Es bricht auch, wenn es ein '\ n' trifft.  Aus diesem Grund benötigt es keinen Zeilenparameter.  Es hat auch nicht den Link-Parameter, den Cell hat.  Was?  Wir haben den Link-Parameter noch nicht erwähnt?  Nun, Cell kann einen weiteren Parameter nach dem Füllparameter nehmen: Das ist entweder eine Link-Zeichenfolge oder ein Link-Objekt, das auf eine andere Stelle in der PDF verweist, die mit der AddLink-Funktion erstellt wurde.

Der Text ist nicht sehr wichtig, aber er ist zu lang, um eine Zeile zu schreiben.  Plus, es hat ein paar Zeilenumbrüche drin. Obwohl wir sie hier nicht verwenden, verwendet MultiCell auch Rand-, Ausrichtungs- und Füllparameter.

Die Write-Methode benötigt nur drei Parameter: eine Höhe, den Text und eine optionale Verknüpfung.  Es gibt keinen width-Parameter, da er zum rechten Rand springt, bevor er die Linie durchbricht.  Obwohl dies nicht die beste Verwendung ist, verwenden wir es, um einen Link hinzuzufügen:

Beachten Sie, dass wir die Schriftart und die Textfarbe vor dem Schreiben so einstellen, dass sie wie ein Link aussieht.

Das war's für PHP.  Lassen Sie uns ein weiteres Feature hinzufügen: wir werden unser Formular mit Ajax einreichen.  Bevor Sie zu index.html zurückkehren, nehmen Sie diese Änderungen vor, um den Aufruf von Output aufzurufen:

Der erste Parameter ist der Name unserer Datei; der zweite ist, was wir mit der Datei machen wollen, in diesem Fall speichern Sie sie auf dem Server.  Sie können auch einen Download mit 'D' erzwingen und ihn als String mit 'S' zurückgeben.  Die Standardausgabe an den Browser ist "I" (für Inline).

Zurück in den HTML-Code, importieren wir jQuery und fügen unseren Click-Handler zur Schaltfläche "Senden" hinzu:

Wenn Sie auf die Schaltfläche klicken, senden wir das Formular.  Bei einer erfolgreichen Rückkehr blenden wir das zweite div aus, leeren seinen Inhalt und laden ihn mit der HTML-Funktion neu.  Dieser neue HTML hat den Link für den Empfang.  Dann verblassen wir das div wieder hinein.  Vergessen Sie nicht, false zurückzugeben, damit das Formular nicht regelmäßig eingereicht wird.

Hier ist, was wir bekommen


Und hier ist unser fertiges PDF.


Und das ist es, Leute!  Treffen Sie die Kommentare mit Anmerkungen oder Vorschlägen!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.