certflow.services.printer.escp_commands 源代码

# src/certflow/services/printer/escp_commands.py
"""LQ-635KII ESC/P-K 命令常量定义

基于 EPSON LQ-635KII 用户手册第101页
包含打印机实际支持的所有 ESC/P-K 命令
"""

from __future__ import annotations

from enum import IntEnum


[文档] class LQ635KIICommand: """LQ-635KII ESC/P-K 命令码常量 基于手册 P101 实际支持的命令 """ # ============================================================ # 基本控制 (P101) # ============================================================ ESC = b"\x1b" # Escape LF = b"\x0a" # 换行 FF = b"\x0c" # 换页 CR = b"\x0d" # 回车 BEL = b"\x07" # 蜂鸣器 BS = b"\x08" # 退格 CAN = b"\x18" # 消除行缓冲区 DEL = b"\x7f" # 删除字符 # 打印机控制 INIT = ESC + b"@" # 初始化打印机 HOME = ESC + b"<" # 打印头归位 # 联机/脱机 DC1 = b"\x11" # 联机 DC3 = b"\x13" # 脱机 # ============================================================ # 格式控制 (P101) # ============================================================ # 行间距 LINE_SPACING_1_8 = ESC + b"0" # 1/8 英寸 LINE_SPACING_1_6 = ESC + b"2" # 1/6 英寸 (默认) LINE_SPACING_N_180 = ESC + b"3" # n/180 英寸 (n=0-255) LINE_SPACING_N_60 = ESC + b"A" # n/60 英寸 (n=0-255) LINE_SPACING_N_360 = ESC + b"+" # n/360 英寸 (n=0-255) # 页长设定 PAGE_LENGTH_INCH = ESC + b"C" + b"\x00" # ESC C NUL n (英寸) PAGE_LENGTH_LINES = ESC + b"C" # ESC C n (行) PAGE_SKIP_PERF = ESC + b"N" # ESC N n (页缝空白) PAGE_SKIP_OFF = ESC + b"O" # ESC O (取消页缝空白) # 边界设定 LEFT_MARGIN = ESC + b"l" # ESC l n (左边界) RIGHT_MARGIN = ESC + b"Q" # ESC Q n (右边界) # 对齐 ALIGN_LEFT = ESC + b"a" + b"\x00" # 左对齐 ALIGN_CENTER = ESC + b"a" + b"\x01" # 居中 ALIGN_RIGHT = ESC + b"a" + b"\x02" # 右对齐 ALIGN_JUSTIFY = ESC + b"a" + b"\x03" # 两端对齐 # ============================================================ # 定位设定 (P101) # ============================================================ # 水平定位 HORIZONTAL_TAB = b"\x09" # HT 水平跳格 SET_HORIZONTAL_TABS = ESC + b"D" # ESC D n1 n2...0 ABSOLUTE_HORIZONTAL = ESC + b"$" # ESC $ nL nH (1/60英寸) RELATIVE_HORIZONTAL = ESC + b"\\" # ESC \ nL nH (1/180英寸) # 垂直定位 VERTICAL_TAB = b"\x0b" # VT 垂直跳格 SET_VERTICAL_TABS = ESC + b"B" # ESC B n1 n2...0 # 绝对/相对垂直位置 ABSOLUTE_VERTICAL = ESC + b"(" + b"V" # ESC ( V (1/180英寸) RELATIVE_VERTICAL = ESC + b"(" + b"v" # ESC ( v (1/180英寸) # 垂直移动 RELATIVE_VERTICAL_MOVE = ESC + b"J" # ESC J n (n/180英寸) REVERSE_VERTICAL_MOVE = ESC + b"T" # ESC T n (向上) # ============================================================ # 英文模式 (P101) # ============================================================ # 打印品质 DRAFT_QUALITY = ESC + b"x" + b"\x00" # 草体 LETTER_QUALITY = ESC + b"x" + b"\x01" # 文书体 # 字符间距 PITCH_10CPI = ESC + b"P" # 10 字符/英寸 PITCH_12CPI = ESC + b"M" # 12 字符/英寸 PITCH_15CPI = ESC + b"g" # 15 字符/英寸 PROPORTIONAL_ON = ESC + b"p" + b"\x01" # 比例模式开 PROPORTIONAL_OFF = ESC + b"p" + b"\x00" # 比例模式关 # 字符间距调整 CHARACTER_SPACE = ESC + b" " # ESC SP n (n/120英寸) # 放大缩小 CONDENSED_ON = b"\x0f" # SI - 压缩打印 CONDENSED_OFF = b"\x12" # DC2 - 解除压缩 DOUBLE_WIDTH_ON = ESC + b"W" + b"\x01" # 倍宽开 DOUBLE_WIDTH_OFF = ESC + b"W" + b"\x00" # 倍宽关 DOUBLE_HEIGHT_ON = ESC + b"w" + b"\x01" # 倍高开 DOUBLE_HEIGHT_OFF = ESC + b"w" + b"\x00" # 倍高关 # 字体选择 FONT_ROMAN = ESC + b"k" + b"\x00" # Roman FONT_SANS_SERIF = ESC + b"k" + b"\x01" # Sans Serif FONT_COURIER = ESC + b"k" + b"\x02" # Courier FONT_PRESTIGE = ESC + b"k" + b"\x03" # Prestige FONT_SCRIPT = ESC + b"k" + b"\x04" # Script # 特殊效果 SUPERSCRIPT = ESC + b"S" + b"\x00" # 上标 SUBSCRIPT = ESC + b"S" + b"\x01" # 下标 SUPERSUB_OFF = ESC + b"T" # 解除上/下标 UNDERLINE_ON = ESC + b"-" + b"\x01" # 下划线开 UNDERLINE_OFF = ESC + b"-" + b"\x00" # 下划线关 ITALIC_ON = ESC + b"4" # 斜体开 ITALIC_OFF = ESC + b"5" # 斜体关 BOLD_ON = ESC + b"E" # 粗体开 BOLD_OFF = ESC + b"F" # 粗体关 DOUBLE_STRIKE_ON = ESC + b"G" # 重叠打印开 DOUBLE_STRIKE_OFF = ESC + b"H" # 重叠打印关 # 打印模式组合 PRINT_MODE = ESC + b"!" # ESC ! n # ============================================================ # 图形打印 (P101) # ============================================================ # 8针图形模式 GRAPHICS_8PIN_SINGLE = ESC + b"K" # 60 DPI GRAPHICS_8PIN_DOUBLE = ESC + b"L" # 120 DPI GRAPHICS_8PIN_HS_DOUBLE = ESC + b"Y" # 120 DPI 高速 GRAPHICS_8PIN_QUAD = ESC + b"Z" # 240 DPI # 24针图形模式 GRAPHICS_24PIN_SINGLE = ESC + b"*" + b"\x20" # 60 DPI GRAPHICS_24PIN_DOUBLE = ESC + b"*" + b"\x21" # 120 DPI GRAPHICS_24PIN_CRT = ESC + b"*" + b"\x26" # 90 DPI GRAPHICS_24PIN_TRIPLE = ESC + b"*" + b"\x27" # 180 DPI GRAPHICS_24PIN_HEX = ESC + b"*" + b"\x28" # 360 DPI # 图形模式重指定 REDEFINE_GRAPHICS = ESC + b"?" # ESC ? s m # 图形压缩 GRAPHICS_COMPRESS = ESC + b"(G" # ESC (G - 图形数据压缩 GRAPHICS_DATA = ESC + b"(K" # ESC (K - 图形数据 # ============================================================ # 字符表 (第十三章) # ============================================================ # 字符表选择 (ESC t n) CHARACTER_TABLE_ITALIC = ESC + b"t" + b"\x00" # 斜体表 CHARACTER_TABLE_GRAPHICS = ESC + b"t" + b"\x01" # 图形表 CHARACTER_TABLE_DOWNLOAD = ESC + b"t" + b"\x02" # 下载字符表 # 用户自定义字符 (ESC &, ESC :, ESC %) DOWNLOAD_CHAR = ESC + b"&" # ESC & s n m a0 a1 a2 data COPY_ROM_TO_RAM = ESC + b":" + b"\x00\x00\x00" # ESC : 0 0 0 USE_DOWNLOAD = ESC + b"%" # ESC % n # ============================================================ # 放大缩小 (补充) # ============================================================ # 单行倍宽 SINGLE_LINE_WIDTH = b"\x0e" # SO - 单行倍宽开 SINGLE_LINE_WIDTH_OFF = b"\x14" # DC4 - 单行倍宽关 # ============================================================ # 垂直制表位通道 # ============================================================ SET_VERTICAL_TABS_CHANNEL = ESC + b"b" # ESC b c n1 n2...0 SELECT_VFU_CHANNEL = ESC + b"/" # ESC / c # ============================================================ # 格式控制 (补充) # ============================================================ TOP_MARGIN = ESC + b"(U" # ESC (U - 设置页顶位置 PAGE_FORMAT = ESC + b"(c" # ESC (c - 设置页格式 PAGE_LENGTH_EXT = ESC + b"(C" # ESC (C - 设置页长
# ============================================================ # FS 系列汉字命令 (ESC/P-K 特有) # ============================================================
[文档] class FSCommand: """LQ-635KII FS 系列汉字命令常量 ESC/P-K 特有的汉字模式控制命令 """ FS = b"\x1c" # FS 前缀 # 汉字倍宽倍高 SO = FS + b"\x0e" # FS SO - 汉字倍宽开 DC4 = FS + b"\x14" # FS DC4 - 汉字倍宽关 W = FS + b"\x57" # FS W - 汉字倍高倍宽 w = FS + b"\x77" # FS w - 汉字倍高倍宽(变体) DOT = FS + b"\x2e" # FS . - 汉字倍高倍宽 # 汉字行距 LINE_SPACING = FS + b"\x32" # FS 2 - 汉字行距 1/6 英寸 # 汉字字体 FONT = FS + b"\x72" # FS r - 汉字字体选择 FONT_ALT = FS + b"\x6b" # FS k - 汉字字体选择(变体) # 汉字位置移动 SHIFT_RIGHT = FS + b"\x4a" # FS J - 汉字右移 SHIFT_LEFT = FS + b"\x4b" # FS K - 汉字左移 VERTICAL_MOVE = FS + b"\x76" # FS v - 汉字垂直移动 # 汉字上下标 SUPERSCRIPT = FS + b"\x53" # FS S - 汉字上标 SUBSCRIPT_OFF = FS + b"\x54" # FS T - 汉字下标/取消 # 汉字高度/垂直调整 HEIGHT_ADJUST = FS + b"\x55" # FS U - 汉字高度调整 VERTICAL_ADJUST = FS + b"\x56" # FS V - 汉字垂直调整 # 汉字打印模式 PRINT_MODE = FS + b"\x78" # FS x - 汉字打印方式 MODE_COMBINE = FS + b"\x21" # FS ! - 汉字打印模式组合 # 汉字下载 DOWNLOAD = FS + b"\x26" # FS & - 汉字下载 CONTROL = FS + b"\x28\x49" # FS (I - 汉字控制
# ============================================================ # 枚举类型 # ============================================================
[文档] class Align(IntEnum): """对齐方式""" LEFT = 0 CENTER = 1 RIGHT = 2 JUSTIFY = 3
[文档] class PrintQuality(IntEnum): """打印品质""" DRAFT = 0 # 草体 (快速) LETTER = 1 # 文书体 (高质量)
[文档] class Font(IntEnum): """西文字体""" ROMAN = 0 SANS_SERIF = 1 COURIER = 2 PRESTIGE = 3 SCRIPT = 4
[文档] class PaperSize: """纸张尺寸 Attributes: width_mm: 纸张宽度 (毫米) height_mm: 纸张高度 (毫米) name: 纸张名称 """ def __init__(self, width_mm: float, height_mm: float, name: str = "") -> None: """初始化纸张尺寸 Args: width_mm: 纸张宽度 (毫米) height_mm: 纸张高度 (毫米) name: 纸张名称,为空时自动生成 """ self.width_mm = width_mm self.height_mm = height_mm self.name = name or f"{width_mm}x{height_mm}mm"
[文档] @classmethod def certificate(cls) -> PaperSize: """合格证纸张 (60x100mm) Returns: PaperSize: 60x100mm 合格证纸张尺寸 """ return cls(60.0, 100.0, "合格证")
[文档] @classmethod def a4(cls) -> PaperSize: """A4 纸张 (210x297mm) Returns: PaperSize: 210x297mm A4 纸张尺寸 """ return cls(210.0, 297.0, "A4")
[文档] @classmethod def a5(cls) -> PaperSize: """A5 纸张 (148x210mm) Returns: PaperSize: 148x210mm A5 纸张尺寸 """ return cls(148.0, 210.0, "A5")
[文档] @classmethod def letter(cls) -> PaperSize: """Letter 纸张 (216x279mm) Returns: PaperSize: 215.9x279.4mm Letter 纸张尺寸 """ return cls(215.9, 279.4, "Letter")
[文档] class PrinterDPI(IntEnum): """打印机分辨率""" DPI_60 = 60 DPI_90 = 90 DPI_120 = 120 DPI_180 = 180 DPI_240 = 240 DPI_360 = 360