2017-02-07 41 views
0

特定のパスからPDFファイルを開いて印刷したいのですが、以前のコードは完全に開いていて、プリンタに直接印刷コマンドを送信します。 今私が望むのは複数のプリンタがあり、1つを選択する必要があり、その後に印刷コマンドを送信したい、QPrintDialogを使いたくない、プリンタ名がTextBoxに保存され、その名前を取得して印刷する以下の私の前のコード言及Qtを使用してPDFファイルを印刷

::私はテキストボックスに設定されているプリンタによる

#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; 
} 
+0

** Ghostscript **を使ってpdfファイルを印刷することができます:http://stackoverflow.com/questions/2599925/how-to-print-pdf-on-default-network-printer-using-ghostscript-gswin32c-exe-she – Yoonian

答えて

0

それとも、印刷時のデフォルトプリンタとして使用するプリンタを変更することができます。お使いのプリンタに

  1. 変更デフォルトのプリンタ
  2. 印刷PDF
  3. 復元古いデフォルトのプリンタ

取得し、Windowsのデフォルトのプリンタを設定する方法:QTを持っているので http://support.microsoft.com/default.aspx?scid=kb;EN-US;246772

をシステム管理のための機能はありません。 QTのために、

  1. の変更デフォルトのプリンタお使いのプリンタに

    デフォルトのプリンタ名を取得する方法?

    QPrinterInfo::defaultPrinterName()

    から:デフォルトのプリンタを設定する方法http://doc.qt.io/qt-5/qprinterinfo.html#defaultPrinterName

    ? excutingことで

    RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "your printer name"

    から:http://windowsitpro.com/windows/jsi-tip-8415-how-can-i-set-users-default-printer-batch-script

  2. 、あなたが

  3. を実行することで、古いデフォルトのプリンタ

    を復元知っているように、あなたのPDFを印刷RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "old default printer name"

+0

QTでどうすればいいですか? – User041188

+0

もちろん、ウィンドウを使用しているので実装することができます。 – Yoonian

+0

ちょうどQTでそれを行う方法が追加されました – Yoonian

関連する問題