Zum Inhalt wechseln
Dr. Web Logo seit 1997.
  • Beste Agenturen
  • Magazin
  • Beste Agenturen
  • Magazin
Dr. Web Logo seit 1997.
  • Kontakt
  • Anmeldung
  • Newsletter
  • Beste Agenturen
  • Magazin
Menü
  • Beste Agenturen
  • Magazin
Suche
Agenturpartner werden →

Dr. Web » Inspiration » PDF-Rechnung mit PHP erzeugen

PDF-Rechnung mit PHP erzeugen

Artikel weiterempfehlen

  • Aktualisiert am 24. April 2022
  • 23 Kommentare
  • Thomas Weise von Thomas Weise
Lesedauer: 5 Minuten

Inhaltsverzeichnis

Wir setzen den Artikel PDF-Dokumente mit PHP erzeugen fort und erstellen die Grundlage einer Rechnung im PDF-Format direkt auf dem Server. Zur Anwendung kommen dabei zwei PHP-Klassen.

Hier geht es um die technische Realisierung der PDF-Erzeugung. Der Rechnungsinhalt ist erst einmal unwichtig und kann später angepasst werden. Auf dem Webserver muss PHP5 verfügbar sein. Falls PHP5 nicht verfügbar ist, lesen Sie bitte den oben genannten Beitrag. Dort wird unter anderem gezeigt, wie man PHP5 umgehen kann.

Folgende Verzeichnisstruktur sollten Sie vorliegen haben:

ss0011 PDF-Rechnung mit PHP erzeugen

  • Legen Sie nun eine Datei rechnung.php im Projektverzeichnis an und kopieren den Inhalt folgender Datei dort hinein.
  • Legen Sie danach eine Datei TwPdfRechnung.php im Verzeichnis twpdf an und kopieren den Inhalt folgender Datei dort hinein.
  • Öffnen Sie die soeben erstellte Datei rechnung.php in Ihrem Browser. Dieser sollte dann schon die generierte PDF-Datei anzeigen (wie in dieser Demo).

Beschreibung der Datei ‚rechnung.php‘

Zuerst wird die FPDF-Klasse und die Klasse TwPdfRechnung eingebunden.

// FPDF-Zeugs und die spezielle TwPdf-Klasse includen
define("FPDF_FONTPATH","fpdf16/font/");
include_once('fpdf16/fpdf.php');
include_once("twpdf/TwPdfRechnung.php");

Danach schreiben wir alles in Variablen, was später auf der Rechnung auftauchen soll. Dies könnten Sie natürlich auch alles in einem Formular abfragen, hier wird dies jedoch fest in den Code geschrieben, um die Komplexität dieses Artikels nicht unnötigerweise aufzublähen.

Wichtig ist dann noch, diese Variablen in eine PHP-Session zu schreiben

// alles in die Session rein
$_SESSION['twArrRechnungsdaten']      = $arrDat;
$_SESSION['twArrRechnungspositionen'] = $arrPos;

und die Klasse TwPdfRechnung aufzurufen.

// pdf erzeugen
$twpdf = new TwPdfRechnung(); 

// pdf ausgeben (im Browser oder in Datei schreiben)
$twpdf->Output();   // Ausgabe (wenn in Datei schreiben, dateiname in Klammer)

Wenn man bei Output() einen Dateiname mit angibt (beispielsweise: Output(„meinedatei.pdf“);), dann wird das erzeugte PDF in eine Datei mit dem angegebenen Name geschrieben. Wir möchten jedoch die PDF-Datei nur im Browser anzeigen und schreiben deshalb Output();.

Wichtig in diesem Zusammenhang ist noch, dass in dieser Datei VOR dem öffnenden <?php und NACH dem schließenden ?> kein einziges Zeichen mehr steht, auch kein Leerzeichen, Zeilenumbruch oder Sonstiges.

Beschreibung der Datei ‚TwPdfRechnung.php‘

Der Code dieser Datei sieht auf dem ersten Blick für Sie eventuell erst einmal sehr kompliziert aus. Aber das ist wie mit jeder neuen Sache, hat man es erstmal begriffen, dann ist es auf einmal ganz einfach.

Also lassen Sie sich bitte nicht von dem vielen Code abschrecken, ein Großteil davon ist jetzt erstmal gar nicht so wichtig. Ganz grob gesagt, sind für Sie zu Beginn diese 4 Funktionen interessant:

