Seite 1 von 1
QPrinter - newPage() - Problem
Verfasst: 31. Juli 2008 10:05
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
Verfasst: 31. Juli 2008 14:47
von tribari
hat niemand eine Idee? Das Problem wurmt mich leider sehr... irgendwie schein ich nicht drauf zu kommen

Verfasst: 31. Juli 2008 14:53
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.
Verfasst: 31. Juli 2008 14:57
von tribari
wtf Task-Tracker?

den kenn ich noch nicht ... sorry

Oder du meinst etwas was ich zwar kenne, aber nicht unter dem namen
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
Hoffentlich gibbet ne Lösung.
Verfasst: 31. Juli 2008 15:25
von upsala
Verfasst: 1. August 2008 08:53
von tribari
ne den kannte ich noch nicht - ist ja nice
trotzdem kann ich da nichts finden ... :-/
Verfasst: 1. August 2008 17:42
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:
svn
http://fop-miniscribus.googlecode.com/s ... izeScroll/
das ding editiert den text wie es im druck zu sehen ist...
Verfasst: 1. August 2008 18:12
von upsala
@Patrik08: QTextDocument verwendet intern auch newPage()...
Verfasst: 1. August 2008 18:57
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