"""
此文件是用来生成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
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):
pass
def create_Code128_img(self, barcode,name='',manufacturer=''):
a = Code128Encoder(barcode, options={
'ttf_font': os.path.join(os.getcwd(), 'arial.ttf'),
'label_border': 0, 'height': 100, 'bottom_border': 14,'ttf_fontsize':20,
})
# bar_width 条码宽度尺寸
file_name = str(uuid.uuid4()) + '.png'
a.save(file_name, bar_width=3)
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)>= 8:
name = name[:8]+'..'
if len(manufacturer) >= 8:
manufacturer = manufacturer[:8] + '..'
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 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"))
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")