__construct()
wird beim Erzeugen eines Objektes dieser Klasse automatisch aufgerufen, lädt die PHP-Session-Variablen, erledigt alle für die PDF-Erzeugung relevanten Dinge
Header()
erstellt die Kopfzeile, wird automatisch aufgerufen, in unserem Falle wird hier auch gleich das Layout der gesamten Seite festgelegt
Footer()
erstellt die Fußzeile, wird automatisch aufgerufen
twShowRechnungspositionen()
stellt die einzelnen Positionen der Rechnung in einer Art Tabelle dar, muss extra aufgerufen werden

Nun diese Datei nochmal im Einzelnen. Am Anfang werden wieder die für diese Klasse relevanten Variablen (-Arrays) deklariert.

  // Variablen und Arrays
  private $twArrRechnungsdaten      = array();
  private $twArrRechnungspositionen = array();
  private $twArrSpaltenbreiten      = array();
  private $twArrSpaltenkoepfe       = array();

die Funktion __construct()

Das Seitenformat, die Maßeinheit und die Seitengröße festlegen.

    // Konstruktor der vererbenden Klasse (FPDF) aufrufen
    parent::__construct('P', 'mm', 'A4'); // L=Querformat(Landscape), P=Hochformat(Portrait)

Unsere in der Datei rechnung.php festgelegten Inhalte der Rechnung aus der PHP-Session laden.

    // Session-Variablen aus dem aufrufenden Skript übernehmen
    $this->twArrRechnungsdaten      = $_SESSION['twArrRechnungsdaten'];
    $this->twArrRechnungspositionen = $_SESSION['twArrRechnungspositionen'];

Noch ein paar grundlegende Anweisungen, wie groß die Seite im Browser angezeigt werden soll, wann ein Seitenumbruch erfolgen soll und (nicht so wichtig) die Gesamtanzahl der Seiten ermitteln.

    // Einstellungen für das PDF
    $this->SetDisplayMode( 100 );         // wie groß wird Seite angezeigt(in %)
    $this->SetAutoPageBreak(true, 50);    // 50mm von unten erfolgt ein Seitenumbruch
    $this->AliasNbPages();                // Anzahl der Seiten berechnen ({nb}-sache)

Die eigentliche Erzeugung des PDF

    // Seite erzeugen
    $this->AddPage();                     // PDF starten (ruft auch Header() und Footer() auf

Und noch zwei Dinge, speziell für unsere PDF-Rechnung. Aufruf unserer Funktion zur Erstellung der Tabelle mit den Rechnungspositionen und einer speziellen Funktion, die unsere Zahlungsbedingungen und den Gesamtbetrag der Rechnung bei mehrseitigen Rechnungen nur auf der letzten Seite anzeigt.

    // zusätzliche Sachen
    $this->twShowRechnungspositionen();   // Tabelle mit allen Rechnungspositionen
    $this->twShowLetzteSeite();           // nur auf der letzten Seite

die Funktion Header()

Hier geht es nun endlich an das eigentliche „Designen“ der Rechnung. Um die einzelnen Anweisungen besser zu verstehen, können sie die Beschreibungen in der offiziellen FPDF-Dokumentation nachlesen. Dort wird in kurzen, verständlichen Sätzen erklärt, worum es bei jeder Anweisung geht. Die Doku kann von dort auch (natürlich als PDF-Datei) heruntergeladen werden.

Die Funktion Header() ist grob in drei Bereiche unterteilt (gilt für mehrseitige Rechnungen):

  • Bereiche, die auf jeder Seite angezeigt werden
  • Bereiche, die nur auf der ersten Seite angezeigt werden
  • Bereiche, die auf allen Seiten, außer auf der Ersten angezeigt werden

Meist kommen in dieser Funktion immer wieder dieselben Anweisungen vor. Das ist das Wesen von FPDF, von oben herunter jedes einzelne Element immer wieder neu erstellen. Der Quellcode in dieser Funktion ist einigermaßen kommentiert, sodass sich vielleicht einige Dinge von selbst erklären. Die wichtigsten Anweisungen sind:

  • SetFont legt die Schriftart fest
  • SetTextColor legt die Textfarbe fest
  • SetFillColor legt die Füllfarbe fest (Hintergrund)
  • SetDrawColor legt die Rahmenfarbe fest
  • SetLineWidth legt die Rahmenstärke fest
  • twRundeckbereich legt die Rundung der Boxen fest (eigene Funktion)
  • SetXY legt Position fest (meist die Startposition einer folgenden Anweisung)
  • Cell zeichnet eine Art Zelle, meist mit enthaltenem Text (mit oder ohne Rahmen und Hintergrund)
  • Image fügt ein Bild ein

