Ich habe folgende Code-Schnipsel gefunden, die wie erwartet funktioniert, aber das Problem ist, dass, wenn eine PDF-Datei geöffnet ist und Benutzer die PDF-Datei mit einem anderen Drucker aus dem PDF-Reader drucken und nicht schließen Der PDF-Reader und erneut die PDF-Datei aus meiner Anwendung drucken, wird es mit Drucker, der auf PDF-Reader konfiguriert ist, nicht den Drucker drucken, den ich zum Drucken der PDF-Datei eingestellt habe.Drucken einer PDF-Datei aus Qt
Beispiel:
- Auf Antrag stelle ich Printer_1 als PDF-Datei zu drucken.
- Die Datei drucken (die Datei wird im PDF-Reader geöffnet und mit dem Drucker Printer_1 gedruckt).
- Auf PDF-Reader gehe ich zu
CTRL + P
zu drucken und dort wähle ich Printer_2 und klicken Sie auf Drucken. - Ich schließe nicht den PDF-Reader und erneut auf Anwendung (Drucker ist zu Printer_1 ausgewählt), drucke ich die PDF-Datei. Jetzt wird der Druckbefehl an Printer_2 anstelle von Printer_1 gesendet.
Bitte, was ist das Problem in den folgenden Code-Snippet?
#include <QSettings>
#include <QProcess>
#include <QDebug>
int main(int argc, char *argv[])
{
const QString classesRoot = "HKEY_CLASSES_ROOT";
// get ID of .pdf extension
QSettings pdfSettings(classesRoot + "\\.pdf", QSettings::NativeFormat);
QString pdfId = pdfSettings.value("Default").toString();
// get path to default program that associated with PDF files
QString printPath = QSettings(classesRoot + "\\" + pdfId + "\\shell\\print\\command", QSettings::NativeFormat).value("Default").toString();
QString openPath = QSettings(classesRoot + "\\" + pdfId + "\\shell\\open\\command", QSettings::NativeFormat).value("Default").toString();
qDebug() << "print path" << printPath;
qDebug() << "open path" << openPath;
// open .pdf file
QProcess::startDetached(openPath.arg("full path to pdf file.pdf"));
// print .pdf file
QProcess printProcess;
printProcess.start(printPath.arg("full path to pdf file.pdf"));
printProcess.waitForFinished(-1);
return 0;
}