PDF generieren und Anzeigen ohne zu speichern

Alles rund um die Programmierung mit Qt
Antworten
gerd87
Beiträge: 41
Registriert: 18. Februar 2007 17:37

PDF generieren und Anzeigen ohne zu speichern

Beitrag 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?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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?
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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..
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: PDF generieren und Anzeigen ohne zu speichern

Beitrag 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;
          }

.........................
speack português italiano deutsch english castellà qt
Antworten