Als Bild bietet sich ein Logo an. Speichern Sie das Bild im Verzeichnis ‚twPdf‘ oder passen Sie im Quellcode den Pfad zu Ihrem Logo an.

die Funktion Footer()

Für diese Funktion gilt PDF-mäßig dasselbe wie für die vorherige Header(), nur dass hier halt die Fußzeile erstellt wird.

die Funktion twShowRechnungspositionen()

Das ist die etwas komplizierte Funktion. Sie ist nicht direkt bei FPDF enthalten, sondern selbst programmiert. Hier wird eine Art Tabelle für die einzelnen Rechnungspositionen erzeugt.

Wir geben zuerst die Spaltenbreiten (in mm) und die Beschriftungen der Spaltenköpfe an.

    // Spaltenbreiten und Beschriftung der Spaltenköpfe festlegen
    $this->twSetSpaltenbreiten(array(8, 99, 14, 20, 20));
    $this->twSetSpaltenkoepfe(array('Pos', 'Text', 'Menge', 'Preis', 'Gesamt'));

Nach ein paar Formatanweisungen erzeugt folgender Code die Spaltenköpfe.

    for ($i=0; $i<count($this->twArrSpaltenkoepfe); $i++) {
      $this->Cell($this->twArrSpaltenbreiten[$i], 7, $this->twArrSpaltenkoepfe[$i], 1, 0, 'C', 1);
    }
    $this->ln();

Die einzelnen Zeilen für die Rechnungspositionen werden folgendermaßen erstellt. Die darin für jede Zeile aufgerufene Funktion twShowZeileMitMultiCell ist wieder eine selbst programmierte Funktion.

    foreach ($this->twArrRechnungspositionen as $pos) {
      $i++;
      $this->twShowZeileMitMultiCell(array(
              $i,
              $pos['text'],
              sprintf("%9.2f", $pos['menge']),
              sprintf("%9.2f", $pos['einzelpreis']),
              sprintf("%9.2f", $pos['gesamtpreis'])
              ));
      $this->SetX(27);  // sonst gehts immer ganz links los...
    }
    $this->Cell(array_sum($this->twArrSpaltenbreiten), 0, '', 'T');  //Tabellenlinie unten

sonstige (eigene) Funktionen

In dieser Klasse sind noch weitere Funktionen programmiert, auf die hier nicht näher eingegangen werden soll, um den Umfang dieses Artikels nicht zu sprengen.

Es handelt sich dabei um die Funktion twShowLetzteSeite(), sowie um den Quellcode zwischen

  /* twTabelleMitMultiCell START -------------------------------------------- */
  ...
  ...
  /* twTabelleMitMultiCell END ---------------------------------------------- */

und

  /* twRundeckbereich START ------------------------------------------------- */
  ...
  ...
  /* twRundeckbereich END --------------------------------------------------- */

Schlussbemerkungen

Dieses Rechnungs-Beispiel ist ausbaufähig, stellt aber mit der Klasse TwPdfRechnung eine solide Vorlage dar. Anhand dieser Klasse kann man nach einer gewissen Einarbeitungszeit seine an den eigenen Geschmack angepasste PDF-Rechnung zurechtzimmern. Der Quellcode dieses Beispiels darf frei verwendet werden (siehe twPdf-Rechnung).

Die Anregungen und das Grundverständnis vor allem für die Tabelle mit MultiCell und den abgerundeten Ecken wurden von Add-On’s von FPDF bezogen. Für alle, denen es nicht schnell genug gehen kann, gibt es den Quellcode in einem ZIP-Archiv. ™

Thomas Weise

Thomas Weise

Lust auf mehr?

  • Dieter Petereit Dieter Petereit
  • 13. November 2018

Retro-Design: Kunstwerke aus Audiokassetten von Benoit Jammes

Kinder der Siebziger und Achtziger dürften sich besonders für die „Skulpturen“ interessieren, die wir euch heute zeigen wollen. Der französische Künstler Benoit Jammes fand einen Schuhkarton alter Audiokassetten in seinem Keller. Da er jedoch nicht mehr über ein entsprechendes Abspielgerät verfügte, entschloss er sich kurzerhand, die Tonträger aus dem akustischen Wirkungskreis in den visuellen zu überführen. Wir haben mit ihm darüber gesprochen…
  • Inspiration, Showcases
  • Markus Seyfferth Markus Seyfferth
  • 9. Oktober 2018

