Html mit Kopf und Fußzeile Drucken

Alles rund um die Programmierung mit Qt
Antworten
MBex
Beiträge: 17
Registriert: 24. November 2007 11:36

Html mit Kopf und Fußzeile Drucken

Beitrag 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
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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 ()
.........................
speack português italiano deutsch english castellà qt
MBex
Beiträge: 17
Registriert: 24. November 2007 11:36

Beitrag 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 :(
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag 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
.........................
speack português italiano deutsch english castellà qt
privet
Beiträge: 8
Registriert: 26. Oktober 2009 12:04

konnte auf diese Frage eine zufriedenstellende Lösung gefund

Beitrag von privet »

konnte auf diese Frage eine zufriedenstellende Lösung mit Qt gefunden werden?
Antworten