我發現了以下代碼片段,它的工作原理與我的期望相同,但問題在於,當打開PDF文件並且用戶從PDF閱讀器打印PDF文件與其他打印機並不關閉時PDF閱讀器並從我的應用程序再次打印PDF文件,它將使用PDF閱讀器上配置的打印機進行打印,而不是將打印機設置爲打印PDF文件。從Qt打印PDF文件
例子:
- 應用我設置Printer_1以打印PDF文件。
- 打印文件(它將打開PDF閱讀器中的文件並使用Printer_1打印機進行打印)。
- 在PDF閱讀器上,我點擊
CTRL + P
進行打印,然後選擇Printer_2並單擊打印。 - 我沒有關閉PDF閱讀器,並在應用程序(打印機被選爲Printer_1)上再次打印PDF文件。現在將打印命令發送給Printer_2而不是Printer_1。
請問下面的代碼片段有什麼問題?
#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;
}