phpbar.de logo

Mailinglisten-Archive

[php] FPDF, Überschrift und foreach

[php] FPDF, Überschrift und foreach

marko.hoffmann at yes-globushaus.de marko.hoffmann at yes-globushaus.de
Die Dez 5 10:39:51 CET 2006


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