私は期待通りのコードスニペットを見つけましたが、PDFファイルが開いていて、PDFリーダーからPDFファイルを他のプリンタで印刷すると問題が発生します。 PDFリーダーを使用してアプリケーションからPDFファイルを再度印刷すると、PDFファイルを印刷するために設定したプリンタではなく、PDFリーダーで設定されたプリンタで印刷されます。QtからPDFファイルを印刷
例:アプリケーションで
- 私は、PDFファイルを印刷するようPrinter_1を設定します。
- ファイルを印刷します(PDFリーダーでファイルを開き、Printer_1プリンタで印刷します)。
- PDFリーダーでは
CTRL + P
に行き、そこでPrinter_2を選択して印刷をクリックします。 - PDFリーダーを閉じずにもう一度アプリケーション(プリンタがPrinter_1に選択されています)でPDFファイルを印刷します。これで、printer_1の代わりにPrinter_2にprintコマンドが送信されます。
次のコードスニペットの問題点を教えてください。
#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;
}