Infografiken: So gehen sie viral, trotz starker Konkurrenz

Es klingt so einfach: Du trägst Daten zusammen, erstellst eine schicke Infografik und setzt sie auf die Website, um den Traffic zu erhöhen, Verkäufe anzukurbeln oder Leads zu generieren. Dabei bedenkst du zu selten, dass es bereits jede Menge Infografiken gibt, die in irgendeiner Ecke des weltweiten Netzes nur darauf warten, entdeckt zu werden – häufig erfolglos.
  • Inspiration
  • Johannes Kallweit Johannes Kallweit
  • 3. Oktober 2018

Emotionales Webdesign: So einfach sind die Grundlagen!

Emotionales Webdesign ist nicht etwa eine Gestaltung, bei der potenzielle Besucher in Tränen ausbrechen. Ebensowenig ist damit gemeint, dass die Gestaltung durch einen labilen Designer mit Trennungsschmerz erstellt wurde. Schauen wir also, was emotionales Webdesign wirklich ist.
  • Inspiration, Webdesign
  • Dieter Petereit Dieter Petereit
  • 29. August 2018

Dein Bild von Kreativität ist falsch

Ich höre es von allen Seiten. Kaum einer hält sich für kreativ. Du sagst, du kannst das einfach nicht. Ich glaube dir nicht. Ich denke, dein Bild von Kreativität ist schlichtweg falsch.
  • Design, Inspiration
  • Markus Seyfferth Markus Seyfferth
  • 18. Juli 2018

404: So baust du die optimale Fehlerseite (mit und ohne WordPress)

Jede Website liefert ab und an einen 404-Fehler aus. Ein Besucher hat vielleicht eine Adresse falsch eingegeben, oder ein Link existiert unter Umständen nicht mehr. Diese Fehlerseiten kannst du designen, um deinen Besuchern auf die richtige Fährte zu helfen.
  • E-Business, Inspiration, SEO, Showcases
  • Dieter Petereit Dieter Petereit
  • 18. April 2018

Brutalismus im Webdesign: So einfach wie möglich, oder doch einfacher?

Im Design gilt, dass die beste Gestaltung meist jene ist, die so einfach ist, dass sie keiner Erklärung bedarf. Das beste Design bedient sich intuitiv und wird ohne Worte verstanden. Ist Brutalismus also bestes Design? In jedem Fall ist es ein Webdesign-Trend, der schon seit vielen Jahren immer wieder eingesetzt wird, um zu provozieren und Aufmerksamkeit zu erregen.
  • Design, Inspiration, Showcases, UX Design

