FPDF - Seitenberechnung bei Text

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • FPDF - Seitenberechnung bei Text

    Hallo,

    ich nutze FPDF (fpdf.org) zum erstellen von Dokumenten und Rechnungen. Da es natürlich vorkommen kann, dass man mehrere Seiten benötigt, berechne ich die Seitenzahl bei Rechnungen mithilfe der Positionen (Festgelegte Höhe, also kein Problem). Bei den Dokumenten gestaltet sich das deutlich schwieriger. Zum einen, weil ich gerne alle Funktionen, die ein normales Office-Programm mit sich bringt nutzen möchte (nutze hierfür den WCF-Editor, gebe mir die Nachricht als HTML aus und schreibe den HTML-Inhalt in das PDF) und zum anderen, weil ich die Höhe des Inhaltes vorher nicht weiß.

    Hat jemand eine Idee, wie ich auch bei Dokumenten die Seitenanzahl berechnen und den Inhalt an geeigneter Stelle brechen und auf der nächsten Seite fortsetzen kann?


    Quellcode

    1. $pages = intval(ceil(count($invoicePositions) / 20));
    2. for ($x = 0, $y = $pages; $x < $y; $x++) {
    3. $gxPDF->AddPage();
    4. // write out
    5. }

    Beispiel Rechnungen: 20 Positionen pro Seite
  • Seitenanzahl berechnen? Dafür gibt es doch Methoden ;)

    Die fortlaufende Seitenzahl wird von PageNo() zurückgegeben; die gesamte Anzahl der Seiten erhät man mittels einen speziellen Wert {nb} welcher beim Schliessen des Dokuments gesetzt wird. (sofern man AliasNbPages() ausgeführt hat!).
    Man beachte die SetY() Methode, welche es erlaubt eine absolute Position auf einer Seite zu definieren, ausgehend von oben oder unten.
    Es wird noch ein interessantes Feature verwendet: der automatische Seitenumbruch.


    Weitere Erläuterungen und Beispielcode findest du hier: fpdf.de/tutorials/2/

    Übrigens auch sehr gut in Zusammenarbeit mit FPDI zu verwenden: Unterschiedliche Templates für die erste (mit Briefkopf) und zweite Seite:

    Quellcode

    1. class PaymentPdf extends FPDI{
    2. //set topmargin and sourcefile
    3. function Header(){
    4. if($this->PageNoFormatted() == 1){
    5. $this->SetTopMargin(60);
    6. $sourcefile = 'template1.pdf';
    7. $pagecount = $this->setSourceFile($sourcefile);
    8. }
    9. else{
    10. $this->SetTopMargin(25);
    11. $sourcefile = 'template2.pdf';
    12. $pagecount = $this->setSourceFile($sourcefile);
    13. }
    14. $tplidx2 = $this->ImportPage(1);
    15. $this->useTemplate($tplidx2);
    16. }
    17. }
    Alles anzeigen
  • FPDI finde ich auch ganz nett, deckt aber nicht alles ab. Natürlich gibt es einen automatischen Seitenumbruch, doch dann folgt die Seitenleiste auf die letzte Seite (Kann auch nicht via Template gelöst werden, da individuelle Werte).
  • Hm, stimmt - hätte ich mir auch denken können :D

    Also müsste ich mir nun für alle sechs Dokumententypen eine Klasse schreiben, damit die Seitenleiste entsprechend dem Dokumententyp eingebunden wird. Aktuell sind es drei Klassen (Allgemein, Kunde und Verein), die jeweils drei Dokumententypen beinhalten (Einfaches Dokument (ohne Anschrift), Dokument mit Anschrift (Eingabe einer Anschrift) und Benutzerdokument (Adresse via BenutzerID)). Mit einer Abfrage im Konstruktor wollte ich nicht arbeiten.


    Ich werde mal schauen, was sich machen lässt - danke für die Hilfe (immerhin gibt es noch Menschen, die gerne helfen).