使用Qt打印PDF文件

时间:2017-02-07 06:58:50

标签: c++ qt pdf printing

我想从特定路径打开并打印PDF文件,我以前的代码工作完全打开并直接将打印命令发送到打印机。 现在我想要的是多个打印机,我必须选择一个,之后我想发送打印命令,我不想要使用QPrintDialog,我的打印机名称存储在TextBox中并检索该名称并打印它通过我在文本框中设置的打印机:

我之前提到的代码如下:

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

1 个答案:

答案 0 :(得分:0)

或者您可以在打印期间将打印机更改为默认打印机。

  1. 将默认打印机更改为打印机
  2. print pdf
  3. 恢复旧的默认打印机
  4. 如何在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

      如何设置默认打印机?

      通过排除,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"