从QT打印PDF文件
Printing a PDF file from Qt
我发现了以下代码段,它可以作为我的期望,但是问题是,当PDF文件打开并用户用PDF Reader和其他一些打印机打印PDF文件时不要关闭PDF阅读器,然后再次从我的应用程序中打印PDF文件,它将使用打印机打印,该打印机是在PDF读取器上配置的,而不是我设置的打印机以打印PDF文件。
示例:
- 在应用程序上,我将打印机_1设置为打印pdf文件。
- 打印文件(它将在PDF阅读器中打开文件,并使用打印机打印机打印(。
- 在PDF读取器上,我去
CTRL + P
打印,然后选择打印机_2并单击"打印"。 - 我不会关闭PDF阅读器,然后在应用程序上再次关闭(选择打印机_1(,我打印PDF文件。现在,打印命令已发送到打印机_2而不是打印机_1。
请在以下代码段中有什么问题?
#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;
}
而不是line
QString printPath = QSettings(classesRoot + "\" + pdfId + "\shell\print\command", QSettings::NativeFormat).value("Default").toString();
使用此功能,所有这些都按预期工作:
QString printPath = QSettings(classesRoot + "\" + pdfId + "\shell\printto\command", QSettings::NativeFormat).value("Default").toString();
并通过"文件名","打印机名称","打印机驱动程序"answers"端口" [驱动程序名称和端口不是强制性的]
对不起,我说这似乎是预期的行为:如果应用程序已经打开并且设计不打开同一文件的单独实例(就像许多观众一样,就像您的一样(,因此,也很可能还保留了当前设置(在您的情况下(,因为基本上没有任何改变。如果您重现步骤但通过自己的手动打开PDF文件替换程序,我很有信心您会看到相同的结果。
选项是避免打开外部查看器并直接加载PDF文件(当前使用第三方库,例如Poppler(,并使用QT的模块打印它。您可以检查此答案以获取有关它的更多信息。
相关文章:
- 使用 C++文件 I/O 输出 pdf 文件
- 从QT打印PDF文件
- 从PDF文件仅复制必要的对象
- 使用.txt和.pdf文件
- 使用 Qt 打印 PDF 文件
- 我们可以使用mfc应用程序创建pdf文件吗
- 我可以使用什么开源C 库在专有的封闭源应用程序中显示PDF文件
- 如何在生成文件中将.png列表转换为 pdf 列表
- 使用Win32/MFC将HTML文件转换为PDF
- 如何将字节保存到pdf文件(如何将每个pdf页面更改为字节)
- 通过iTextSharp创建的pdf文件大小巨大
- 如何使用 c++ 中的文件读取和写入文档、pdf 文件
- 如何从 PDF 文件中查找页眉页脚
- 无法使用UDP通过二进制文件发送pdf
- 使用visual c++在表单中显示PDF文件
- 有没有一个C++库可以从PDF文件中提取文本,比如PDFBox for Java
- 是否可以在pdf文件中重新初始化图形状态
- 使用MFC打印PDF文件
- 通过OleCreateFromFile在C#中调用OLE对pdf文件无效
- 如何处理PDF文件中的9位字符串