2016-12-26 6 views
0

Я использую Qt4.8. Я хочу открыть pdf-файл и распечатать его автоматически через cmd.exe, не нажимая кнопку печати в PDF-ридере с помощью QProcess:cmd.exe, чтобы открыть pdf и распечатать его

у меня есть два разных кода, которые делают две разные задачи: Opne Pdf

QString scmd= "cmd.exe"; 
list.push_back("/C"); 
list.push_back("test.pdf"); 
Process.start(scmd, list); 
Sleep(2000); 

Печать PDF без открыть его

QString scmd2 = "C:/Program Files (x86)/Adobe/Reader 11.0/Reader/AcroRd32.exe.exe" 
list2.push_back("/t"); 
list2.push_back("test.pdf"); 
Process.start(scmd2, list2); 
Sleep(2000); 

Так что я хочу, чтобы объединить эту команду, я не знаю, как я могу сделай это? Пожалуйста, предложите мне что-то

+0

Есть ли причина использовать 'Sleep (2000)'? Что именно вы подразумеваете под * слиянием * команд? что было бы проблемой, если бы вы просто выполняли эти команды один за другим? – Mike

+0

Никакой причины для сна() его просто копировать ошибку папы забыл удалить. Слияние одновременно запускается, что означает открытый pdf-файл и печатает его. Когда я запускаю один за другим, это не будет выполнено (обе команды не удались). – User041188

+0

и я хочу использовать PDF-считыватель по умолчанию, а не жестко закодированную переменную scmd2. – User041188

ответ

1

Вы можете получить всю информацию из реестра HKEY_CLASSES_ROOT.

Ниже приведен пример того, как получить путь по умолчанию к программному обеспечению печати и как его запустить. Я протестировал его на Qt 5.7

#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

Спасибо ramzes2, thats действительно работал как ожидалось, к сожалению, он не откроет pdf. Вы можете что-то предложить? – User041188

+0

Вы также можете открыть команду open из раздела «shell \ open \ command». Я добавил образец к моему ответу. – ramzes2

+0

его ошибка при открытии файла. Сообщение об ошибке «Ошибка при открытии этого документа. File not found» – User041188

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