Qt为打印提供了广泛的跨平台支持。使用每个平台上的打印系统,Qt应用程序可以打印到连接的打印机,也可以跨网络打印到远程打印机。Qt的打印系统还支持PDF文件生成。
Qt提供了一些类来支持打印机的选择和设置以及打印输出
- QPageSetupDialog,页面配置对话框,用于配置打印机上与页面相关的选项。
- QPrintDialog, 用于指定打印机配置的对话框。
- QPrintEngine,定义一个接口,用于QPrinter如何与给定的打印子系统交互。
- QPrintPreviewDialog, 打印预览对话框,用于预览和配置打印机输出页面布局。
- QPrintPreviewWidget, 打印预览部件,用于预览输出到打印机的页面布局。
- QPrinter, 在打印机上绘图的绘图设备。
- QPrinterInfo, 访问有关现有打印机的信息。
在Qt中,打印机由QPrinter来代表,QPrinter是一种绘图设备,可以提供特定的打印功能支持,例如支持多页和双面输出。
QPrinter
QPrinter类是在打印机上绘图的绘图设备。该设备代表一系列的打印输出页面,其使用方式和其他绘图设备(如QWidget和QPixmap)几乎完全相同。在Windows或macOS上直接打印到打印机时,QPrinter使用内置的打印机驱动程序。在X11上,QPrinter使用通用Unix打印系统(CUPS)将PDF输出发送到打印机。
注意,在无效打印机上设置纸张尺寸和分辨率等参数是未定义的。
QPrinter常用方法:
- setPageLayout(): 设置页面布局;
- setPageMargins(): 按当前单位来设置页边距,成功设置返回True;
- setPageOrder(): 设置页面顺序;
- setPageOrientation(): 设置页面方面,打印机驱动程序读取此设置,并以指定的方向打印页面;
- setPageSize(): 设置页面大小;
- setPapersource(): 设置纸张来源;
- setPrintRange(): 设置打印范围;
- setResolution(): 设置打印分辨率。
QPrinter类继承关系:
QPageSetupDialog
QPageSetupDialog类为打印机上与页面相关的选项提供了一个配置对话框。在Windows和macOS上,页面设置对话框是使用本机页面设置对话框实现的。
QPageSetupDialog类继承关系:
QPrintDialog
QPrintDialog类提供了一个用于指定打印机配置的对话框。该对话框允许用户更改与文档相关的设置,例如纸张尺寸和方向,打印类型(彩色或灰度),页面范围以及要打印的份数。它提供控件以使用户能够从可用的打印机中进行选择,包括任何已配置的网络打印机。 在Windows和macOS上,使用本机打印对话框。
QPrintDialog常用方法:
- open(): 打开对话框并将其accepted()信号连接到receiver和member指定的插槽。关闭对话框后,信号将从插槽中断开;
- printer(): 返回操作此打印机对话框的打印机;
- setOption(): 启用或者清除指定的设置;
- testOption(): 测试是否启动了给定的选项设置,如果启用了,返回True,否则返回False。
QPrintDialog常用信号:
- accepted: 当用户接受在打印对话框中设置的值时,将发出此信号。该打印机参数包括设置被应用到打印机。
QPrintDialog类继承关系:
测试代码
测试代码演示了使用QTextEdit加载一个文本文件,然后进行页面设置,选择打印机后,使用QTextEdit.print() 函数完成打印。完整代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import (QApplication, QMainWindow, QMenuBar, QMenuBar, QAction,QTextEdit, QDialog, QFileDialog, QMessageBox)
from PyQt5.QtPrintSupport import QPageSetupDialog,QPrintDialog, QPrinterclass DemoPrint(QMainWindow):def __init__(self, parent=None):super(DemoPrint, self).__init__(parent) # 设置窗口标题self.setWindowTitle('实战PyQt5: 打印输出演示') # 设置窗口大小self.resize(600, 400)self.printer = QPrinter()self.initUi()def initUi(self):#菜单条menuBar = self.menuBar()menuFile = menuBar.addMenu('文件')#文件aOpen = QAction('打开...', self)aOpen.triggered.connect(self.onFileOpen)aPageSetup = QAction('页面设置', self)aPageSetup.triggered.connect(self.onFilePageSetup)aPrint = QAction('打印', self)aPrint.triggered.connect(self.onFilePrint)aExit = QAction('退出', self)aExit.triggered.connect(self.close)menuFile.addAction(aOpen)menuFile.addAction(aPageSetup)menuFile.addAction(aPrint)menuFile.addSeparator()menuFile.addAction(aExit)#窗口self.textEditor = QTextEdit()#设置为中心窗口self.setCentralWidget(self.textEditor)def msgCritical(self, strInfo):dlg = QMessageBox(self)dlg.setIcon(QMessageBox.Critical)dlg.setText(strInfo)dlg.show()def onFileOpen(self):path,_ = QFileDialog.getOpenFileName(self, '打开文件', '', '文本文件 (*.txt)')if path:try:with open(path, 'r') as f:text = f.read()except Exception as e:self.msgCritical(str(e))else:self.path = pathself.textEditor.setPlainText(text)def onFilePageSetup(self):dlgPageSetup = QPageSetupDialog(self.printer, self)dlgPageSetup.exec()def onFilePrint(self):dlgPrint = QPrintDialog(self.printer, self)if QDialog.Accepted == dlgPrint.exec():self.textEditor.print(self.printer)if __name__ == '__main__':app = QApplication(sys.argv)window = DemoPrint()window.show()sys.exit(app.exec())
运行结果如下图:
测试打印输出
本文知识点
- Qt打印支持系统;
- QPrinter是向打印机绘图的绘图设备;
- QPageSetupDialong设置打印页面边距;
- QPrintDialog选择打印机;
- QTextEdit.print() 函数实现具体的打印。
前一篇: 实战PyQt5: 079-如何彻底删除布局中一个部件