python打印测试程序

from PySide2.QtWidgets import (QApplication, QWidget, QTableWidget, QPushButton, QVBoxLayout, QTableWidgetItem)
from PySide2.QtGui import QPixmap, QPainter, QImage, QTextDocument
from PySide2.QtPrintSupport import QPrinter, QPrintDialog, QPrintPreviewDialog
from PySide2.QtCore import QRect, QPoint, QSize, Qt
# 有预览框<br>#
def on_htmlButton_clicked():
printer = QPrinter(QPrinter.HighResolution)
# /* 打印预览 */
preview = QPrintPreviewDialog(printer, widget)
preview.paintRequested.connect(printHtml)
# 显示 预览框
preview.exec_()
def printHtml(printer):
html = '''<html>
<head>文本打印测试</head>
<body><h1>文本打印测试</h1><b>bold</b>
<h1>55555</h1><b>bold</b><h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b> <h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b><h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b> <h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b><h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b> <h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b><h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b> <h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b><h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b> <h1>55555</h1><b>bold</b>
<h1>55555</h1><b>bold</b> <h1>55555</h1><b>bold</b>
</body>
</html>
'''
textDocument = QTextDocument()
textDocument.setHtml(html)
# textDocument.print(printer)
textDocument.print_(printer)
def on_picButton_clicked():
printer = QPrinter(QPrinter.HighResolution)
preview = QPrintPreviewDialog(printer, widget) # /* 打印预览 */
'''
* QPrintPreviewDialog类提供了一个打印预览对话框,里面功能比较全,
* paintRequested(QPrinter *printer)是系统提供的,
* 当preview.exec()执行时该信号被触发,
* plotPic(QPrinter *printer)是用户自定义的槽函数,图像的绘制就在这个函数里。
'''
preview.paintRequested.connect(plotPic)
preview.exec()
# /* 等待预览界面退出 */
def plotPic(printer):
painter = QPainter(printer);
image = QPixmap()
image = widget.grab(QRect(QPoint(0, 0), QSize(widget.size().width(), widget.size().height() ) ) )
# /* 绘制窗口至画布 */
# QRect
rect = painter.viewport();
# QSize
size = image.size();
size.scale(rect.size(), Qt.KeepAspectRatio)
# //此处保证图片显示完整
painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
painter.setWindow(image.rect());
painter.drawPixmap(0, 0, image);
# /* 数据显示至预览界面 */
import sys
app = QApplication(sys.argv)
tablewidget = QTableWidget()
## 设置列数
tablewidget.setColumnCount(4)
tablewidget.horizontalHeader().setDefaultSectionSize(150)
## QStringList在PyQt5
header = ['name', 'last modify time', 'type', 'size']
tablewidget.setHorizontalHeaderLabels(header)
tablewidget.insertRow(0)
tablewidget.insertRow(0)
pItem1 = QTableWidgetItem('aa')
pItem2 = QTableWidgetItem('bb')
pItem3 = QTableWidgetItem('cc')
pItem4 = QTableWidgetItem('dd')
pItem5 = QTableWidgetItem('8.34')
pItem6 = QTableWidgetItem('9.26')
pItem7 = QTableWidgetItem('11.99')
# pItem8 = QTableWidgetItem('dd')
tablewidget.setItem(0, 0, pItem1)
tablewidget.setItem(0, 1, pItem2)
tablewidget.setItem(0, 2, pItem3)
tablewidget.setItem(0, 3, pItem4)
tablewidget.setItem(1, 0, pItem5)
tablewidget.setItem(1, 1, pItem6)
tablewidget.setItem(1, 3, pItem7)
tablewidget.setMinimumSize(800, 600)
button = QPushButton('打印界面')
button.clicked.connect(on_picButton_clicked)
button_txt = QPushButton('打印文字')
button_txt.clicked.connect(on_htmlButton_clicked)
widget = QWidget()
layout = QVBoxLayout(widget)
layout.addWidget(button)
layout.addWidget(button_txt)
layout.addWidget(tablewidget)
widget.show()
sys.exit(app.exec_())
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @Time:2023/02/20 10:06
# @Author:李宏
# @File:fms.py
# @Sofeware :PyCharm
from PySide2.QtCore import Qt
from PySide2.QtGui import QImage, QIcon, QPixmap
from PySide2.QtWidgets import QApplication, QMainWindow, QLabel, QSizePolicy, QAction
from PySide2.QtPrintSupport import QPrinter, QPrintDialog
import sys
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setWindowTitle(self.tr("打印图片"))
# 创建一个放置图像的QLabel对象imageLabel,并将该QLabel对象设置为中心窗体。
self.imageLabel = QLabel()
self.imageLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
self.setCentralWidget(self.imageLabel)
self.image = QImage()
# 创建菜单,工具条等部件
self.createActions()
self.createMenus()
self.createToolBars()
# 在imageLabel对象中放置图像
if self.image.load("./扬帆起航共创未来2021.jpg"):
self.imageLabel.setPixmap(QPixmap.fromImage(self.image))
self.resize(self.image.width(), self.image.height())
def createActions(self):
self.PrintAction = QAction(QIcon("./print.bmp"), self.tr("打印"), self)
self.PrintAction.setShortcut("Ctrl+P")
self.PrintAction.setStatusTip(self.tr("打印"))
self.PrintAction.triggered.connect(self.slotPrint)
def createMenus(self):
PrintMenu = self.menuBar().addMenu(self.tr("打印"))
PrintMenu.addAction(self.PrintAction)
def createToolBars(self):
fileToolBar = self.addToolBar("Print")
fileToolBar.addAction(self.PrintAction)
def slotPrint(self):
printer = QPrinter() # 新建一个QPrinter对象
printDialog = QPrintDialog(printer, self) # 创建一个QPrintDialog对象,参数为QPrinter对象
'''
判断打印对话框显示后用户是否单击“打印”按钮,若单击“打印”按钮,
则相关打印属性可以通过创建QPrintDialog对象时使用的QPrinter对象获得,
若用户单击“取消”按钮,则不执行后续的打印操作。
'''
if printDialog.exec_():
# 创建一个QPainter对象,并指定绘图设备为一个QPrinter对象。
painter = QPainter(printer)
rect = painter.viewport() # 获得QPainter对象的视口矩形
size = self.image.size() # 获得图像的大小
size.scale(rect.size(), Qt.KeepAspectRatio) # 按照图形的比例大小重新设置视口矩形
painter.setViewport(rect.x(), rect.y(), size.width(), size.height())
# 设置QPainter窗口大小为图像的大小
painter.setWindow(self.image.rect()) # 打印
painter.drawImage(0, 0, self.image)
If __name__ == "__main__":
app = QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
posted @   冀未然  阅读(73)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示