PHP mit PHP eine Druckseite erstellen mit HTML Layout

Zhen

Lt. Junior Grade
Registriert
Aug. 2009
Beiträge
299
Hallo lieber CBler,
ich weiß nicht so recht wie ich den Titel besser umschreiben könnte.

Also hier mein Problem:
Ich habe eine MySQL Datenbank in der verschiedene Events gespeichert sind. Mit Titel, Beschreibung, Ort und paar weiteren Daten. Die Benutzer sollen sich aus den Events einige zusammenklicken können und diese dann auf eine DinA4 Seite ausdrucken.

Jetzt ist es so, dass in den Beschreibungen z.B. Teils HTML Tags vorkommen, die zwar im Frontend ja richtig formatiert dargestellt werden, aber dann auch in Papierform die Formatierung behalten sollen. Bisher haben wir eine Schnittstelle die uns ein PDF generiert, aber da werden die HTML Tags einfach als Text gedruckt. Außerdem sollen diese Events so im Stil einer Zeitung gedruckt werden (Spalten und Kästen) dessen Höhe sich z.B. an die Länge des Textes anpasst.

Ich stehe derzeit ehrlich gesagt komplett auf dem Schlauch wie ich das lösen soll... Ich erwarte hier kein fertigen Code oder die Lösung für mein Problem. Ich würde mir nur einige Denkanstöße wünschen und vielleicht kennt ja wer einige Libraries die ähnliches bereits bewerkstelligen.

Hoffe ihr könnte mir da bisschen helfen mit paar Ratschlägen und Tipps :)

Danke schon mal im Vorraus.
 
ok super. Vielen Dank dir, werd ich gleich mal ausprobieren :)
 
Also jetzt hab ich leider immernoch ein Problem...

Ich hab es jetzt sowohl mit "dompdf" als auch mit "html2pdf" probiert.

Folgendes Szenario: Ich habe eine Seite wo der benutzer bestimmte Ebenen modifizieren kann, verschieben, vergrößeren, verkleinern... Der Code dieser Seite wird dann über jQuery.ajax per POST an mein Script geschickt. Dort aus der POST-Variable ausgelesen und soll als PDF gespeichert werden...

Und genau da hab ich derzeit ein Problem. Es klappt weder mit der einen noch mit der anderen Library und ich versteh nicht wo der Fehler ist. Muss ich vielleicht etwas besonderes dabei beachten, wenn ich HTML Code per POST übersende? Ich hab es auch in ein HTML File geschrieben und versucht von dort auszulesen und in PDF zu konvertieren, aber auch das hat leider nicht geklappt... Ich bin mittlerweile echt am verzweifeln...
 
Ich habe ein Auto welches nicht fährt, ich habe auch schon dagegen getreten, woran kann das liegen?:D

Weder weiß hier irgendwer wie du die PDF Klassen eingebunden, noch wie du die Daten übermittelt hast. Auch weiß keiner wie die Daten überhaupt aussehen. Beste Vorraussetzungen, um zu fragen warum es nicht funktioniert. Wenn ich du wäre würde ich erstmal ein Stino HTML Dokument erstellen mit Head, Body usw, da zwei Zeilen Text reinklatschen und das mal durch die PDF Klasse jagen. Wenn das schon nicht klappt hast du irgendeinen Fehler bei der Übergabe oder musst evtl noch was beim PDF Gedöhns konfigurieren, aber das fällt wohl beides eher unter RTFM als alles andere ;).

Wenn das klappt kommen die PDF Klassen vielleicht mit deinem HTML oder dem Encoding nicht klar, da würde ich mal den Quelltext durch einen Validator jagen. Ansonsten Fehlermeldungen am Server auf 'alles anningeln' stellen bzw die error.log checken, vielleicht sagt die PDF Klasse ja was ihr nicht passt und du siehst es nur nicht.
 
Nein die Erstellung funktioniert, nur leider nicht mit dem übergebenen HTML Code... Die Übergabe erfolgt wie gesagt über POST.

Datei 1 (Javascript Funktion, wird über einen Button Klick aufgerufen [in einer js Datei ausgelagert und über script-tag eingebunden]):
Code:
function createPDF() {
    var pagehtml = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\r\n';
        pagehtml = pagehtml + '<html>\r\n' + $( 'html' ).html() + '</html>';

    $.ajax( {
        type: "POST",
        url: '/hisdb/mod/morgenpost/morgenpost.class.php?nav=' + $.urlParam( 'nav' ) + '&super=mp-createpdf',
        data: { html: pagehtml },
    } ).done( function() {
    } );
}

Datei 2 (Soll das PDF generieren und auf dem Server speichern):
PHP:
file_put_contents('test1.html', $this->postData['html'] );
					
$handle = fopen( "test1.html" );
$content = fread( $handle, filesize( "test1.html" ) );
					
require_once( 'dompdf/dompdf_config.inc.php' );

$dompdf = new DOMPDF();
$dompdf->load_html( $content );
$dompdf->set_paper( "a4", 'portrait' );
$dompdf->render();
					
file_put_contents('test.pdf', $dompdf->output());

Es raucht dann bei der Funktion "load_html( $content )" ab. Die Frage ist nur wieso. Die HTML Datei z.B. ist valides HTML... Es funktioniert aber auch nicht, wenn ich $this->postData['html'] direkt der load_html übergebe ohne es vorher in eine HTML Datei zu speichern...
Wenn ich aber irgendwie einen hardcoded html code in der Variable $content übergebe, dann funktioniert es.
z.B. :
PHP:
$content = '<html><head></head><body><div>....</div>....</body></html>';
Ergänzung ()

Ok Fehler gefunden und behoben...

Anfangs wars tatsächlich die Validierung und danach hat er wohl irgendwie Probleme gehabt, wenn ich den Content aus der HTML Datei ausgelesen habe und erst dann übergeben. Wenn ich es direkt aus der POST Variable übergebe dan funktionierts nun... :)
 

Ähnliche Themen

Antworten
14
Aufrufe
1.508
Tankred
T
Zurück
Oben