PDF erstellen und Variablen ersetzen

Hammurabi

Mitglied
Hallo,

also ich bin neu hier und bin auch kein totaler „“ mehr allerdings dieses Projekt hier was ich von einem anderen Programmierer übernommen habe und jetzt verändern soll hat mich eis kalt erwischt.

Also es läuft wie folgt ich habe eine PDF mit variablen darin oder so und ich muß jetzt die pdf verändern/neu erstellen sodass der Inhalt anders wird allerdings nach meinen versuchen haben die neuen PDFs nicht mehr die variablen gefüllt obwohl der Code ja der gleiche ist

Code:
	$pdffile = "Vertrag.pdf";
	# <--Variablen	
	$replace = array ("ä" => "ae", "ü" => "ue", "ß" => "ss", "ö" => "oe", "€" => "Euro", "Ä" => "Ae", "Ü" => "Ue", "Ö" => "Oe");
	
			
	$pdf_vars = array(
		'name'		=> strtr(($_SESSION['frmFirstname'].' '.$_SESSION['frmName']), $replace),
		'adresse'	=> strtr($_SESSION['frmStreet'], $replace),
		'plz_ort'	=> strtr(($_SESSION['frmPostcode'].' '.$_SESSION['frmPlace']), $replace),
		'datum'		=> date('d.m.Y')																
	);

	function replace_pdf_var($match){
		if (isset($GLOBALS['pdf_vars'][$match[1]])) {
			return $GLOBALS['pdf_vars'][$match[1]];
		}
		else {
			return $match[1];
		}
	}	
	if (file_exists($pdffile)){
	# <-- Das Template binr ffnen
		if ($fp = fopen($pdffile, 'rb')) {
			$template = fread ($fp, filesize ($pdffile));
			fclose ($fp);
		# <-- auf das Template einen Regex anwenden.
			$pdf = preg_replace_callback('#\[\[\$([^\]]+)\]\]#',
			'replace_pdf_var', $template);
		# <-- das fertige PDF ausgeben
			$fp = fopen('pdf/'.$_SESSION["dokLink"], 'wb');
			fwrite($fp, $pdf);
			fclose($fp);
	   	}
	}

Also noch mal nicht das ich wieder auf Themen geführt werde wie ich das anders schreiben kann oder ohne die vordefinierte PDF komplett im PHP erstellen kann also der Code soll bleiben!

Ich möchte nur wissen wie ich die PDF erstelle damit dann der neue vertrag verwendet wird mit den variablen.
 
Verwende beim nächsten mal bitte die PHP-Tags [ PHP ] und [ /PHP ]
PHP:
$pdffile = "Vertrag.pdf";
# <--Variablen	
$replace = array ("ä" => "ae", "ü" => "ue", "ß" => "ss", "ö" => "oe", "Euro" => "Euro", "Ä" => "Ae", "Ü" => "Ue", "Ö" => "Oe");

		
$pdf_vars = array(
	'name'		=> strtr(($_SESSION['frmFirstname'].' '.$_SESSION['frmName']), $replace),
	'adresse'		=> strtr($_SESSION['frmStreet'], $replace),
	'plz_ort'		=> strtr(($_SESSION['frmPostcode'].' '.$_SESSION['frmPlace']), $replace),
	'datum'		=> date('d.m.Y')																
);

function replace_pdf_var($match){
	if (isset($GLOBALS['pdf_vars'][$match[1]])) {
		return $GLOBALS['pdf_vars'][$match[1]];
	}
	else {
		return $match[1];
	}
}	
if (file_exists($pdffile)){
# <-- Das Template binr ffnen
	if ($fp = fopen($pdffile, 'rb')) {
		$template = fread ($fp, filesize ($pdffile));
		fclose ($fp);
	# <-- auf das Template einen Regex anwenden.
		$pdf = preg_replace_callback('#\[\[\$([^\]]+)\]\]#', 'replace_pdf_var', $template);
	# <-- das fertige PDF ausgeben
		$fp = fopen('pdf/'.$_SESSION["dokLink"], 'wb');
		fwrite($fp, $pdf);
		fclose($fp);
	}
}
Hier dürfte wohl der Fehler sein:
PHP:
$pdf = preg_replace_callback('#\[\[\$([^\]]+)\]\]#', 'replace_pdf_var', $template);
Anstatt 'replace_pdf_var' sollte da doch wohl der Funktionsaufruf hin: replace_pdf_var().

Warum die Datei Binär eingelesen werden muss verstehe ich allerdings nicht. Wenn du PHP5 verwendest, solltest du evtl. fopen, fwrite und fclose ersetzen durch file_put_contents sowie anstatt fopen, fread, fclose file_get_contents verwenden. Schau am besten mal ins Manual, da wird es sehr schön beschrieben. Also ich würde es so machen (Keine Ahnung ob es so funktioniert)
PHP:
$pdffile = "Vertrag.pdf";
# <--Variablen	
$replace = array ("ä" => "ae", "ü" => "ue", "ß" => "ss", "ö" => "oe", "Euro" => "Euro", "Ä" => "Ae", "Ü" => "Ue", "Ö" => "Oe");

		
$pdf_vars = array(
	'name'		=> strtr(($_SESSION['frmFirstname'].' '.$_SESSION['frmName']), $replace),
	'adresse'		=> strtr($_SESSION['frmStreet'], $replace),
	'plz_ort'		=> strtr(($_SESSION['frmPostcode'].' '.$_SESSION['frmPlace']), $replace),
	'datum'		=> date('d.m.Y')																
);

function replace_pdf_var($match){
	if (isset($GLOBALS['pdf_vars'][$match[1]])) {
		return $GLOBALS['pdf_vars'][$match[1]];
	}
	else {
		return $match[1];
	}
}	
if (file_exists($pdffile)){
# <-- Das Template binr ffnen
	if (file_exists($pdffile))
	{
		$template = file_get_contents($pdffile);
	# <-- auf das Template einen Regex anwenden.
		$pdf = preg_replace_callback('#\[\[\$([^\]]+)\]\]#', replace_pdf_var(), $template);
	# <-- das fertige PDF ausgeben
		file_put_contents('pdf/'.$_SESSION["dokLink"],$pdf);
	}
}
Das war jetzt ca. 5 min. überlegen ;) Teste es mal bitte!
 
Okay das mit den PHP tags werde ich beim nächsten mal machen wie gesagt bin neu im Forum.

Ja und wegen deiner Überlegung ist evtl. kein schlechter Gedanke allerdings wenn ich jetzt die zeit hätte würde ich so einiges umschreiben habe aber noch andere stachen zu erledigen und wollte erstmal nix verändern weil ja alles funktioniert.

Mein Problem ist jetzt die PDF in der die variablen ersetzt werden sollen. Diese PDF soll vom Inhalt verändert werden und die variablen sollen danach noch funktionieren. Da ich PDFs nicht verändern kann muss ich sie neu erstellen und ich habe keine Ahnung wie ich die variablen wieder funktionierend dahinein bekomme.

EDIT: der Code sollte nur zeigen wie ich die PDF anspreche
 
Zurück