Mailinglisten-Archive |
Hallo Liste, da ich derzeit an der Erstellung einer PDF-Datei mittels FPDF arbeite um einen Einzelverbindungsnachweis (EVN) zu generieren benötige ich Eure Hilfe. Folgendes Problem besteht bei mir was ich einfach nicht gelöst bekomme. Ich arbeite eine XML Datei ab um die einzelnen Verbindungen zu erhalten und diese dann in PDF umzuwandeln, leider bekomme ich bei jeder neuen Seite die Überschirft der Verbindungen nicht hin. Er schreibt mir diese dann nach jeder Verbindung erneut, was laut Programmierung ja auch richtig ist, aber nicht sein soll. Ich möchte die Überschrift nur dann, wenn eine neue Seite anglegt wurde und die 1. Zeile keine neue Rufnummer ist. Als Beispiel mal folgendes wie es auf der 1. Seite aussieht: Verbindungen über Rufnummer 03491411485 Nr. Beginn Tarifzeit Rufnummer Ziel Tarifzone Dauer Betrag 1 02.10.2006 15:48:48 03491467919 Gesamte Woche Lutherstadt Wittenberg wb on-net 00:00:30 0,0130 2 03.10.2006 17:12:44 03491467919 Gesamte Woche Lutherstadt Wittenberg wb on-net 00:00:22 0,0130 3 03.10.2006 20:59:18 03491467919 Gesamte Woche Lutherstadt Wittenberg wb on-net 00:00:34 0,0130 auf der 2. Seite geht es folgendermaßen weiter wenn es sich immernoch um die selbe Rufnummer (im Script ist das der Bereich foreach($xml->voice_detail as $voice_detail) {...}) 67 30.10.2006 14:02:03 03491467919 Gesamte Woche Lutherstadt Wittenberg wb on-net 00:03:42 0,0520 Nr. Beginn Tarifzeit Rufnummer Ziel Tarifzone Dauer Betrag 68 30.10.2006 15:01:52 03491467919 Gesamte Woche Lutherstadt Wittenberg wb on-net 00:00:19 0,0130 Nr. Beginn Tarifzeit Rufnummer Ziel Tarifzone Dauer Betrag 69 30.10.2006 15:03:04 03491467919 Gesamte Woche Lutherstadt Wittenberg wb on-net 00:10:21 0,1430 wie man sieht kommt die Überschrift immer wieder. Wenn es nun eine neue Seite ist und auch eine neue Rufnummer sieht es folgendermaßen aus: Verbindungen über Rufnummer 0349146790 Nr. Beginn Tarifzeit Rufnummer Ziel Tarifzone Dauer Betrag Nr. Beginn Tarifzeit Rufnummer Ziel Tarifzone Dauer Betrag 1 02.10.2006 08:24:40 015118133859 Gesamte Woche T-Mobile T-Mobile 00:00:08 0,1816 Nr. Beginn Tarifzeit Rufnummer Ziel Tarifzone Dauer Betrag 2 02.10.2006 09:38:14 039858272 Tag (Mo-Fr 09:00 - 17:59:59 Uhr) Bietikow National 00:00:28 0,0430 Der Bereich um den es sich dreht ist: foreach($voice_detail->call as $call) {...} Wie könnte ich dies nun lösen, das die Überschrift (Nr. Beginn Tarifzeit...) nur dann angezeigt wird, wenn: 1. eine neue Seite erstellt wird 2. keine neue Rufnummer verwendet wird Hat jemand eine Idee? Hier noch das Script: <?php error_reporting(E_ALL); require('fpdf/fpdf.php'); // das eigentliche PHP-Modul require('stylePDF.php'); // das eigentliche PHP-Modul // Objekt aus eigener Klasse erzeugen $pdf = new stylePDF('P','mm','A4'); $pdf->SetMargins(17, 20, 8); $pdf->AddPage(); $stored_page = $pdf->page; $filename = '100373_10007131_itb.xml'; if(file_exists($filename)) { $xml = simplexml_load_file($filename); if($xml) { foreach($xml->voice_detail as $voice_detail) { $pdf->SetTextColor(0,0,0); $pdf->SetFont('Arial','B',10); $pdf->Cell(0, 7, 'Verbindungen über Rufnummer '.$voice_detail->subscriber_id, 0, 0, 'L'); $pdf->Ln(5); // Zeilenumbruch $pdf->SetTextColor(0,0,0); $pdf->SetFont('Arial','B',6); $pdf->Cell(8, 7, 'Nr.', 0, 0, 'R'); $pdf->Cell(25, 7, 'Beginn', 0, 0); $pdf->Cell(25, 7, 'Tarifzeit', 0, 0); $pdf->Cell(45, 7, 'Rufnummer', 0, 0); $pdf->Cell(35, 7, 'Ziel', 0, 0); $pdf->Cell(21, 7, 'Tarifzone', 0, 0); $pdf->Cell(12, 7, 'Dauer', 0, 0, 'R'); $pdf->Cell(15, 7, 'Betrag', 0, 0, 'R'); $pdf->Ln(3); $i = 0; $l = 0; foreach($voice_detail->call as $call) { // Zähler für Verbindungen $i++; // Zähler für cellSeperation $l++; if($pdf->page > $stored_page && $i > 0) { $pdf->SetTextColor(0,0,0); $pdf->SetFont('Arial','B',6); $pdf->Cell(8, 7, 'Nr.', 0, 0, 'R'); $pdf->Cell(25, 7, 'Beginn', 0, 0); $pdf->Cell(25, 7, 'Tarifzeit', 0, 0); $pdf->Cell(45, 7, 'Rufnummer', 0, 0); $pdf->Cell(35, 7, 'Ziel', 0, 0); $pdf->Cell(21, 7, 'Tarifzone', 0, 0); $pdf->Cell(12, 7, 'Dauer', 0, 0, 'R'); $pdf->Cell(15, 7, 'Betrag', 0, 0, 'R'); $pdf->Ln(3); } // schreibe Einzelverbindungsnachweis $pdf->SetTextColor(0,0,0); $pdf->SetFont('Arial','',6); $pdf->Cell(8, 7, $i, 0, 0, 'R'); $pdf->Cell(25, 7, $call->start_dt, 0, 0); $pdf->Cell(25, 7, $call->other_party, 0, 0); $pdf->Cell(45, 7, $call->tariff_time, 0, 0); $pdf->Cell(35, 7, utf8_decode($call->destination), 0, 0); $pdf->Cell(21, 7, $call->tariff_zone, 0, 0); $pdf->Cell(12, 7, AnzSek($call->duration), 0, 0, 'R'); $pdf->Cell(15, 7, number_format($call->amount, 4, ',', ' '), 0, 0, 'R'); // Wenn 5 EVN ausgegeben dann Trennung // und $l wieder auf 0 setzen if($l == 5) { $pdf->cellSeparation(); $l = 0; } // Wenn nicht dann normalen Zeilenumbruch else { $pdf->Ln(3); } // Speichern der aktuellen Seitenzahl $stored_page = $pdf->page; } foreach($voice_detail->summary as $summary) { $pdf->SetTextColor(0,0,0); $pdf->SetFont('Arial','B',7); $pdf->Cell(159, 7, 'Summe für Rufnummer '.$voice_detail->subscriber_id, 0, 0, 'L'); $pdf->Cell(12, 7, AnzSek($summary->sum_duration), 0, 0, 'R'); $pdf->Cell(15, 7, number_format($summary->sum_amount, 4, ',', ' '), 0, 0, 'R'); $pdf->Ln(10); // Zeilenumbruch } } } else { echo '<p>Die Datei names '.$filename.' konnte nicht geöffnet werden</p>'; } // PDF ausgeben, mit Dateiname und Option I (Datei an den Client senden) $pdf->Output('tut_015.pdf', 'I'); } ?>
php::bar PHP Wiki - Listenarchive