PHP - PDF erzeugen: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
 
Zeile 3: Zeile 3:
 
Update 2022 - inzwischen gibt es auch einige andere Möglichkeiten und neue Libs (todo)
 
Update 2022 - inzwischen gibt es auch einige andere Möglichkeiten und neue Libs (todo)
  
=== Siehe auch ==
+
== Siehe auch ==
 
  [[PDF-Dokumente aus Webseiten erstellen]]
 
  [[PDF-Dokumente aus Webseiten erstellen]]
  

Aktuelle Version vom 17. August 2022, 20:01 Uhr

Es gibt verschiedene Libs um PDF Dokumente dynamisch zu erzeugen. Bekannt sind z.B. fpdf oder mpdf

Update 2022 - inzwischen gibt es auch einige andere Möglichkeiten und neue Libs (todo)

Siehe auch[Bearbeiten]

PDF-Dokumente aus Webseiten erstellen

fpdf[Bearbeiten]

Mit fpdf kann man auf sehr viele Eigenschaften des pdfs auf sehr niedriger Ebene zugreifen. Es lassen sich z.B. Milimeter genaue Angaben machen. Eingesetzt z.B. beim Peter und Paul PUP Manager zum erzeugen der Mitgliedskarten.

Zu fpdf gibt es die fpdfi Library, diese erlaubt es Templates zur Erstellung zu nutzen. In der TYPO3 fpdf Extension ist fpdfi enthalten

www.fpdf.org

fpdi.setasign.de

mpdf[Bearbeiten]

mpdf eignet sich für das schnelle erzeugen von pdfs aus html Dokumenten. Es unterstützt auch CSS.


Links[Bearbeiten]

http://www.fpdf.de (nicht die original Seite aber dafür auf deutsch)

http://fpdf.fruit-lab.de/ -> Font Dateien für fpdf erzeugen

http://www.id.uzh.ch/cl/zinfo/fpdf/doc/

Beispiele[Bearbeiten]

E-Mail Anhang mit mpdf[Bearbeiten]

PHP - E-Mail versenden

Beispielcode für fpdf TYPO3 Extension[Bearbeiten]

Code Ausschnitt: In der localconf.php kann man Fonts hinzufügen (wenn man will) diese muß man dann mit SetFont im Plugin einbinden

# Add fonts to the fpdf library
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['fpdf']['fonts']['helvetica.z'] = array('Helvetica', '', t3lib_extMgm::extPath('pupmanager').'fonts/', 'helvetica.php');
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['fpdf']['fonts']['helveticab.z'] = array('Helvetica', 'B', t3lib_extMgm::extPath('pupmanager').'fonts/', 'helveticab.php');

Pdfs werden etwa so erzeugt (Testunit von 2007 in fpdf Extension)

<?php


require_once(t3lib_extMgm::extPath('fpdf').'class.tx_fpdf.php');

/**
 * FPDF and FPDI testcases
 * WARNING!!: Never ever run a unit test like this on a live site!!
 * @author	David Bruehlmeier <typo3@bruehlmeier.com>
 */
class tx_fpdf_testcase extends tx_t3unit_testcase {

	/*********************************************************
	 *
	 * READING TESTS
	 *
	 *********************************************************/

	public function test_createBasicPDF() {
		$orientation = 'portrait';
		$unit = 'mm';
		$format = 'A4';
		$font = 'courier';
		$fontSize = 12;
		$filePath = t3lib_extMgm::extPath('fpdf').'tests/results/test_createBasicPDF_'.time().'.pdf';
		
		$pdf = new PDF($orientation, $unit, $format);
		$pdf->SetMargins(10, 10, 10);
		$pdf->AddPage();
		$pdf->SetFont($font,'',$fontSize);
		$pdf->Cell(100,40,'test_createBasicPDF','B', 1);
		$pdf->Write(20, 'This is a A4-portrait doc with 10mm margins in courier (12pt).');
		$pdf->AddPage();
		$pdf->Write(20, 'Second page.');
		$pdf->Output($filePath);
		
		self::assertTrue(is_file($filePath));
	}
	
	public function test_createPDFwithTemplate() {
		$orientation = 'portrait';
		$unit = 'mm';
		$format = 'A4';
		$font = 'times';
		$fontSize = 12;
		$filePath = t3lib_extMgm::extPath('fpdf').'tests/results/test_createPDFwithTemplate_'.time().'.pdf';
		$templatePath = t3lib_extMgm::extPath('fpdf').'tests/TYPO3.pdf';
		
		$pdf = new PDF($orientation, $unit, $format);
		$pdf->tx_fpdf->template = $templatePath;
		$pdf->SetMargins(10, 10, 10);
		$pdf->AddPage();
		$pdf->SetFont($font,'',$fontSize);
		$pdf->Cell(100,40,'test_createPDFwithTemplate','B', 1);
		$pdf->Write(15, 'This PDF is with the Times font and based on a template with the TYPO3 logo.');
		$pdf->AddPage();
		$pdf->Write(20, 'Second page.');
		$pdf->Output($filePath);
		
		self::assertTrue(is_file($filePath));
	}

}

?>

PDF Datei übergeben (korrekte Header)[Bearbeiten]

Quelle: http://christian-asche.com/blog/2006/03/13/pdf-dateien-mit-php-ausgeben/ Zugriff 7/2013

Eigentlich eine einfache Übung, wäre da nicht wieder der Internet Explorer. Ein einfacher Versuch schlägt bei https (SSL) fehlt:

$pdfFilename = '';

header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="'.$pdfFilename.'"');

readfile($pdfFilename);

Der IE meldet, daß er die Datei nicht speichern kann. Abhilfe schafft nur folgender header:

// Download Bug IE bei SSL
header('Pragma: anytextexeptno-cache', true);

Komplettes Beispiel:

$pdfFilename = '';

header('HTTP/1.1 200 OK');
header('Status: 200 OK');

// Download Bug IE bei SSL
header('Pragma: anytextexeptno-cache', true);

header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="'.$pdfFilename.'"');

readfile($pdfFilename);