zoukankan      html  css  js  c++  java
  • Python调用打印机参考例子

     参考资料:

    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)
    

      

      

  • 相关阅读:
    JavaScript 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome)
    一个程序员的梦想
    无刷新分页控件(原创)(jQuery+json+ashx)(Ajax)
    Ajax无刷新分页(jQuery+Json)
    飞信 .net接口
    STL学习小记起因
    C++山寨CSharp事件
    在win8上花了一上午的闲暇做的贪吃蛇sample, 顺便移植到了WPF...
    STL学习小记顺序容器
    最近做的一个store app音乐箱
  • 原文地址:https://www.cnblogs.com/ribavnu/p/4790262.html
Copyright © 2011-2022 走看看