1 from PyQt5.QtGui import QFont,QTextDocument,QTextCursor 2 from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QSizePolicy, QAction,QDialog 3 from PyQt5.QtPrintSupport import QPrinter, QPrintDialog,QPrintPreviewDialog 4 import sys 5 6 ################################################ 7 #######打印文本---海子的詩 8 ################################################ 9 the_text = ''' 10 從明天起,做一個幸福的人 11 喂馬、劈柴,周游世界 12 從明天起,關心糧食和蔬菜 13 我有一所房子,面朝大海,春暖花開 14 從明天起,和每一個親人通信 15 告訴他們我的幸福 16 那幸福的閃電告訴我的 17 我將告訴每一個人 18 給每一條河每一座山取一個溫暖的名字 19 陌生人,我也為你祝福 20 願你有一個燦爛的前程 21 願你有情人終成眷屬 22 願你在塵世獲得幸福 23 我只願面朝大海,春暖花開 24 ''' 25 26 class MainWindow(QMainWindow): 27 def __init__(self, parent=None): 28 super(MainWindow, self).__init__(parent) 29 self.setWindowTitle(self.tr("打印功能")) 30 31 # 創建文本框 32 self.label = QLabel() 33 self.label.setFont(QFont("宋體",12,QFont.Bold)) 34 self.label.setText(the_text) 35 self.setCentralWidget(self.label) 36 37 # 創建菜單欄 38 self.createMenus() 39 40 def createMenus(self): 41 # 創建動作一 42 self.printAction1 = QAction(self.tr("打印無預留"), self) 43 self.printAction1.triggered.connect(self.on_printAction1_triggered) 44 45 # 創建動作二 46 self.printAction2 = QAction(self.tr("打印有預留"), self) 47 self.printAction2.triggered.connect(self.on_printAction2_triggered) 48 49 # 創建動作三 50 self.printAction3 = QAction(self.tr("直接打印"), self) 51 self.printAction3.triggered.connect(self.on_printAction3_triggered) 52 53 # 創建動作四 54 self.printAction4 = QAction(self.tr("打印到PDF"), self) 55 self.printAction4.triggered.connect(self.on_printAction4_triggered) 56 57 58 # 創建菜單,添加動作 59 self.printMenu = self.menuBar().addMenu(self.tr("打印")) 60 self.printMenu.addAction(self.printAction1) 61 self.printMenu.addAction(self.printAction2) 62 self.printMenu.addAction(self.printAction3) 63 self.printMenu.addAction(self.printAction4) 64 65 66 67 # 動作一:打印,無預覽 68 def on_printAction1_triggered(self): 69 printer = QPrinter() 70 printDialog = QPrintDialog(printer, self) 71 if printDialog.exec_() == QDialog.Accepted: 72 self.handlePaintRequest(printer) 73 74 75 # 動作二:打印,有預覽 76 def on_printAction2_triggered(self): 77 dialog = QPrintPreviewDialog() 78 dialog.paintRequested.connect(self.handlePaintRequest) 79 dialog.exec_() 80 81 # 動作三:直接打印 82 def on_printAction3_triggered(self): 83 printer = QPrinter() 84 self.handlePaintRequest(printer) 85 86 # 動作四:打印到pdf 87 def on_printAction4_triggered(self): 88 printer = QPrinter() 89 printer.setOutputFormat(QPrinter.PdfFormat) 90 printer.setOutputFileName("D:/pdf打印測試.pdf") 91 self.handlePaintRequest(printer) 92 93 94 ## 打印函數 95 def handlePaintRequest(self, printer): 96 document = QTextDocument() 97 cursor = QTextCursor(document) 98 cursor.insertText(self.label.text()) 99 document.print(printer) 100 101 102 if __name__ == "__main__": 103 app = QApplication(sys.argv) 104 main = MainWindow() 105 main.show() 106 sys.exit(app.exec_())

