PHP: dyn. Inhalt auf zwei Seiten

Hi,

ich komm bei meinem Problem einfach nicht weiter:

Ich hab in PHP ein Art Rechnungsprogramm erstellt und will die dyn. erzeugte Rechnung per
Firefox ausdrucken. Der Kopf und der Fuß ist immer gleich groß und mit dyn. Inhalten gespickt.

Wenn die Tabelle (per for-Schleife erzeugt) länger wird, sodass sie nichtmehr auf Blatt 1 passt, möchte ich, dass die nächste Seite begonnen wird. Dabei soll der Kopf und der Fuß des ersten

Blattes übernommen werden und in der Mitte mit der Tabelle fortgefahren werden. Bei mir ist der Fall, wenn die Seite länger wird, der Fuß logischerweise noch unten gedrückt wird.

Wie kann ich das Problem umgehen?

MfG, xcube

Da musst du bei der Erstellung von den Inhalten immer schön brav mitrechnen wieviel Platz benötigt wird und das ganze an entsprechender Stelle abteilen lassen. Weiter mit einem neuen Head, Fortsetzung der Inhalte+Platzbedarf des Leerraums, Footer einfügen.

Sehr aufwändig, noch dazu, dass alle Drucker unterschiedliche Druckränder haben und es somit auf einem gut gehen kann, aber auf einem anderen nicht mehr.

Würde da lieber versuchen das mittels z.B. (www.fpdf.de/) in ein Dokument zu quetschen.
Die Berechnungen bleiben dir nicht erspart, du bist aber unabhängig von Schriften/Schriftgrößen/Browserdruckeinstellungen und dgl., und es lässt sich wesentlich besser Positionieren.

Für (X)HTML könnte man mal gucken, was CSS da für die
Dekoration zur Druckerausgabe bietet, damit kann man sicher
einiges verbessern. Seitenköpfe und -füße müßte man allerdings
mal genauer nachgucken, das könnte kniffliger werden, wenn
CSS (2 oder besser 3?) keine gesonderten Mechanismen
bereitstellt, außer :before und :after etc

CSS-Dekoration für Druckerausgaben und deren Interpretation von
gängigen browsern kann aber nochmal ein anderes Problem sein.

Wenn man genau festlegen zu müssen glaubt, wie der Inhalt beim
Drucken auf verschiedene Seiten aufgeteilt wird, sind (X)HTML
und CSS immer problematisch, weil das ja gerade darauf
optimiert ist, den Kram in einer für den Nutzer optimalen Art
darzustellen, da ist sowas wie eine feste Seitengröße oder noch
mehr feste Schriftzeichengröße natürlich sehr kontraproduktiv.
Dafür sind dann ja jedenfalls die Formate PDF, (E)PS etc
skalierbar, jedenfalls bevor man druckt, damit der Kram anständig
lesbar gemacht werden kann.

Wenn du die Daten nicht aus einer Tabelle holst, musst du zuerst alle Inhalte zwischenspeichern. Das geht am einfachsten in einer Session:

for($i=0; $i<10; $i++)
  $_SESSION['table'] = array("Spalte1", "Spalte2", "Spalte3");

Auf diese gespeicherten Daten kannst du dann zugreifen:

<?php session_start(); ?>
<html>
<head></head>
<body>

<table>
<?php
$per_page = (ctype_digit($_GET['per_page']) ? $_GET['per_page'] : 10);
$start = (ctype_digit($_GET['start']) ? $_GET['start'] : 0);
$count = count($_SESSION['table']);

for($i = $start; $i < $start + $per_page && isset($_SESSION['table'][$i]); $i++)
{
    echo "<tr><td>".implode("</td><td>", $_SESSION['table'][$i])."</td></tr>";
}
?>
</table>
<?php
$vor = (($start >= $per_page) ? ($start-$per_page) : 0);
$nach = (($start + $per_page < $count ? $start + $per_page : 0);

if($start > 0) echo "<a href='$vor'>Vorherige Seite</a>";
if($nach) echo "<a href='$nach'>Nächste Seite</a>";
</body>
</html>

Ungetestet und nur zur Anregung gedacht :wink:
Alternativ kannst du das ganze in divs aufteilen und per JS immer den nächsten anzeigen, und dann immer print() aufrufen