Seite 1 von 1
PDF generieren und Anzeigen ohne zu speichern
Verfasst: 11. Februar 2008 14:06
von gerd87
Hallo,
un eine PDF-Datei anzugeigen, gehe ich so vor:
Erst wird die Datei erstellt:
Code: Alles auswählen
QString fileName = "test.pdf";
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName(fileName);
QPainter painter(&printer);
.
.
.
Dann angezeigt:
Code: Alles auswählen
#if defined(Q_WS_WIN)
QProcess p;
QStringList s;
s << "url.dll,FileProtocolHandler" << "test.pdf";
p.startDetached(QString("rundll32.exe") , s );
#endif
gibt es die Möglichkeit, die PDF-Datei nach dem generieren anzuzeigen, ohne diese zu speichern?
Verfasst: 11. Februar 2008 15:37
von macman
Die Bilder in deinem Browser werden wahrscheinlich auch angezeigt, ohne irgendwo gespeichert zu sein. Oder anders gesagt, nein, das geht nicht. Wie sollte auch?
Verfasst: 12. Februar 2008 13:04
von solarix
Selbstverständlich sollte das (irgendwie) gehen.. man generiert die Daten im RAM und zeigt diese auch wieder via RAM an.. Eine Datei ist bei diesem Vorgang eher hinderlich.. die einzige Frage bleibt, ob man generieren und anzeigen irgendwie koppeln kann..
Bei der QPainter-API fehlt mir da die Erfahrung, allerdings koennt ich mir vorstellen, dass du anstelle von einem Painter (fuer die PDF-Generierung) zwei hast (das andere auf ein QPicture) und die genau gleichen Operationen auf beide ausfuehrst. Am Ende hast du eine PDF und ein (direkt anzeigbares) Bild. Damit koenntest du auch eine "Vorschau" generieren ohne wirklich die PDF-Datei zu erstellen..
Verfasst: 12. Februar 2008 13:16
von macman
solarix hat geschrieben:Selbstverständlich sollte das (irgendwie) gehen.. man generiert die Daten im RAM und zeigt diese auch wieder via RAM an..
Wie du an seinem Beispielcode aber sehen kannst, ruft er zum anzeigen eine andere Applikation auf. Wie soll das dann gehen? Aufruf des Acrobat Readers: "Hier hast du nen Pointer auf mein RAM, da liegt ein PDF für dich"?
Hinderlich ist so eine Datei auf jeden Fall nicht, zum debuggen braucht man sie sowieso.
Re: PDF generieren und Anzeigen ohne zu speichern
Verfasst: 18. Februar 2008 14:43
von patrik08
gerd87 hat geschrieben:Hallo,
gibt es die Möglichkeit, die PDF-Datei nach dem generieren anzuzeigen, ohne diese zu speichern?
Man kann sich das QTextDocument auch als bild QPixmap convertieren....
wie
http://www.qt-apps.org/content/show.php ... tent=62383 ... oder direkt die pdf zu QPixmap mit Ghostscript ....
http://fop-miniscribus.googlecode.com/s ... phandler.h
extern inline QPixmap LoadPDF(QString fn, int Page, int w )
jede seite einzeln ....
aus
http://code.google.com/p/fop-miniscribus/
Code: Alles auswählen
/*
doc = new QTextDocument();
doc->setHtml("<p><span style="color:#000000; font-weight:600">"+text+"</span></p>");
doc->setDefaultFont(font());
doc->setTextWidth(width());
doc->setUseDesignMetrics(true);
doc->setDefaultTextOption ( QTextOption (Qt::AlignHCenter ) );
*/
QRectF clip(0, 0, rect().width(), rect().height());
QPixmap PicsDocument(size());
PicsDocument.fill(Qt::transparent);
QPainter *p = new QPainter(&PicsDocument);
p->setRenderHint(QPainter::Antialiasing, true);
doc->drawContents(p,clip);
p->end();
return PicsDocument;
/* die QTextDocument hohe haben */
int E_Header::DocumentHighgtActual()
{
int HightLayerSumms = 0;
QAbstractTextDocumentLayout *Layout = doc->documentLayout();
QTextFrame *Tframe = doc->rootFrame();
QTextFrame::iterator it;
for (it = Tframe->begin(); !(it.atEnd()); ++it) {
QTextBlock para = it.currentBlock();
if (para.isValid()) {
HightLayerSumms += Layout->blockBoundingRect(para).height();
}
}
return HightLayerSumms + 5;
}