Seite 1 von 1

Html mit Kopf und Fußzeile Drucken

Verfasst: 9. Dezember 2008 09:57
von MBex
Hallo,

ich arbeite zurzeit daran Html zu drucken.
Das alleine wäre nun dank QWebView::print ( QPrinter * printer ) nicht das Problem. Jedoch ist es zwingend notwendig, dass ich auf jeder Seite eine Kopfzeile mit Logo, Seitenzahl etc. habe. Zudem muss sich auf der ersten Seite eine zusätzliche Kopfzeile befinden und auf der letzen Seite eine Fußzeile.
Zurzeit löse ich dies dadurch, dass ich ein QPrinter Object erstelle und mittles QPainter darauf zeichne. Ich Zeichne nun also die 2 Kopfzeilen auf der ersten Seite. Anschließend berechne ich die restlichen Seiten mittels QWebFrame::contentSize() und drucke diese mit QWebFrame::render ( QPainter * painter, const QRegion & clip ) auf meinen QPainter.

Dabei habe ich jedoch das Problem, dass Texte oder andere Objecte wie Tabellen gegebenenfalls horizontal getrennt werden können.

Nun ist meine Frage, ob und wie es da ggf. eine Lösung für gibt. Die "normale" Druckfunkton QWebView::print ( QPrinter * printer ) teilt die Seiten ja auch korrekt ein.

Hoffe ich habe mich möglichs verständlich ausgedrückt.

mfg. Marco

Verfasst: 9. Dezember 2008 13:33
von patrik08
Eigendlich ist es schon richtig zu rendern..
du must nur die seite aufteilen und den platz reservieren fuer header footer
die du als QTextDocument machst

QTextDocument - root frame qrect sagt dir wie gross der platz ist...

also paint QPrinter
header->QTextDocument->draw()
render zentralseite
footer->QTextDocument->draw()
jede seite ende
bool QPrinter::newPage ()

Verfasst: 9. Dezember 2008 14:06
von MBex
hi erstmal danke für deine Antwort.

Jedoch liegt mein Problem nicht darin die Seite so einzuteilen, das ich weiß wieviel Platz für den eigentlichen Inhalt übrig bleibt.

In einer Funktion berechne ich wieviele Seite ich brauche und teile sie mir ein, sodass ich eine Liste von QRects habe. Jetzt gehe ich diese Liste in einer Schleife durch und lasse per QWebFrame::render(&p, QRegion(drawRect));
den Inhalt der sich im QWebFrame an der Position die drawRect wiederspiegelt zeichnen. Jedoch kann drawRect ja auch einfach so eingeteilt sein, dass eine Zeile wie beschrieben horizontal getrennt wird.
Ich müsste also wissen ob an der Stelle wo ich den Seitenumbruch machen will ein Text, eine Tabellen etc. vorhanden ist und dann das QRect soweit in der höhe verkleinern, dass diese Objecte nicht mittendrin getrennt wird.

Leider glaube ich, dass ich da mit meinem derzeitigen Anzatz auf keinen Grünen zwei kommen werden.

Die Kopf und Fußzeile drucke ich übrigens von hand, ohne den Einsatz von QTextDocument.

Über eine Idee, wie sowas umzusetzen ist würde ich mich sehr freuen :(

Verfasst: 9. Dezember 2008 16:38
von patrik08
MBex hat geschrieben:hi erstmal danke für deine Antwort.
Ich müsste also wissen ob an der Stelle wo ich den Seitenumbruch machen will ein Text, eine Tabellen etc. vorhanden ist und dann das
:(
Du musst die break page rausfinden genau wie es QTextDocument macht... am besten wie es Kword macht mit pageframe jede seite ein containder..und dann page by page rendern....

WebKit hat auch ein "Document" nur ist die doc nicht so weit..

Layout and Rendering
http://webkit.org/projects/layout/index.html

Suche in ..
http://trac.webkit.org/wiki/WebDevelopers#UsefulLinks

konnte auf diese Frage eine zufriedenstellende Lösung gefund

Verfasst: 3. Mai 2010 16:25
von privet
konnte auf diese Frage eine zufriedenstellende Lösung mit Qt gefunden werden?