FPDF - Tabellenhöhe automatisch mitanpassen

  • PHP

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von GCAsk.

    FPDF - Tabellenhöhe automatisch mitanpassen

    Guten Tag,

    zur Erstellung von PDF-Dokumenten nutze ich FPDF in Verbindung mit PHP.

    Dies funktioniert soweit auch ganz zuverlässig, allerding stehe ich derzeit vor einem Problem und weiß nicht, wie ich weiterkommen kann.

    Es geht um die Erstellung von Tabellen. Deren Inhalt wird aus einer Datenbank ausgelesen - soweit alles kein Problem.
    Nun kommt es aber auch vor, dass der entsprechende Text, der ausgelesen wird, bzw. dessen Länge immer variiert. Von daher muss ich die Tabellenhöhe immer automatisch ermitteln lassen bzw. automatisch anpassen lassen.
    Das geht soweit auch, habe dies anstelle von $pdf->Cell(bla bla) mittels $pdf->MultiCell (bla bla) hinbekommen. Jetzt macht er automatisch die Höhe länger, wenn auch mehr Text drin ist.

    Das einzige Problem was jetzt noch besteht, dass die Nachbarzellen nicht automatisch die gleiche Höhe mitübernehmen.

    Das ist natürlich unpraktisch, denn wenn eine Spalte mehr Text beinhaltet, als die Spalte nebendran, so ist zwar die Höhe der Zeile bei der einen Spalte größer, bei der anderen bleibt sie aber so klein. Das sieht natürlich absolut bekloppt bei einer Tabelle aus, da alle Tabellenspalten in einer Reihe unterschiedlich hoch sein können.
    GIbt es irgendeine Möglichkeit, dass sich die Zellen nebenan in einer Reihe automatisch an das höchste anpassen?

    Wäre über Hilfe sehr dankbar!

    GCAsk schrieb:

    Das einzige Problem was jetzt noch besteht, dass die Nachbarzellen nicht automatisch die gleiche Höhe mitübernehmen.

    Hast du ein wenig Code, mit dem man dir vllt. etwas helfen könnte? Ich nehme mal an, dass dies in einer Schleife passiert- aber was genau passiert denn da?
    Option Strict On!

    Drahuverar schrieb:

    GCAsk schrieb:

    Das einzige Problem was jetzt noch besteht, dass die Nachbarzellen nicht automatisch die gleiche Höhe mitübernehmen.

    Hast du ein wenig Code, mit dem man dir vllt. etwas helfen könnte? Ich nehme mal an, dass dies in einer Schleife passiert- aber was genau passiert denn da?

    Da ist das Problem. Ich dachte eigentlich, ich könnte den Y-Wert einfach für jeden Eintrag aus der DB um einen bestimmten Wert erhöhen, z.B. um 4. So könnte ich dann einfach $pdf->SetXY dynamisch festlegen.
    Das Problem ist aber nun, dass es Spalten gibt, die unterschiedlich lang sein können. Erhöhe ich das dann einfach in der Schleife beim Auslesen, so überlappen sich die Texte.

    Hier mal ein Code (welcher mnauell die Zeilen generiert, dient nur zum Verstehen, was da eigentlich vor sich geht). In der Schleife würde ich für jeden Eintrag in der DB die Variable X einfach um 4 z.B. erhöhen, sodass ich per $pdf->SetXY darauf zugreifen kann.

    PHP-Quellcode

    1. //Header
    2. $pdf->SetFont('Arial', 'B', 7);
    3. $pdf->SetDrawColor(0, 0, 0);
    4. $pdf->SetLineWidth(0.4);
    5. $pdf->SetXY(10, 25);
    6. $pdf->Cell(16,10,utf8_decode('Spalte1'),1,1);
    7. $pdf->SetXY(26,25);
    8. $pdf->Cell(14,10,utf8_decode('Spalte2'),1,1);
    9. $pdf->SetXY(40,25);
    10. $pdf->Cell(15,10,utf8_decode('Spalte3'),1,1);
    11. $pdf->SetXY(55,25);
    12. $pdf->Cell(65,10,utf8_decode('Spalte4'),1,1);
    13. //Headerende
    14. //Body
    15. $pdf->SetFont('Arial', '', 7);
    16. //Reihe 1
    17. $pdf->SetXY(10, 35);
    18. $pdf->MultiCell(16,4,utf8_decode('Wert1 R1'),1,1);
    19. $pdf->SetXY(26, 35);
    20. $pdf->MultiCell(14,4,utf8_decode('Wert2 R1'),1,1);
    21. $pdf->SetXY(40,35);
    22. $pdf->MultiCell(15,4,utf8_decode('Wert3 R1'),1,1);
    23. $pdf->SetXY(55,35);
    24. $pdf->MultiCell(65,4,utf8_decode('Wert4 R1 ist jetzt beispielsweise ein sehr langer Text. Dieser kann immer variieren, also kann man diesem keine feste Größe zuweisen.'),1,1);
    25. //Reihe 2
    26. $pdf->SetXY(10, 39);
    27. $pdf->MultiCell(16,4,utf8_decode('Wert1 R2'),1,1);
    28. $pdf->SetXY(26, 39);
    29. $pdf->MultiCell(14,4,utf8_decode('Wert2 R2'),1,1);
    30. $pdf->SetXY(40,39);
    31. $pdf->MultiCell(15,4,utf8_decode('Wert3 R2'),1,1);
    32. $pdf->SetXY(55,39);
    33. $pdf->MultiCell(65,4,utf8_decode('Wert4 R2 ist jetzt beispielsweise ein sehr langer Text. Dieser kann immer variieren, also kann man diesem keine feste Größe zuweisen.'),1,1);
    34. //Bodyende


    Wie sollte ich das am besten lösen? Danke im Voraus! Das Einzige, was funktioniert ist, dass sich die Zelle automatisch vergrößert, wenn der Text auch länger ist. Nun muss ich halt noch die entsprechenden Nachbarzellen automatisch anpassen lassen und die nächste Reihe halt danach und nicht mittendrin einfügen.

    GCAsk schrieb:

    Wie sollte ich das am besten lösen?

    Mhh.. Also wenn du die Werte aus der Datenbank bekommst..
    Vielleicht einfach mit PHP + HTML zusammen und dann einfach "FPDF" übergeben ?
    Ich muss gestehen, dass ich mit FPDF nicht viel am Hut habe, muss ich mir mal ansehen- dann kann ich weiter senfen :thumbsup:

    (Beispiel schon gesehen?)
    Option Strict On!

    Drahuverar schrieb:

    Vielleicht einfach mit PHP + HTML zusammen und dann einfach "FPDF" übergeben ?

    Hm, geht das denn? Kann ich einfach den HTML Quellcode direkt an FPDF übergeben, um daraus direkt die PDF-Datei generieren zu lassen? Bin noch relativ neu und unerfahren mit FPDF.

    Das Beispiel kann ich mir mal anschauen. Dein Vorschlag mit PHP+HTML würde mir aber am besten gefallen :)

    /EDIT:
    @Drahuverar Habe gerade das hier gefunden :) Sieht gut aus ;) Glaub das mach ich dann so, vielen Dank für den Tipp, melde mich dann nochmal, wenn alles funktioniert hat.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „GCAsk“ ()

    Drahuverar schrieb:

    Andere Frage, muss es FPDF sein? Könnte auch eine andere Klasse helfen?

    Grundsätzlich ist ees eigentlich egal, wichtig ist, dass ich einfach, wie in FPDF, eine Datei in PHP includen kann.
    Wenn du was vergleichbares kennst, gerne her damit.

    Ich versuche mich aber erst einmal an das von mir genannte Beispiel, wenn alles klappt, hat sich das sowieso erst einmal erledigt.