您的位置:首页 > 编程语言 > Python开发

Python调用打印机参考例子

2015-09-07 23:16 363 查看
参考资料:
http://blog.csdn.net/jdh99/article/details/42585987 http://www.oschina.net/question/1438043_235020 http://blog.163.com/ctcg326%40126/blog/static/758129102012451034427/ http://codego.net/447659/
部分样例:

1.

from PyQt5.QtWidgets import (QApplication, QWidget, QTableWidget,QPushButton,
QVBoxLayout,
QTableWidgetItem)
from PyQt5.QtGui import  QPixmap, QPainter, QImage, QTextDocument
from PyQt5.QtPrintSupport import  QPrinter, QPrintDialog, QPrintPreviewDialog
from PyQt5.QtCore import QRect, QPoint, QSize ,  Qt

# 有预览框
# 908204694@qq.com
#

def on_htmlButton_clicked():
printer =QPrinter(QPrinter.HighResolution)
#/* 打印预览 */
preview =QPrintPreviewDialog(printer,widget )
preview.paintRequested.connect(printHtml)

#
#   显示 预览框
#
#preview.exec()
preview.exec_()

def printHtml(printer):

html = """<html>
<head></head>
<body>
<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" )
tablewidget.setItem( 0, 0, pItem1 )
tablewidget.setItem( 0, 1, pItem2 )
tablewidget.setItem( 0, 2, pItem3 )
tablewidget.setItem( 0, 3, pItem4 )

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_())


  

2.

#------------------------- printer.py ----------------------
# 908204694@qq.com

# 直接打印,不预览

# -*- coding: utf-8 -*-
from PyQt5.QtCore import *
from PyQt5.QtGui import *

from PyQt5.QtPrintSupport import QPrinterInfo, QPrinter

class Printer:

#打印机列表
@staticmethod
def printerList():
printer = []
printerInfo = QPrinterInfo()
print('availablePrinterNames', printerInfo.availablePrinterNames() )
print('defaultPrinterName', printerInfo.defaultPrinterName())

for item in printerInfo.availablePrinters():
printer.append(item.printerName())
return printer

#打印任务
@staticmethod
def printing(printer, context):

p = QPrinter()

doc = QTextDocument()

htmlStr = context
print('aaaa', htmlStr)
doc.setHtml(htmlStr)
doc.setPageSize(QSizeF(p.logicalDpiX()*(80/25.4),
p.logicalDpiY()*(297/25.4)))
p.setOutputFormat(QPrinter.NativeFormat)
doc.print_(p)

@staticmethod
def printing_22(printer, context):
printerInfo = QPrinterInfo()
p = QPrinter()
for item in printerInfo.availablePrinters():
if printer == item.printerName():
p = QPrinter(item)
doc = QTextDocument()
doc.setHtml(u'%s' % context)
doc.setPageSize(QSizeF(p.logicalDpiX()*(80/25.4),
p.logicalDpiY()*(297/25.4)))
p.setOutputFormat(QPrinter.NativeFormat)
doc.print_(p)

if __name__ == '__main__':
import sys
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
##########################################
html = '<html><head></head><body><h1>55555</h1><b>bold</b></body></html>'
p = "defaultPrinter" #打印机名称
#Printer.printing(p, html)
#Printer.printerList()
Printer.printing_22(p, html)

#####################################################
sys.exit(app.exec_())


  

3.

from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import QApplication
from PyQt5.QtPrintSupport import QPrinter

#
# 将要打印的东西生成pdf
#
# 908204694@qq.com

a=QApplication([])
document = QTextDocument()
html = """
<head>
<title>Report</title>
<style>
</style>
</head>
<body>
<table width="100%">
<tr>
<td><img src="{}" width="30"></td>
<td><h1>REPORT汉字试试哈</h1></td>
</tr>
</table>
<hr>
<p align=right><img src="{}" width="300"></p>
<p align=right>Sample</p>
</body>
""".format('./aa.png', './bb.png')

document.setHtml(html)
printer = QPrinter()
printer.setResolution(96)
printer.setPageSize(QPrinter.Letter)
printer.setOutputFormat(QPrinter.PdfFormat)
printer.setOutputFileName("test.pdf")

# 设置纸张的边距
printer.setPageMargins(12, 16, 12, 20, QPrinter.Millimeter)
document.setPageSize(QSizeF(printer.pageRect().size()))
print(document.pageSize(), printer.resolution(), printer.pageRect())
document.print_(printer)


  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: