2017-02-07 10 views
0

Я хочу открыть и распечатать PDF-файл с определенного пути. Мой предыдущий код отлично работает и напрямую отправляет команду печати на принтер. Теперь у меня есть несколько принтеров, и я должен выбрать один, и после этого я хочу отправить команду print, я не хочу, чтобы я хотел использовать QPrintDialog, имя моего принтера хранится в текстовом поле и извлекает это имя и печатает его через тот принтер, который я поставил в текстовое поле:Печать файла в формате PDF с использованием Qt

мой предыдущий код упоминается ниже:

#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

Конечно, вы можете реализовать его, так как вы используете окна. – Yoonian

+0

Просто добавил, как это сделать в QT – Yoonian

 Смежные вопросы

  • Нет связанных вопросов^_^