Hi,
alles in Ordnung? Für mich leider noch überhaupt nicht. Bis jetzt weiß ich nur, wenn ich <page pageset=old"> nach dem ersten </page> anfüge habe ich eine zweite Seite.
und ich dachte, das zu wissen würde genügen.
Ja, zum Beispiel. Und?
Das ist nicht ganz trivial, zugegeben, aber es ist auch nicht gerade "rocket science".
Und? Da meine PHP Kenntnisse nicht gerade die besten sind ...
Sorry, dann habe ich dich falsch eingeschätzt. Du hast dich hier in letzter Zeit in anderen Threads so eifrig und oft richtig und hilfreich engagiert, dass ich gute PHP-Kenntnisse einfach vorausgesetzt habe.
Ich zeig einfach mal meinen PHP Code, der nur für das PDF zuständig ist
Okay, und ich geb mal meinen Senf dazu. ;-)
<page backtop="1%" backbottom="2%" backleft="5%" backright="5%">
<page_footer style="text-align:center; line-height:14px; font-size:10px; height:300px;">
<?php echo nl2br(htmlspecialchars($text_unten));?>
</page_footer>
Stopp. Dieser Abschnitt scheint zwar okay zu sein, aber ein genereller Rat: PDF ist ein Print-ähnliches Ausgabeformat. Deswegen ist es hier sinnvoll, mit absoluten Maßeinheiten wie mm oder pt (etwa bei Schriftgrößen) zu hantieren - also genau das, was man bei Webseiten normalerweise nicht tun möchte.
Auch das folgende Tabellenlayout würde ich normalerweise kritisieren; als Zwischenstufe zur Erzeugung eines PDF-Dokuments ist es aber IMO in Ordnung.
<tbody>
<?php $pos = 1;
foreach($UserAusgabe as $array)
{ ?>
<tr style="height:1.5em;">
<td style="width:9%; text-align:left; vertical-align:top;"><?php echo $pos;?></td>
<td style="width:89%; text-align:left; vertical-align:top;">
<div style="padding-bottom:10px"><?php echo htmlspecialchars($array['UserName']); ?></div>
<br><br>
</td>
</tr>
<?php
$pos++;
} ?>
</tbody>
Nochmal Stopp. Das ist doch genau der Knackpunkt. Und wie praktisch: Du lässt sowieso schon einen Zähler mitlaufen! Eine Quick'n'Dirty-Lösung könnte also sein, unmittelbar nach dem Erhöhen von $pos abzufragen, ob $pos durch 4 teilbar ist, also (($pos%4)==0) ist. Wenn ja, gibst du einmal das ganze Geraffel (Tabellen beenden, Seite beenden, neue Seite beginnen, Kopfzeile und Tabellengerüst neu ansetzen) aus, was zum Beenden und Neu-Beginnen einer Seite nötig ist.
Schön ist das von der Code-Struktur aber nicht. Schöner wäre IMO, ganz zu Anfang die Anzahl der Einträge zu ermitteln (die kriegst du ja mit count($UserAusgabe) leicht raus), und dann eine äußere Schleife um die gesamte Ausgabe zu legen, die von 0 bis count($UserAusgabe)/4-1 läuft. Dann ist noch etwas Detailarbeit nötig; so müssen etwa innerhalb der Schleife dann alle $pos durch $pos+4*$seite ersetzt werden. Außerdem geht die elegante Iteration mit foreach() dann nicht mehr, sondern du müsstest eine konventionelle for-Schleife mit einem numerischen Index benutzen. Dabei beachten, dass Array-Indexe normalerweise ab 0 zählen, du beginnst mit $pos aber bei 1.
Ich skizziere nur mal die Grobstruktur in Pseudocode, wie ich es angehen würde. Ganz anders, aber vielleicht taugt es als Inspiration.
datenbankabfrage(); // alle Datensätze holen
for ($i=0; $i<count($daten); $i++) // über alle Datensätze iterieren
{ datensatz = $daten[$i]; // aktueller Datensatz pro Durchlauf
$seite = ($i/4) + 1; // Seitennummer
$posnr = $i+1; // Positionsnummer des Datensatzes
if (($i%4)==0)) // ist $i durch 4 teilbar?
{ beginneneueseite(); // neue Seite (<page>, Kopfzeile, Tabellengerüst)
}
erzeugeausgabe($posnr, $datensatz); // aktuellen Datensatz ausgeben
if (($i%4)==3) // Ergibt $i/4 den Divisionsrest 3
|| $i==count($daten)-1) // oder sind wir im letzten Durchlauf?
{ beendeaktuelleseite(); // Tabelle abschließen, </page>
}
}
Und bevor jetzt einer kommt und sagt warum ich hier inline CSS nutzte, ich kann leider im PDF kein externes CSS Anwenden daher inline!
Geschenkt. Finde ich zwar nicht schön, aber wenn's denn so ist ...
Ich weiß wie viele Einträge in der Datenbank sind, diesen Wert erhalte ich mit $SummeUserDBPDF derzeit steht hier z.B. eine 6 drin.
Ah, also ist die Abfrage mit count() sogar überflüssig.
So long,
Martin