Problem beim Ausdrucken von Pdf-Dateien mit QT

Jetzt möchte ich das in meinen System Befehl einbauen und habe es dazu nach const char* konvertiert. Allerdings meckert der compiler.

Code:
string pfad;
pfad = ui->pathEdit->text().toStdString();

const char *tmp = pfad.c_str();

const char *auftrag = "\"start \"\" /b" + tmp + "/p /h \"C:\\Users\\**\\Documents\\**.pdf\"\"";
    system(auftrag);

error: invalid operands of types `const char[13]' and `const char*' to binary `operator+'

Wo liegt mein Fehler und wie behebe ich das Problem?
Man kann C-Strings nicht "addieren". Baue den Befehl mit einem QString oder einem std::string zusammen und wandle ihn direkt im system() Aufruf in einen C-String um.

Das funktioniert nämlich auch nicht unbedingt:
C++:
const char *tmp = pfad.c_str();
Gruß
 
Guten Morgen,

klappt nun soweit alles mit ausdrucken. Bin nun auch dabei Pdf-Dateien aus dem Internet zu laden und diese zu speichern.

Der Http-Get mit den dazugehörigen Formvariablen funktioniert auch wunderbar.

Problem was ich jetzt jedoch habe, ist wie ich den Response der ja die Pdf-Datei auch als Pdf speicher.

Code:
pdf = new QNetworkAccessManager(this);
...
QUrl url("www.go4.de/pdftest.pdf");
    QNetworkRequest request(url);
pdfreply = pdf->get(request);

Danach warte ich halt bis die Abfrage "finished" ist. Nur wie verarbeite ich dann den reply? Hab versucht den reply per stream in eine Datei zu schreiben aber das klappt irgendwie nicht so ganz.

Hoffe mir kann jemand helfen.

mfg
Chris
 
Hi.

Was hast du denn versucht?

Es müßte ungefähr so gehen:
C++:
QFile out(QString("out.pdf"));

if (out.open(...)) {
  out.write(reply->readAll());
}
Gruß
 
Moin,

hatte es so versucht:

Code:
fstream file("testpdf2.pdf" ,ios::out);
    file.write(pdfreply->readAll(),pdfreply->size());
    file.close();
So bekomm ich auch eine Pdf-Datei zurück. Die ist aber im Pdf-Reader leer im Editor wird aber was angezeigt. Hat auch die richtige größe.

Was muss ich den bei deinem Vorschlag bei open() für Parameter nehmen?

Vielen Dank.

mfg
Chris
 
hatte es so versucht:

Code:
fstream file("testpdf2.pdf" ,ios::out);
    file.write(pdfreply->readAll(),pdfreply->size());
    file.close();
So bekomm ich auch eine Pdf-Datei zurück. Die ist aber im Pdf-Reader leer im Editor wird aber was angezeigt. Hat auch die richtige größe.
Du müßtest ios::binary verwenden.
Was muss ich den bei deinem Vorschlag bei open() für Parameter nehmen?
QIODevice::WriteOnly

Gruß
 
Schonmal Danke.

Aber mit ios::binary und auch mit deinem anderem Vorschlag wir garkeine Datei erstellt.

Fehlt dann noch irgendwas?

Code:
QFile out(QString("out.pdf"));

    if (out.open(1,QIODevice::WriteOnly))
    {
     out.write(pdfreply->readAll());
    }

Code:
fstream file("zumtesten.pdf" ,ios::binary);
    file.write(pdfreply->readAll(),pdfreply->size());
    file.close();

Beide natürlich getrennt getestet ;)

EDIT: Habe es selber schon herausgefunden...
Es muss so aussehen:
Code:
fstream file("zumtesten.pdf" ,ios::out | ios::binary);


mfg
Chris
 
Zuletzt bearbeitet:
Schonmal Danke.

Aber mit ios::binary und auch mit deinem anderem Vorschlag wir garkeine Datei erstellt.

Fehlt dann noch irgendwas?

Code:
QFile out(QString("out.pdf"));

    if (out.open(1,QIODevice::WriteOnly))
    {
     out.write(pdfreply->readAll());
    }
Warum schaust du denn nicht mal in die Doku? http://doc.trolltech.com/4.5/qfile.html#open
Code:
fstream file("zumtesten.pdf" ,ios::binary);
    file.write(pdfreply->readAll(),pdfreply->size());
    file.close();
ios::binary allein macht natürlich keinen Sinn. Und man sollte natürlich auch testen ob die Datei überhaupt geöffnet werden konnte => is_open()?

Gruß
 
Habs jetzt ja hinbekommen gehabt.

Habe jedoch jetzt das Problem das eine Schleife womit ich die einzelnen Zeilen eines replys zurückgeben will das Programm aufhängt.

Einer meiner Versuche:

Code:
while(!adminreply->atEnd());
    {
        line = adminreply->readLine();
        tmp = QString(line);
         ui->logWidget->insertItem(0,calcTime(tmp));
    }

Wenn ich das "!" weglasse bekomm ich nur eine Zeile zurück und so bleibt das Programm hängen.

atEnd() liefert ja true zurück wenn es am Ende angekommen ist.

Der Reply gibt mir übrigens eine Liste von Zahlen wieder die durch \n getrennt sind.

mfg
Chris
 
Zurück