Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Tutorial: Mit PHP-Code die Ausgabe eines PHP-Scripts in eine pdf-Datei exportieren

Diskussion: Tutorial: Mit PHP-Code die Ausgabe eines PHP-Scripts in eine pdf-Datei exportieren im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Mit PHP-Code die Ausgabe eines PHP-Scripts in eine pdf-Datei exportieren Es gibt vielerlei Möglichkeiten, die Ausgabe eines PHP-Scripts in ...

Antwort
Alt 25.01.09, 18:23   #1 (permalink)
 
Registriert seit: 26.12.08
Athelstan Leistung: Facit NTK
Athelstan eine Nachricht über ICQ schicken
Likes: 0
Standard Tutorial: Mit PHP-Code die Ausgabe eines PHP-Scripts in eine pdf-Datei exportieren

Anzeige

Mit PHP-Code die Ausgabe eines PHP-Scripts in eine pdf-Datei exportieren

Es gibt vielerlei Möglichkeiten, die Ausgabe eines PHP-Scripts in eine ".pdf"-Datei zu exportieren, aber leider ist das oft mit Java oder Javascript verbunden, oder eine entsprechende Bibliothek muss erst in PHP eingebunden werden, außerdem lässt es sich meistens nicht im PHP-Code selbst machen. Die meisten Lösungen sind arbeitsaufwändig oder kompliziert. Daher möchte ich eine Alternative dazu anbieten.

Um das ganze durchführen zu können, braucht ihr die Programme "wget" und "htmldoc". wget ist auf Linux standardmäßig dabei, htmldoc allerdings nicht, ladet es euch also zuerst einmal herunter. Es bietet sich an, das aus den jeweiligen Repositories zu machen. Wenn ihr es installiert habt, kann es auch schon losgehen. Zunächst müsst ihr in eurem PHP-Script mit "wget" die Ausgabe des gewollten PHP-Scripts in eine ".html"-Datei umleiten. Der Code dazu sieht so aus:

Code:
system('wget "phpscript.php?parameter=1" -O htmldatei.html');
Mit "system();" wird ein Systembefehl ausgeführt, als hättet ihr ihn in der Konsole eingegeben. Die Option -O sagt wget, wie die html-Datei heißen soll, hier in "htmldatei.html". Achtet darauf, dass ihr bei der Angabe des Scriptes (In diesem Fall "phpscript.php") Anführungszeichen setzen müsst. Das ist notwendig, weil bei den Parametern die Zeichen "?" und "&" stehen. Wenn diese nicht von Anführungszeichen "entschärft" werden, interpretiert das System diese Zeichen anders (Sonderzeichen haben meistens eine besondere Beudeutung in der Konsole). Nun, da die html-Datei mit der Ausgabe des PHP-Scripts erstellt ist, müsst ihr mit htmldoc daraus ein PDF erzeugen. Der PHP-Code dazu ist folgendermaßen:

Code:
system('htmldoc --webpage -f pdfdatei.pdf htmldatei.html');
Nun ist die Datei "htmldatei.html" und damit die Ausgabe des PHP-Scripts in der Datei "pdfdatei.pdf" abgespeichert. Um unnötig viele Dateien zu vermeiden, löscht ihr am besten direkt noch die html-Datei:

Code:
system('rm htmldatei.html');
Jetzt habt ihr die Ausgabe eures PHP-Scripts als PDF abgespeichert, allerdings ohne Farben, was vielleicht ein kleiner Nachteil ist.

Der Sinn des ganzen: Auf vielen Seiten gibt es einen Button namens "als PDF exportieren". So etwas könnt ihr hiermit realisieren. Ihr erstellt einfach mit HTML einen Button, der, wenn man auf ihn klickt, die aktuelle URL noch einmal aufruft, allerdings mit einem neuen, zusätzlichen Parameter, zum Beispiel "action=pdf". Ihr programmiert dann einfach ein if-Konstrukt in euer Script, das mit dem oben stehenden Code ausgestattet ist. Das könnte so aussehen:

