Seitenumbruch

Diskussionen und Austausch über die von FPDF bereitgestellten Methoden, Problemen bei der Anwendung etc.
Benutzeravatar
centauro
Benutzer
Beiträge: 39
Registriert: Mo 13. Okt 2008, 19:39

Seitenumbruch

Beitragvon centauro » Fr 1. Aug 2014, 11:01

Hallo Leute,

irgendwie kriege ich den Seitenumbruch in meinem Script nicht sauber hin.
Nach der ersten Seite wird zwar nach 25 Zeilen umgebrochen aber auf der zweiten Seite geht es erst ab der 26. Zeile los. Und danach kommt nichts mehr ausser die Spaltenüberschriften, die auf jeder Seite erscheinen sollen.
Könnte sich das mal bitte jemand anschauen?

Ich habe schon viereckige Augen vom vielen lesen.

Besten Dank.

Hier mein Codeschnipsel.

[PHP]
//Create new pdf file
$pdf=new FPDF();

//Open file
$pdf->Open();

//Disable automatic page break
$pdf->SetAutoPageBreak(false);

//Add first page
$pdf->AddPage('L');

//set initial y axis position per page
$y_axis_initial = 25;
$y_axis = 25;

//Set Row Height
$row_height = 6;

//print column titles for the actual page
$pdf->SetFillColor(232, 232, 232);
$pdf->SetFont('Arial', 'B', 8);
$pdf->SetY($y_axis_initial);
$pdf->SetX(25);

