2017-02-07 120 views
0

我想從特定路徑打開並打印PDF文件,我以前的代碼完全打開並直接將打印命令發送到打印機。 現在我想要的是多個打印機在那裏,我必須選擇一個,然後我想發送打印命令,我不想要使用QPrintDialog,我的打印機名稱存儲在一個文本框中,並檢索該名稱並打印它通過該打印機,我在文本框設置:使用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中設置默認打印機: http://support.microsoft.com/default.aspx?scid=kb;EN-US;246772

由於QT有沒有系統管理的功能。對於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. 打印的PDF,你知道

  3. 恢復舊的默認打印機

    通過執行,RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "old default printer name"

+0

我如何在QT中做到這一點? – User041188

+0

當然,你可以實現它,因爲你正在使用Windows。 – Yoonian

+0

剛剛添加了如何在QT中做到這一點 – Yoonian