QPrinter - newPage() - Problem

Alles rund um die Programmierung mit Qt
Antworten
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

QPrinter - newPage() - Problem

Beitrag von tribari »

Hallo zusammen,

ich möchte nun eine Logdatei im PDF-Format schreiben. Jedoch funktioniert irgendwie der Befehl newPage() nicht wirklich :(

was mache ich falsch?

Hier im groben, wie es abläuft bei mir:

Code: Alles auswählen


QPrinter m_Printer;
QString m_protocolFilename = <<Pfad für Datei>>;
QTextEdit m_protocolText;

m_Printer.setPageSize(QPrinter::A4);
m_Printer.setFullPage(TRUE); 
m_Printer.setOutputFormat(QPrinter::PdfFormat); 
m_Printer.setOutputFileName(m_protocolFilename); 

Schleife für mehrmaliges wiederholen()
{

m_protocolText.setFontPointSize(12); 
m_protocolText.setTextColor(QColor(Qt::black));
m_protocolText.insertPlainText("Irgendnen Text");

<<Die Schriftgröße und Farbe veränder ich öfters... ausserdem wird hier jetzt viel Text in m_protocolText geschrieben>>

m_protocolText.print(&m_Printer);
m_Printer.newPage();

}

mit newPage() hatte ich gehoft jedesmal auf eine neue Seite zu kommen... aber irgendwie hat der Befehl keinerlei Auswirkung :(


Danke schonmal im Vorraus

lg

tribari
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Beitrag von tribari »

hat niemand eine Idee? Das Problem wurmt mich leider sehr... irgendwie schein ich nicht drauf zu kommen :wink:
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Schon mal im Task-Tracker nachgeschaut? Außerdem wäre das Betriebssystem und die Qt-Version interessant, da Qt schreibt, daß es dafür Betriebsystemspezifische Funktionen verwendet.
tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Beitrag von tribari »

wtf Task-Tracker? :oops: den kenn ich noch nicht ... sorry ;)
Oder du meinst etwas was ich zwar kenne, aber nicht unter dem namen :roll:

Ich verwende QT 4.3.4.

OS ist Windows XP Proffessional.

Der Druck in die pdf-Datei funktioniert ja auch tadellos - bloß ich will die Macht haben und selbst bestimmen können wann mein Programm eine neue Seite anzufangen hat :twisted:

Hoffentlich gibbet ne Lösung.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

tribari
Beiträge: 63
Registriert: 23. Juli 2008 13:31
Wohnort: Braunschweig

Beitrag von tribari »

ne den kannte ich noch nicht - ist ja nice ;-)

trotzdem kann ich da nichts finden ... :-/
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

newPage ... braucht man nicht wenn man QTextDocument
doc->setPageSize ( groesse der seite ); setzt...

und nicht mehr QTextDocument::adjustSize () aufruft !!

die Policy kann man trozdem brauchen ...
PageBreakFlags QTextBlockFormat::pageBreakPolicy () const


der lebende beweis und immer noch editierbar ist:

Bild

svn
http://fop-miniscribus.googlecode.com/s ... izeScroll/
das ding editiert den text wie es im druck zu sehen ist...
.........................
speack português italiano deutsch english castellà qt
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

@Patrik08: QTextDocument verwendet intern auch newPage()...
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Beitrag von patrik08 »

upsala hat geschrieben:@Patrik08: QTextDocument verwendet intern auch newPage()...
richtig .... newPage() macht nicht anders als einen PageBreackPolicyInsert der man nicht weiss wo er ist...
Ich will aber wissen wo diesen PageBreack ist, damit ich wieder im richtigen xsl-fo xml setzen kann. Da dort die PDF Bookmark abhangig sind um zum richtigen name zu springen ....

QTextDocument ->setPageSize ( QSizeF ); /* ohne drucker enum */

setzt... die richtige groesse der seiten .... und die somit verbundene seitenzahl

die man gut durch painten kann sei es drucker oder gui

Code: Alles auswählen

 Q_ASSERT(_d->pageSize().isValid());
   const int PageSumm = qBound (1,_d->pageCount(),MaximumPages);
   for (int i = 0; i < PageSumm; ++i)  {
		 DrawPage(i,painter);   /* auch als QPicture im 
               QCache  ist verdamt schnell */
	 }
damit is es egal welches OS oder drucker...

und die Page PageBreackPolicy werden richtig interpretiert von
QAbstractTextDocumentLayout ....

Code: Alles auswählen


 void TextProcessor::ParaBlockPageBreackPolicyInsert()
 {
	 if (Modus != PAGES) {
		 return;   /* only on pages draw modus not flat Layer text */
	 }
	 QTextCursor c = textCursor();
	 QTextBlock bb = c.block();
	 QTextBlockFormat bbformat = bb.blockFormat();
	 QStringList items;
	 items << tr("PageBreak Auto") << tr("PageBreak AlwaysBefore") << tr("PageBreak AlwaysAfter");
	 int index  = 0;
	 if (bbformat.pageBreakPolicy () == QTextFormat::PageBreak_AlwaysBefore ) {
		 index = 1;
	 } else if (bbformat.pageBreakPolicy () == QTextFormat::PageBreak_AlwaysAfter ) {
		 index = 2;
	 }
	 bool ok;
	 QString item = QInputDialog::getItem(0, tr("Get PageBreakFlags"), tr("Set Policy:"), items,index, false, &ok);
	 
	 if (ok && item.size() > 0) {
		 int choise = items.indexOf(item);
		 if (choise == 1) {
			 bbformat.setPageBreakPolicy(QTextFormat::PageBreak_AlwaysBefore);
		 } else if (choise == 2) {
			 bbformat.setPageBreakPolicy(QTextFormat::PageBreak_AlwaysAfter);
		 } else {
			 bbformat.setPageBreakPolicy(QTextFormat::PageBreak_Auto);
		 }
		 c.setBlockFormat(bbformat);
		 emit q_pageupdate();
	 }
	 /*
QTextFormat::PageBreak_Auto
QTextFormat::PageBreak_AlwaysBefore
QTextFormat::PageBreak_AlwaysAfter
	 */
 }


Darum handlet es ja iher um seiten zu umbrecken koennen wo und wie man will .. da gibt es keine bug .. und funktioniert richtig mit qt4.4 && qt4.5
.........................
speack português italiano deutsch english castellà qt
Antworten