$pdf->Cell(30, 6, 'Rechnungsnummer', 1, 0, 'L', 1);
// $pdf->Cell(20, 6, 'KFZ-Kennzeichen', 1, 0, 'L', 1);
$pdf->Cell(30, 6, 'Name', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Nettobetrag', 1, 0, 'L', 1);
$pdf->Cell(35, 6, 'MWST', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Bruttobetrag', 1, 0, 'L', 1);
$pdf->Cell(40, 6, 'MWST-Veranlagung', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Zahlungsziel', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Zahlungsstatus', 1, 0, 'L', 1);

if ($y_axis>0) {
$y_axis = $y_axis + $row_height;
}

//Select the Products you want to show in your PDF file
$result2=mysql_query("SELECT * FROM rechnung WHERE zahlungsstatus='Bezahlt' AND kgsdb_kunde='".$_SESSION['kgsdb_kunde']."' order by ID");
$anzahl = mysql_num_rows($result2);

//initialize counter
$i = 0;

//Set maximum rows per page
$max = 25;
$row_height = 6;

while($ergebnis2 = mysql_fetch_array($result2))
{

//Spaltenueberschriften
if ($i==$max)
{
$pdf->AddPage('L');

//Drucke die Spaltenueberschriften aus
$pdf->SetY($y_axis_initial);
$pdf->SetX(25);
$pdf->Cell(30, 6, 'Rechnungsnummer', 1, 0, 'L', 1);
// $pdf->Cell(20, 6, 'KFZ-Kennzeichen', 1, 0, 'L', 1);
$pdf->Cell(30, 6, 'Name', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Nettobetrag', 1, 0, 'L', 1);
$pdf->Cell(35, 6, 'MWST', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Bruttobetrag', 1, 0, 'L', 1);
$pdf->Cell(40, 6, 'MWST-Veranlagung', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Zahlungsziel', 1, 0, 'L', 1);
$pdf->Cell(25, 6, 'Zahlungsstatus', 1, 0, 'L', 1);

//Go to next row
$y_axis = $y_axis + $row_height;
$i=0;
}


//Beginn der Datenzeilen
$rechnungsnummer = $ergebnis2['Rechnungsnummer'];
//$kfz = $ergebnis2['KFZ-Kennzeichen'];
$name = $ergebnis2['Name'];
$netto = $ergebnis2['Nettobetrag'];
$mwst = $ergebnis2['Mwst'];
$brutto = $ergebnis2['Bruttobetrag'];
$mwst_veranlagung = $ergebnis2['mwst_veranl'];
$zahlungsziel = $ergebnis2['Zahlungsziel'];
$zahlungsstatus = $ergebnis2['zahlungsstatus'];


$pdf->SetY($y_axis);
$pdf->SetX(25);
//$pdf->SetFillColor($color);
$pdf->Cell(30, 6, $rechnungsnummer, 1, 0, 'L', 0);
//$pdf->Cell(20, 6, $kfz, 1, 0, 'L', 0);
//$pdf->setFillColor($color);
$pdf->Cell(30, 6, $name, 1, 0, 'L', 0);
$pdf->Cell(25, 6, $netto, 1, 0, 'L', 0);
$pdf->Cell(35, 6, $mwst, 1, 0, 'L', 0);
$pdf->Cell(25, 6, $brutto, 1, 0, 'L', 0);
$pdf->Cell(40, 6, $mwst_veranlagung, 1, 0, 'L', 0);
$pdf->Cell(25, 6, $zahlungsziel, 1, 0, 'L', 0);
$pdf->Cell(25, 6, $zahlungsstatus, 1, 0, 'L', 1);

//Go to next row
$y_axis = $y_axis + $row_height;

$i = $i + 1;

}

//mysql_close($con);


//Dokument ausgeben
$pdf->Output('ZAHLUNGSEINGAENGE.pdf', 'D');
[/PHP]

Benutzeravatar
Wirus!
Beiträge: 1523
Registriert: Do 22. Jun 2006, 18:23

Beitragvon Wirus! » Fr 1. Aug 2014, 12:06

Das Problem dürfte in dieser Zeile liegen:
[PHP]$pdf->SetY($y_axis);[/PHP]

Du zählst einfach hoch, ohne zu prüfen, ob der Wert überhaupt noch auf die Seite passt oder ob nicht zwischenzeitlich ein Seitenwechsel stattgefunden hat.

Immer wenn $y_axis größer ist als die Seitenlänge minus AutoPageBreak-Abstand wird eine neue Seite angefügt.

Ich würde bei Dokumenten mit automatischem Seitenumbruuch immer mit relativen werten, z.B. mit Ln() arbeiten

BTW: Ich lösche mal das Doppelpost.

Benutzeravatar
centauro
Benutzer
Beiträge: 39
Registriert: Mo 13. Okt 2008, 19:39

Beitragvon centauro » Fr 1. Aug 2014, 14:22

Danke! Passt!

Benutzeravatar
centauro
Benutzer
Beiträge: 39
Registriert: Mo 13. Okt 2008, 19:39

Beitragvon centauro » Fr 1. Aug 2014, 16:08

Ich habe leider noch ein Problem und komme nicht auf die Lösung.

Also:

Das SQL müsste mir eigentlich 225 Zahlungseingänge anzeigen.
Leider zeigt es mir lediglich 83 Zahlungseingänge an.

Die Frage ist "WARUM?".

Ich habe direkt mal auf der Datenbank geschaut und festgestellt das es 225 Zahlungseingänge mit dem Status "Bezahlt" gibt.

Genau danach frage ich mit folgender Abfrage:

[PHP]
$sql2="SELECT Rechnungsnummer, Name, Nettobetrag, Mwst, Bruttobetrag, mwst_veranl, Zahlungsziel, zahlungsstatus FROM rechnung WHERE kgsdb_kunde='".$_SESSION['kgsdb_kunde']."' AND zahlungsstatus='Bezahlt'";
$result2 = mysql_query($sql2);

$anzahl = mysql_num_rows($result2);
[/PHP]

Num_Rows gibt mir blöderweise 83 Zahlungen aus und ich weiss noch nicht warum.

Hast Du eine Ahnung?

supertramp
Erfahrener Benutzer
Beiträge: 1305
Registriert: So 19. Sep 2004, 15:51

Beitragvon supertramp » Di 5. Aug 2014, 16:13

Lass dir doch mal den Wert ausgeben und vergleiche ihn mit dem was du erwartest.
Schalte dafür die PDF-Ausgabe aus und du kannst recht einfach debuggen.
Fragen zu PHP?
1) Handbuch lesen: www.php.net
2) selbst probieren
3) google fragen
4) andere fragen: www.developers-guide.net
5) PHP-Tutorial - erste Schritte mit PHP

Hilfe in PHP/FPDF gesucht?
--> mykro.de

Benutzeravatar
Wirus!
Beiträge: 1523
Registriert: Do 22. Jun 2006, 18:23

Beitragvon Wirus! » Di 5. Aug 2014, 16:28

Du fragst zwei Werte ab:

[PHP]$sql2="SELECT .. FROM rechnung WHERE kgsdb_kunde='".$_SESSION['kgsdb_kunde']."' AND zahlungsstatus='Bezahlt'"; [/PHP]

Daher gilt: Wenn 255 bezahlt sind und nur 83 ausgegeben werden, haben die restlichen Datensätze bei kgsdb_kunde nicht den richtigen Wert.

Teste mit
[PHP]$sql2="SELECT Rechnungsnummer, Name, Nettobetrag, Mwst, Bruttobetrag, mwst_veranl, Zahlungsziel, zahlungsstatus FROM rechnung WHERE zahlungsstatus='Bezahlt'";[/PHP]


Zurück zu „Programmierung“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste