""" 此文件是用来生成Code128条形码 并实现打印功能 """ import os import uuid import unicodedata from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtPrintSupport import QPrinter from PyQt5.QtWidgets import QApplication from pystrich.code128 import Code128Encoder from conf import setting class CreateBarcode: """ Code128Encoder(options={}) options参数 * ttf_font:用于呈现标签的truetype字体文件的绝对路径 * ttf_fontsize:绘制标签的字体大小 * label_border:条形码和标签之间的像素空间数 * bottom_border:标签和底部边框之间的像素空间数 * height:图像的高度(以像素为单位) * show_label:是否在条形码下面显示标签(默认为True)“” """ code_path = os.path.join(os.getcwd(), "img") if not os.path.exists(code_path): os.umask(0) os.makedirs(code_path) def __init__(self): self.archive_name = "" def create_Code128_img(self, barcode, name='', manufacturer=''): show_barcode_only = False if self.archive_name == "耗材" or (self.archive_name == "普通试剂" and setting.BARCODE_COMMON_SHOW_ONLY): show_barcode_only = True a = Code128Encoder( barcode, options={ 'ttf_font': os.path.join(os.getcwd(), 'arial.ttf'), 'label_border': 0, 'height': 140, 'bottom_border': 14, 'ttf_fontsize': 46 if show_barcode_only else 20, }, ) # bar_width 条码宽度尺寸 file_name = str(uuid.uuid4()) + '.png' a.save(file_name, bar_width=3) if show_barcode_only: self.printer_only_code(file_name) else: self.printer_code(file_name, name, manufacturer) def printer_code(self, file_name, name, manufacturer): a = QApplication([]) document = QTextDocument() document.setDocumentMargin(0) fontId = QFontDatabase.addApplicationFont(os.path.join(os.getcwd(), 'simsun.ttf')) if len(name) >= 6: name = name[:6] + '..' if manufacturer and len(manufacturer) >= 6: manufacturer = manufacturer[:6] + '..' table_html = """
  

  试剂名称:{1}
  生产厂家:{2}
  开封时间:
  开封人: """.format( file_name, name, manufacturer ) html = """ Report {} """.format( table_html ) document.setHtml(html) printer = QPrinter() printer.setPageSize(QPagedPaintDevice.Custom) printer.setPaperSize(QSizeF(45.0, 30.0), QPrinter.Millimeter) # 设置纸张到条码的边距 左上下右 printer.setPageMargins(5, 3, 0, 0, QPrinter.Millimeter) document.setPageSize(QSizeF(400.0, 320.0)) print(document.pageSize(), printer.resolution(), printer.pageRect()) print('正在打印中。。。。') document.print_(printer) print('打印完成。。') os.remove(file_name) def create_drug_lobel_code(self, **kwargs): a = Code128Encoder( # kwargs.get("code_number"), "111", options={ 'ttf_font': os.path.join(os.getcwd(), 'arial.ttf'), 'label_border': 0, 'height': 15, 'bottom_border': 0, 'ttf_fontsize': 0, }, ) # bar_width 条码宽度尺寸 file_name = os.path.join(self.code_path, str(uuid.uuid4()) + '.png') print(file_name) a.save(file_name, bar_width=1) kwargs["file_path"] = file_name self.printer_drug_label(**kwargs) def zhsy_create_drug_label_code(self, **kwargs): """ 珠海食药打印配液标签 :param kwargs: :return: """ a = Code128Encoder( kwargs.get("code_number"), options={ 'ttf_font': os.path.join(os.getcwd(), 'arial.ttf'), 'label_border': 0, 'height': 15, 'bottom_border': 0, 'ttf_fontsize': 0, }, ) file_name = os.path.join(self.code_path, str(uuid.uuid4()) + '.png') a.save(file_name, bar_width=1) kwargs["file_path"] = file_name self.zhsy_printer_drug_label(**kwargs) def printer_drug_label(self, **kwargs): a = QApplication([]) document = QTextDocument() #

html = """ Report

华润三九制药
试剂名称: {}
级别: {}
批号: {}
编号: {}
货位号: {} {}

""".format( kwargs.get("name"), kwargs.get("purity"), kwargs.get("standard_code"), kwargs.get("remark12"), kwargs.get("client_name"), kwargs.get("flow_position_code"), kwargs.get("file_path"), ) document.setHtml(html) printer = QPrinter() printer.setPageSize(QPagedPaintDevice.Custom) # printer.setPaperSize(QSizeF(60.0,40.0),QPrinter.Millimeter) printer.setPaperSize(QSizeF(30.0, 18.0), QPrinter.Millimeter) # printer.setPaperSize(QSizeF(30.0,50.0),QPrinter.Millimeter) # 设置纸张到条码的边距 左上下右 printer.setPageMargins(6, 3, 0, 0, QPrinter.Millimeter) # printer.setPageMargins(20, 20, 0, 0, QPrinter.Millimeter) document.setPageSize(QSizeF(printer.pageRect().size())) # document.setPageSize(QSizeF(50.0,30.0)) print('正在打印中。。。。') document.print_(printer) print('打印完成。。') os.remove(kwargs.get("file_path")) def zhsy_printer_drug_label(self, **kwargs): print(kwargs.get("file_path"), 55555555) print('sss:', kwargs) a = QApplication([]) document = QTextDocument() html = """ Report

珠海市食品药品检验所
名称: {}
编号: {}
浓度: {}   溶剂:{}
配置日期: {}
有 效 期:{}
配 置 人:{}

""".format( kwargs.get("name")[:12], kwargs.get("code_number"), kwargs.get("purity")[:10], kwargs.get("solvent"), kwargs.get("start_time")[:10], kwargs.get("end_time")[:10], kwargs.get("user_name"), kwargs.get("file_path"), ) print(html) document.setHtml(html) printer = QPrinter() printer.setPageSize(QPagedPaintDevice.Custom) printer.setPaperSize(QSizeF(60.0, 40.0), QPrinter.Millimeter) # printer.setPaperSize(QSizeF(30.0,50.0),QPrinter.Millimeter) # 设置纸张到条码的边距 左上下右 printer.setPageMargins(6, 2, 0, 0, QPrinter.Millimeter) document.setPageSize(QSizeF(printer.pageRect().size())) print('正在打印中。。。。') document.print_(printer) print('打印完成。。') def printer_only_code(self, file_name): a = QApplication([]) document = QTextDocument() document.setDocumentMargin(0) fontId = QFontDatabase.addApplicationFont(os.path.join(os.getcwd(), 'simsun.ttf')) table_html = """
  

""".format( file_name ) html = """ Report {} """.format( table_html ) document.setHtml(html) printer = QPrinter() printer.setPageSize(QPagedPaintDevice.Custom) printer.setPaperSize(QSizeF(30.0, 18.0), QPrinter.Millimeter) # 设置纸张到条码的边距 左上下右 printer.setPageMargins(0, 5, 0, 0, QPrinter.Millimeter) document.setPageSize(QSizeF(400.0, 230.0)) print(document.pageSize(), printer.resolution(), printer.pageRect()) print('正在打印中。。。。') document.print_(printer) print('打印完成。。') os.remove(file_name) if __name__ == '__main__': kwS = { "code_number": "200001", "medicament_name": "1111111", "purity": "12", "solvent": "2313", "start_time": "2022-10-15", "end_time": "2022-10-16", "user_name": "测试账户", } # CreateBarcode().create_drug_lobel_code(**kwS) CreateBarcode().create_Code128_img('123456', '硫酸', '研一') # CreateBarcode().create_Code128_img("200000001")