23 Antworten

  1. Rolf Disch sagt:
    1. Dezember 2015 um 23:28 Uhr

    Hallo Thomas,
    vielen Dank für die sehr gut dokumentierten und hilfreichen scripts.
    Könntest Du mir bitte helfen, so daß ich die Testklasse01.php bzw. TwPdfRechnung.php so ändere, daß anstatt ein neues PDF zu erzeugen in eine bereits vorhandenes PDF-Dokument geschrieben werden kann ?
    Wäre Dir sehr dankbar.
    Interresant wäre auch Daten per PHP in ein PDF-Formular einzutragen.
    Wie kann ich mit PHP die Namen der PDF-Formularfelder abfragen und dann Daten reinschreiben ?
    Liebe Grüße
    Rolf

    Antworten
  2. nohope sagt:
    13. August 2010 um 17:53 Uhr

    @ Walter,

    ich meine damit, der ganze gesetztkonforme Rattenschwanz den man für eine papierlose Rechnungslegung betreiben musst, wird im Artikel gar nicht betrachtet. Und damit kann man den Artikel in die Tonne treten. Wenn man die Überschrift „PDF-Rechnung mit PHP erzeugen“ betrachtet, suggeriert es, ich kann damit meine Rechnungen als digitales Dokument erzeugen. Und das wars. Die obige Rechnung kannst Du nur einen Endverbraucher unterjubeln.

    Für den gewerblichen Bereich fehlt unteranderem:

    Das Einverständnis des Empfängers einholen. Er ist nicht verpflichtet, das elektronische Rechnungsverfahren zu akzeptieren.

    Es wird eine „qualifizierte Signatur“ benötigt.

    Die revisionsichere Archvierung für 10 Jahre gehört auch dazu.

    Der Empfänger ist ist verplichtet vor Geltungmachung der Vorsteuer, die Signatur der Rechnung zu überprüfen. Dies ist zu protokollieren. Andern falls könnte das Finanzamt die Rechnung nicht anerkennen, oder im Extremfall die Buchhaltung des Kunden verwerfen.

    Dies alles kann man als Dienstleistung einkaufen oder selbst vorhalten mit entsprechenden Kosten.

    Es wäre oben besser „PDF mit PHP erzeugen“ als Überschrift genommen worden. Der Author hätte mindestens den Hinweis geben können, diese PDF-Rechnung ist für die papierlose Abwicklung im Geschäftsleben nicht geeignet.

    Ich war auch mal der Meinung, Rechnung digital erzeugen ein Zertifikat basteln und schon kann man seine ganzen Rechnungen mit den Kunden digital abwickeln und man hat viel Geld und Arbeitszeit gespart.

    Um eine Rechnung auszudrucken brauch man kein PDF.

    nohope

    Antworten
  3. Walter sagt:
    12. August 2010 um 18:57 Uhr

    @ nohope:
    Meinst Du jetzt fiskalische Anforderungen bezüglich Angaben, die in der Rechnung enthalten sein müssen, wie fortlaufende Rechnungsnummer etc.? Die kann man ja selbst nachträglich einbauen – wie jede beliebige Zusatzangabe. Ich verstehe das Script als funktionierendes Grundgerüst, das jeder nach Bedarf verändert oder erweitert.

    Oder willst Du die PDF papierlos per E-Mail versenden und Dir fehlt die Signatur?

    LG walter

    Antworten
  4. nohope sagt:
    29. Juli 2010 um 22:47 Uhr

    Hallo,

    das mag ja vielleicht gut sein, um Rechnungen zuerstellen.
    Aber leider hat unser Fiskus andere Anforderungen an eine Rechnung per PDF. Mit so einer erzeugten Rechnung bin ich laut Gesetzt nicht berechtigt die Vorsteuer geltent zumachen.
    Und damit kann man das ganze in die Tonne treten, im gewerblichen Bereich.

    nohope

    Antworten
  5. Walter sagt:
    27. Juni 2010 um 23:40 Uhr

    Hab‘ meinen Fehler schon erkannt und behoben!

    LG, Walter

    Antworten
  6. Walter sagt:
    26. Juni 2010 um 20:07 Uhr

    Hallo Thomas,

    vielen Dank für Deinen Hinweis, er hat mir weiter geholfen.
    Jetzt habe ich noch eine Frage zum Problem von Elias, das Du ja schon gelöst hast. Ich verstehe nur die Lösung nicht richtig. Leider funktioniert es nicht, wenn ich an Stelle von
    $this->Cell(20, 5, sprintf(„%9.2f“, $this->twArrRechnungsdaten[‚rechnungsbetragNetto‘]), 0, 1, ‚R‘);
    folgendes einsetze:
    $this->Cell(20, 5, sprintf(„%9.2f“, $this->twArrRechnungsdaten[’str_replace(‚.‘, ‚,‘, strval(‚rechnungsbetragNetto‘))‘]), 0, 1, ‚R‘);
    Was mache ich falsch?

    Herzlichen Dank im voraus, Walter

    Antworten
  7. Alex sagt:
    11. Mai 2010 um 5:16 Uhr

    Habe mit Hilfe von twpdf ein Programm erstellt um online Rechnungen zu verwalten und zu erstellen.

    Antworten
  8. nathan-dw sagt:
    10. Mai 2010 um 8:51 Uhr

    @Walter:
    Schau mal im Quellcode nach einer Zeile in der Art:
    $this->Cell(array_sum($this->twArrSpaltenbreiten), 0, “, ‚T‘); //Tabellenlinie unten

    Antworten
  9. Walter sagt:
    27. April 2010 um 10:25 Uhr

    Meine vorhergehende Frage hat sich erledigt. Ich belasse die 72 dpi Auflösung und erhalte für das Bild 300 dpi, wenn ich dessen Abmessungen in Millimetern definiere.

    Aber ich habe eine andere Frage:
    Wie bekomme ich eigentlich die Rahmen im multicell-Bereich weg? Für die Headerzeile war es kein Problem, aber ich finde die Zeile nicht, in welcher der Rahmen für die ganzen Array-Einträge abgeschaltet werden kann.

    Ich bitte um einen Hinweis.
    Walter

    Antworten
  10. Walter sagt:
    18. April 2010 um 2:06 Uhr

    Ganz herzlichen Dank, für die Scripte!
    Eine Frage habe ich dazu noch: Typischerweise werden Grafiken/Logos in druckbaren PDF-Dateien ja mit 300 dpi ausgegeben, um knackige Bildeindrücke zu erzeugen. Ich hinterlege also ein ganzseitiges logo.png (210 x 297 mm) mit 300 dpi Auflösung). Damit das passt, habe ich den Skalierungsfaktor in der fpdf.php auf 300 dpi geändert (siehe unten) und das Seitenformat entsprechend um den Faktor 4,167 länger und breiter gemacht:

    //Scale factor
    if($unit==’pt‘)
    $this->k=1;
    elseif($unit==’mm‘)
    $this->k=300/25.4;
    elseif($unit==’cm‘)
    $this->k=300/2.54;
    elseif($unit==’in‘)
    $this->k=300;
    else
    $this->Error(‚Incorrect unit: ‚.$unit);
    //Page format
    $this->PageFormats=array(‚a3’=>array(3507.88,4960.62), ‚a4’=>array(2480.33,3507.88), ‚a5’=>array(1753.92,2480.33),

    Das A4-Hintergrundbild (Logo) füllt die A4-Seite exakt aus. Dummerweise aber glaubt der AcroReader immer noch, dass die PDF-Datei nur eine 72dpi-Auflösung hat und behauptet, sie wäre 875 x 1273 mm groß (genau um den o.g. Faktor 300/72, also 4,167 vergrößert).
    Leider bin ich kein Programmierfreak, aber offenbar muss noch an einer anderen Stelle ein Wert um genau diesen Faktor geändert werden. Aber wo befindet sich die Zeile, in der diese Änderung erforderlich ist. Abschließender Hinweis: Auch die Schrift ist noch an 72 dpi angepasst und dementsprechend im Verhältnis zur realen Seitengröße 4,167 mal zu klein.

    Vielen Dank vorab und beste Grüße
    Walter

    Antworten
  11. Gerhard sagt:
    12. April 2010 um 21:07 Uhr

    Hallo Thomas,

    dieser Beitrag hat mehr sehr geholfen, vielen Dank für Deine Mühe!

    mfG.
    Gerd

    Antworten
  12. Thomas Weise sagt:
    21. Januar 2010 um 19:16 Uhr

    Mal so auf die Schnelle:
    str_replace(‚.‘, ‚,‘, strval(‚DER_BETRAG_MIT_PUNKT‘));

    Das müsstest du überall dort einfügen, wo der Betrag mit Punkt in Komma geändert werden soll.
    Das könnte man zwar auch noch besser in die Klasse gleich integrieren, aber so kannste dir erstmal helfen… 😉

    Antworten
  13. Elias sagt:
    20. Januar 2010 um 17:02 Uhr

    Hallo,

    ein echt gutes Skript! Jedoch eine kleine Anregung sowie eine Frage: Auf Rechnungen schreibt man normalerweise Kommas und keine Punkte, kann ich dies schnell irgendwie ändern?

    Grüße

    Antworten
  14. Thomas Weise sagt:
    14. Januar 2010 um 16:11 Uhr

    @Andy: Ein Parameter, um die maximale Größe zu beschränken ist mir für FPDF nicht bekannt. Wie groß sind denn deine Bilddateien?

    @Tanja: Das „Umlautproblem“ kannst du mit utf8_decode() lösen.
    Beispiel:
    $this->blabla = utf8_decode(„AäöüßB“);
    (FPDF ansich kann kein utf8, dafür ist es aber auch noch nicht so aufgebläht)

    @Marcus: Mit SetFont() kannst du angeben, ob die Schrift fett oder normal sein soll. Verschiedene Zellen hintereinander kannste in der Art erstellen:
    $this->SetFont(‚Arial‘,“,’10‘);
    $this->SetXY(50, 50);
    $this->Cell(50, 5, utf8_decode(„blabla“), 0, 1, ‚R‘);
    $this->SetFont(‚Arial‘,’B‘,’10‘);
    $this->SetXY(100, 50);
    $this->Cell(50, 5, utf8_decode(„blub“), 0, 1, ‚L‘);
    …

    Antworten
  15. Marcus sagt:
    8. Dezember 2009 um 15:02 Uhr

    Hallo,

    erstmal vielen Dank für die tolle Klasse – sowas habe ich schon lange gesucht.
    Ich habe die Klasse jetzt an meine Bedürfnisse angepasst (mein PHP ist nicht so toll – vorallem was Klassen angeht) und es funktioniert auch schon ganz gut.

    Jetzt möchte ich das ganze aber ein bischen erweitern und hänge ein bischen.

    Ich würde gerne haben, dass der Artikelname in fett gerdruckt wird und die „Erklärung“ also im Groben die weiteren Zeilen des Artikels in normaler Schrift geschrieben wird. Leider gibt das ja FPDF nicht her in einer Zelle das zu machen. Ich müsste quasi eine Zelle mit Fettschrift davor einfügen und dann erst die weiteren Zeilen habe aber keine Ahnung wie man das machen könnte.

    Kann mir bitte jemand behilflich sein?
    Vielen Dank im Voraus!

    Antworten
  16. Tanja sagt:
    27. November 2009 um 10:44 Uhr

    tolle Skripte hast Du.

    Nur ich stehe irgendwie auf dem Schlauch. Ich würde gern aus einer Datenbank nur z.B. Artikel-Nr., Beschreibung + Menge auslesen und diese dann als eine Art Katalog ausdrucken.

    Ich habe es mit fpdf versucht und MultiCell, jetzt macht er mir zwar Zeilenumbrüche aber schreibt den Text in die Zeile des nächsten Datensatzes, wie kann ich das ändern, dass die Y-Koordinate anders bestimmt wird

    Habe auch Probleme, dass er mir Umlaute nicht anzeigt. Hast Du hier auch eine Losung. Mit decode habe ich schon probiert aber funktioniert nicht. Vielleicht setze ich es aber auch an die falsche stelle.
    Gruss
    Tanja

    Antworten
  17. Andy sagt:
    28. Oktober 2009 um 0:33 Uhr

    Hallo,

    kurze Frage oder besser zwei Fragen….

    Warum werden die Dateien so groß? Ich habe 3 Bilder dazu gefügt und schon bin ich bei 17,4MB.

    Kann man im PDF Script eine maximale Größe angeben?

    Gruß Andy

    Antworten
  18. Christian sagt:
    9. Juli 2009 um 22:46 Uhr

    Hallo,
    wirklich interessantes Thema. Hab das gleich mal ausprobiert. Die Skripte laufen wohl und es wird etwas generiert nur leider keine PDF, eher ein Zeichensalat als Text im Browser ausgegeben. Von einer richtigen PDF fehlt jede Spur.
    Was mache ich hier falsch?
    Grüße

    Antworten
  19. Shocker sagt:
    11. Mai 2009 um 10:38 Uhr

    Als Alternative zu FPDF kann man sich auch mal TCPDF anschauen: http://www.tcpdf.org 🙂

    Bügelt ein paar Mängel von FPDF aus, wie UTF-8 Support, transparente PNG-24 usw.

    Antworten
  20. Inge sagt:
    11. Mai 2009 um 9:56 Uhr

    Danke für diese detaillierte Anleitung. Ich habe gestern alles probiert und es hat sofort funktioniert! Jetzt passe ich gerade die Werte in der Rechnung auf meine Bedürfnisse an. Es macht Spaß.
    Danke!

    Antworten
  21. sem sagt:
    8. Mai 2009 um 22:53 Uhr

    Eine wirklich feine Sache! Lässt sich auch gut für das eine oder andere „problem“ umfunktionieren…

    Antworten
  22. sw23 sagt:
    8. Mai 2009 um 9:43 Uhr

    Tausend Dank für diesen Artikel – die Erklärungen erscheinen nachvollziehbar, probier ich am Wochenende mal aus. Schön ist, dass diese Lösung auch mit mehrseitigen Rechnungen funktioniert.

    Antworten
  23. Kuchen sagt:
    8. Mai 2009 um 9:11 Uhr

    Danke

    Antworten

Schreibe einen Kommentar Antworten abbrechen

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

Dr. Web Logo weiss.
Fachmagazin für Online-Marketing. Seit 1997. Wissen, Software, Dienstleister: Wir bringen die Digitalisierung Ihres Unternehmens praxisnah voran. ✅

Agentur nach Schwerpunkt finden

  • Als Agentur eintragen
  • Beste Agenturen finden
  • Die besten Digitalagenturen
  • Die besten SEO Agenturen
  • Die besten Webdesign Agenturen
  • Die besten Werbeagenturen
  • WordPress Agentur finden
  • Als Agentur eintragen
  • Beste Agenturen finden
  • Die besten Digitalagenturen
  • Die besten SEO Agenturen
  • Die besten Webdesign Agenturen
  • Die besten Werbeagenturen
  • WordPress Agentur finden

Für Unternehmer: Finden Sie Ihre Agentur in…

  • Aachen
  • Augsburg
  • Basel
  • Bamberg
  • Bayreuth
  • Bergisch-Gladbach
  • Berlin
  • Bern
  • Bielefeld
  • Bochum
  • Bonn
  • Bremen
  • Chemnitz
  • Darmstadt
  • Dortmund
  • Dresden
  • Duisburg
  • Düsseldorf
  • Essen
  • Esslingen
  • Flensburg
  • Frankfurt
  • Freiburg
  • Gelsenkirchen
  • Gießen
  • Goslar
  • Hamburg
  • Hamm
  • Hannover
  • Heidelberg
  • Ingolstadt
  • Innsbruck
  • Karlsruhe
  • Kassel
  • Köln
  • Leipzig
  • Leverkusen
  • Ludwigsburg
  • Mainz
  • Mannheim
  • München
  • Münster
  • Nürnberg
  • Offenburg
  • Oldenburg
  • Osnabrück
  • Passau
  • Pforzheim
  • Potsdam
  • Regensburg
  • Reutlingen
  • Rosenheim
  • Rostock
  • Salzburg
  • Starnberg
  • Stuttgart
  • Tübingen
  • Wien
  • Wiesbaden
  • Wuppertal
  • Würzburg
  • Zürich
  • Aachen
  • Augsburg
  • Basel
  • Bamberg
  • Bayreuth
  • Bergisch-Gladbach
  • Berlin
  • Bern
  • Bielefeld
  • Bochum
  • Bonn
  • Bremen
  • Chemnitz
  • Darmstadt
  • Dortmund
  • Dresden
  • Duisburg
  • Düsseldorf
  • Essen
  • Esslingen
  • Flensburg
  • Frankfurt
  • Freiburg
  • Gelsenkirchen
  • Gießen
  • Goslar
  • Hamburg
  • Hamm
  • Hannover
  • Heidelberg
  • Ingolstadt
  • Innsbruck
  • Karlsruhe
  • Kassel
  • Köln
  • Leipzig
  • Leverkusen
  • Ludwigsburg
  • Mainz
  • Mannheim
  • München
  • Münster
  • Nürnberg
  • Offenburg
  • Oldenburg
  • Osnabrück
  • Passau
  • Pforzheim
  • Potsdam
  • Regensburg
  • Reutlingen
  • Rosenheim
  • Rostock
  • Salzburg
  • Starnberg
  • Stuttgart
  • Tübingen
  • Wien
  • Wiesbaden
  • Wuppertal
  • Würzburg
  • Zürich

Aus unserem Magazin

  • Buchhaltung
  • Content Marketing
  • Design
  • Digitalisierung
  • E-Business
  • E-Commerce
  • E-Mail-Marketing
  • Finanzen
  • Freelancer
  • Hosting
  • HTML
  • HTML/CSS
  • Inspiration
  • IT Sicherheit
  • JavaScript & jQuery
  • Jobs & Karriere
  • Online-Marketing
  • Programmierung
  • Public Relations
  • Rechtliches
  • Responsive Design
  • SEA – Suchmaschinenwerbung
  • SEO
  • Showcases
  • Social-Media-Marketing
  • Tipps, Tricks & Tutorials
  • Tools
  • UX Design
  • VPN
  • Webdesign
  • WordPress
  • Buchhaltung
  • Content Marketing
  • Design
  • Digitalisierung
  • E-Business
  • E-Commerce
  • E-Mail-Marketing
  • Finanzen
  • Freelancer
  • Hosting
  • HTML
  • HTML/CSS
  • Inspiration
  • IT Sicherheit
  • JavaScript & jQuery
  • Jobs & Karriere
  • Online-Marketing
  • Programmierung
  • Public Relations
  • Rechtliches
  • Responsive Design
  • SEA – Suchmaschinenwerbung
  • SEO
  • Showcases
  • Social-Media-Marketing
  • Tipps, Tricks & Tutorials
  • Tools
  • UX Design
  • VPN
  • Webdesign
  • WordPress

Rechtliches

  • Datenschutzerklärung
  • Geschäftsbedingungen (AGB)
  • Impressum
  • Kontakt
  • Privatsphäre-Einstellungen ändern
  • Historie der Privatsphäre-Einstellungen
  • Einwilligungen widerrufen
  • Nach oben ↑
  • Datenschutzerklärung
  • Geschäftsbedingungen (AGB)
  • Impressum
  • Kontakt
  • Privatsphäre-Einstellungen ändern
  • Historie der Privatsphäre-Einstellungen
  • Einwilligungen widerrufen
  • Nach oben ↑