Code:
$parameter = GET['parameter'];    // Die Parameter der aktuellen URL alle abspeichern, damit sie weiter als Parameter übergeben werden können
echo '<form action="phpscript.php?parameter='.$parameter.'&action=print"><input type="submit" value="Als PDF exportieren"></form>';    // Button für das Exportieren, ruft bei Anklicken das Script noch einmal auf, allerdings mit dem zusätzlichen "action=print"
if ( $_GET['action']=='print' ) {    // Wenn die Seite mit "action=print" aufgerufen wurde, wird in eine PDF-Datei exportiert
  system('wget "phpscript.php?parameter='.$parameter.'" -O '.$parameter.'.html');
  system('htmldoc --webpage -f '.$parameter.'.pdf '.$parameter.'.html');
  system('rm '.$parameter.'.html');
  echo 'Erfolgreich exportiert<br><br>';
}
Hier wird ein Button angegeben, der die Seite erneut aufruft und dann die Exportierung aktiviert. Dann wird eine Erfolgsmeldung ausgegeben. Die PDF-Datei wird nach den Parametern der aktuellen Seite benannt, damit hat man dann dynamische Dateinamen. Mit ein wenig mehr Code könnt ihr diese Datei auch direkt zum Download anbieten, zum Beispiel mit:

Code:
echo '<meta http-equiv="refresh" content="0;URL='.$parameter.'.pdf">';
@Team: Wäre schön, wenn das in dieser Form auch bei den Tutorials stehen könnte.

mfg,

Athelstan
Athelstan ist offline   Mit Zitat antworten
Alt 25.01.09, 20:07   #2 (permalink)
 
Registriert seit: 03.05.06
CentralWay Leistung: Facit NTK
Likes: 0
Standard

Schönes Tutorial.

Angemerkt sollte vielleicht noch werden, dass die system() Funktion unter Umständen nicht verfügbar ist oder nur sehr eingeschränkt verwendet werden kann.

Für diese Fälle kann ich, das ganze wird dann natürlich etwas aufwändiger, die html2pdf Bibliothek empfehlen.

[0] http://html2fpdf.sourceforge.net/
CentralWay ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 26.01.09, 00:48   #3 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

schöne Idee...
aber ist das nicht ziemlich inperformant, wenn das Script für jede PDF-Erstellung erst ordentlich auf der Platte rum werkeln muss???

außerdem: wenn ich sowas produktiv nutzen wollen würde, hätte ich (wenn ich keinen Root-Server hätte) keine Möglichkeit, das htmldoc beim Webspace-Anbieter einfach so zu installieren...
da wäre die Wahrscheinlichkeit sicherlich gering, dass man einem Kunden so ein Programm installiert und die Rechte einräumt. system() oder ähnliche Funktionen zu benutzen...
Jedenfalls auf meinem Server hab ich aus Sicherheitsgründen system(), shell_exec() und co. deaktiviert...

Dazu kommt, dass das ganze ziemlich plattformabhängig ist...
Wenn man an Projekten arbeitet, die unter Linux und Windows arbeiten können sollen, ist es sicherlich nicht gerade von Vorteil, so viel mit system() zu arbeiten...

Daher mein persönliches Fazit: schöne Idee, aber für die Praxis in meinen Augen für die meisten User nicht unbedingt sooo umsetzbar.
beavisbee ist offline   Mit Zitat antworten
Alt 26.01.09, 01:03   #4 (permalink)
 
Registriert seit: 30.05.07
Woosh Leistung: Facit NTK
Likes: 0
Standard

Denen, die dein Tutorial nicht direkt einsetzen können, kann ich fpdf oder (wie CentralWay ja schon sagte) html2pdf empfehlen. Allerdings ist fpdf nicht da um HTML in PDF umzuwandeln sondern um generell PDF-Dokumente in PHP zu erstellen.
Woosh ist offline   Mit Zitat antworten
Alt 26.01.09, 01:05   #5 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

jepp. ich fände fpdf / html2fpdf auch ne wesentlich sauberere Lösung als 10 system("bla")-Aufrufe...
beavisbee ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Tutorial: Mit PHP-Code die Ausgabe eines PHP-Scripts in eine pdf-Datei exportieren
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
WYSIWYG - Tutorial/Code oder vergleichbares Prototipping (Web-) Design und webbasierte Sprachen 2 25.02.07 19:41
PHP: Funktion zur Ausgabe der letzten Änderung einer Datei $oul Code Kitchen 2 30.11.05 01:43
Ausgabe an den Anfang der Datei setzen Valentin Code Kitchen 8 05.01.05 17:53
Bluescreen Ausgabe in Datei? Indi Windows 5 11.06.04 20:12
Bitte um BETA-Test eines PHP Scripts boppy (Web-) Design und webbasierte Sprachen 11 14.11.01 23:20


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61