html2fpdf pagebreak in HTML-Datei

Hallo in die Runde,

Ausgangssituation:

Ich lese eine HTML-Datei in mein html2fpdf-Template ein um daraus eine PDF-Datei zu erzeugen. Funktioniert fantastisch!

folgendes Problem habe ich nun:

Ich möchte nun einen Teil der html-Datei einlesen, danach einen Seitenumbruch machen, und danach den Rest der Datei dazu packen,  bevor ich daraus ein PDF-Dokument erzeuge. Das soll immer dann geschehen, wenn das Wort „SYSTEM BLATT“ in der HTML-Datei vorkommt.

Hier mein Code:

//DB-Verbindung und SQL




//FPDF-Klasse




define('FPDF\_FONTPATH','fpdf/font/');




require('fpdf/fpdf.php');




//Klasse erweitern um HTML2FPDF




class PDF extends HTML2FPDF




{




function Header()




{




GLOBAL $ergebnis;




//Dynamischer Text Briefkopf linksb�ndig




$this-\>SetFont('Times','',24);




$this-\>SetTextColor(0,0,0);




$this-\>SetY(5);




$this-\>MultiCell(0,5,"\n".$ergebnis['branche\_titel']." \n",0,'L',0); 




$this-\>Ln(6);




//Dynamischer Text Briefkopf 2. Zeile linksb�ndig




$this-\>SetFont('Times','',12);




$this-\>SetTextColor(0,0,0);




$this-\>SetY(20);




$this-\>MultiCell(0,5,$ergebnis['logo']." - ".$ergebnis['firmenadresse'],0,'L',0); 




$this-\>Ln(6);




//Dynamischer Text Briefkopf rechtsb�ndig




$this-\>SetTextColor(0,0,0);




$this-\>SetFont('Times', 'B',40);




$this-\>SetY(5);




$this-\>MultiCell(0,5,"\n".$ergebnis['logo']."\n",0,'R',0); 




$this-\>Ln(6);




$this-\>SetTextColor(0,0,0);




$this-\>SetFont('Times', '',12);




$this-\>SetY(15);




$this-\>MultiCell(0,5,"\n".$ergebnis['branche\_titel']."\n".$ergebnis['firmenzusatz'],0,'R',0); 




//linie




$istY = $this-\>GetY();




$this-\>SetLineWidth(0.5);




$this-\>Line(10, $istY, 200, $istY);




}




}




//Dokument beginnen




$pdf=new PDF();




$pdf-\>AddPage();




$path2file = "html\_neu.html";




$fp = fopen($path2file,"r");




$strContent = fread($fp, filesize($path2file));




fclose($fp);




$pdf-\>WriteHTML($strContent);




$pdf-\>Close();




$pdf-\>Output('OUTPUT.pdf', 'F');

Ich würde mich sehr freuen, wenn Ihr mir einen Denkansatz oder eine Lösung bieten würdet.

Besten Dank und viele Grüße
Mo

Hi,

Das soll
immer dann geschehen, wenn das Wort „SYSTEM BLATT“ in der
HTML-Datei vorkommt.

das sind zwei Wörter… und wie sind die denn im HTML eingebunden?
Wenn das z.B. eine Überschrift wäre, bietet sich an, auch für einen passenden Ausdruck der HTML-Seite diese mit einer Klasse zu versehen, z.b.:
SYSTEM BLATT
und diese dann über CSS entsprechend zu formatieren:
.ff { page-break-before:always}
Wenn die PDF-Erzeugung sinnvoll arbeitet, sollte sie das CSS auch umsetzen.

Gruß
Ingo

Hi,

vielen Dank für die schnelle Antwort.
Es ist tatsächlich eine Überschrift.

Wenn ich die Überschrift mit einer Klasse versehe, wie versteht es dann fpdf?
Weiss denn fpdf wie es mit dieser Klasse umzugehen hat?

Gruß
Mo

Hallo,

Du willst HTML zu PDF
Damit das PDF erkennt wo ein seitenumbruch
zwingend stattfinden soll , muss dies im HTML
extra angegeben werden .

Überschrift

HTML ist nur der Content abhängige Container ,
hier das h1 , aber diesem fehlt nun der Seitenumbruch.

Also schreiben wir z.b. in das CSS
h1 { … }

das gilt dann für alle h1

Das erkennt dann auch z.b. PDF-Drucker etc.

Es ist also nicht so , das das pdf intern ein browser hat um dann davon ein Bild zu machen hihi , nein es versucht wirklich das was in HTML angelegt ist selber in PDF darzustellen und wenn dort irgendwo ein page-break kommt, dann wird wohl das PDF das auch versuchen umzusetzen.

Hi!

Ok…das habe ich verstanden und auch so umgesetzt.
Jedoch wird bereits beim ersten Seitenumbruch die gesamte Formatierung der datei zerstört.

Mein Codestück sieht nun folgendermaßen aus:

$html = str\_replace('SYSTEM BLATT 1', trim('SYSTEM AUDATEX BLATT 1'), $html);

$output =


.ff1 {page-break-after: always;}

HEADER;

// Seiten-content hinzufuegen
$output .= " $ff1 ";
$output .= "

    $html

";
  • TAG verwendet.
    Mit dem - TAG ist die Formatierung noch mehr ins Schleudern gekommen.

Das PDF wird zwar erzeugt, jedoch völlig unformatiert und das trotz

  • TAG.

Ich vermute mal das an der PHP-Funktion „strg_replace()“.
Vielleicht sollte ich die PHP-Funktion „preg_replace()“ verwenden. Weiss nicht.
Ich kenne mich mit regulären Ausdrücken auch nicht sonderlich gut aus.

Was meinst Du? Könnte es an der Funktion „strg_replace()“ liegen?

LG
Mo

SPAN ist ein Fliesselement, das ist für Pagebreak nicht so geeignet.

Ein Einfaches Blockelement wie DIV , wäre da wohl besser.
ausserdem vielleicht noch mit @page arbeiten .

Hi,

ein ordentlicher Parser erwartet hier <style<b> type = „text/css“</b>>
vielleicht liegt’s daran.

Wie Du siehst habe ich den <span> - TAG verwendet.
Mit dem <h1> - TAG ist die Formatierung noch mehr ins
Schleudern gekommen.

wegen unpassendem oder fehlendem CSS?

Gruß
Ingo

leider liegt es auch nicht daran.
Ich hatte das schon geändert aber irgendwie versteht das der pdf-parser aus irgendeinem unerklärlichen Grund nicht.
Scheinbar liest er überhaupt kein CSS.

Weiss jemand warum?

Kann es sein das es an der vielleicht zu alten html2fpdf Version liegt?
Zurzeit verwende ich die Version 3.0(beta). Die ist ca. 2 Jahre alt.

Eigentlich soll diese Version ja CSS kennen und können. Das steht sogar im HowTo drin aber irgendwie haperts immer an der Umsetzung.

Noch jemand eine Idee?

für halbwegs anspruchsvollen pdf satz über html könntst du dir http://www.tcpdf.org/ anschauen. damit habe ich bessere erfahrungen gemacht, als mit html2fpdf

Vielen Dank für den Tip. Irgendwann werde ich mir das auch mal ansehen.

Eigentlich ist html2fpdf ne super sache. Bisher habe ich damit eine sehr gute Erfahrung gemacht und sehr viele Vorlagen programmiert und PDFs damit erzeugt.

Also grundsätzlich tut es fpdf. html2fpdf ist noch mal ein eigenes script. Damit haperts ein wenig aber das Problem wird sich auch noch auflösen. :wink: