我想从特定路径打开并打印PDF文件,我以前的代码完美打开并直接将打印命令发送到打印机。现在我想要的是多台打印机,我必须选择一个,然后我想发送打印命令,我不想使用 QPrintDialog,我的打印机名称存储在文本框中并检索该名称并通过我在文本框中设置的打印机打印它:
我以前的代码在下面提到:
#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;
}
或者,您可以在打印过程中将打印机更改为默认打印机。
- 将默认打印机更改为您的打印机
- 打印 PDF
- 恢复旧的默认打印机
如何在Windows中检索和设置默认打印机:http://support.microsoft.com/default.aspx?scid=kb;EN-US;246772
由于QT没有系统管理功能。对于QT,
-
将默认打印机更改为您的打印机
如何获取默认打印机名称?
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
-
打印您的 PDF
-
恢复旧的默认打印机
通过执行,
RUNDLL32 PRINTUI.DLL,PrintUIEntry /y /n "old default printer name"