initial attempt at esc/pos generation
This commit is contained in:
parent
b1f9ea514a
commit
5488773d39
1 changed files with 64 additions and 0 deletions
64
print_tape.py
Normal file
64
print_tape.py
Normal file
|
|
@ -0,0 +1,64 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Generate ESC/POS ticker tape output from trade CSV data.
|
||||||
|
|
||||||
|
Reads a CSV of trades (timestamp, symbol, lots, price) and generates
|
||||||
|
ESC/POS commands with 90° rotated text to emulate an old stock ticker tape.
|
||||||
|
|
||||||
|
When the receipt paper is turned sideways:
|
||||||
|
- Symbol appears at the top of the tape
|
||||||
|
- Price (and lot count) appears at the bottom
|
||||||
|
"""
|
||||||
|
|
||||||
|
import csv
|
||||||
|
import sys
|
||||||
|
|
||||||
|
from escpos.printer import Dummy
|
||||||
|
|
||||||
|
# TM-T88V: 42 columns at Font A on 80mm paper
|
||||||
|
LINE_WIDTH = 42
|
||||||
|
|
||||||
|
|
||||||
|
def format_trade(symbol, lots, price):
|
||||||
|
"""Format a trade line for the ticker tape.
|
||||||
|
|
||||||
|
Symbol is placed at the start of the line, price info at the end.
|
||||||
|
With 90° rotation, start-of-line = top of tape, end-of-line = bottom.
|
||||||
|
"""
|
||||||
|
if lots > 1:
|
||||||
|
price_str = f"{lots}s{price:.2f}"
|
||||||
|
else:
|
||||||
|
price_str = f"{price:.2f}"
|
||||||
|
|
||||||
|
padding = LINE_WIDTH - len(symbol) - len(price_str)
|
||||||
|
if padding < 1:
|
||||||
|
padding = 1
|
||||||
|
return symbol + " " * padding + price_str
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
csv_file = sys.argv[1] if len(sys.argv) > 1 else "trades_sample_sorted.csv"
|
||||||
|
output_file = sys.argv[2] if len(sys.argv) > 2 else "ticker_tape.bin"
|
||||||
|
|
||||||
|
p = Dummy(profile="TM-T88V")
|
||||||
|
p.hw("INIT")
|
||||||
|
# ESC V 1: 90° clockwise character rotation (not exposed by python-escpos)
|
||||||
|
p._raw(b"\x1b\x56\x01")
|
||||||
|
|
||||||
|
with open(csv_file) as f:
|
||||||
|
reader = csv.reader(f)
|
||||||
|
for row in reader:
|
||||||
|
_timestamp, symbol, lots_str, price_str = row
|
||||||
|
lots = int(lots_str)
|
||||||
|
price = float(price_str)
|
||||||
|
line = format_trade(symbol, lots, price)
|
||||||
|
p.text(line + "\n")
|
||||||
|
|
||||||
|
p.cut()
|
||||||
|
|
||||||
|
with open(output_file, "wb") as f:
|
||||||
|
f.write(p.output)
|
||||||
|
print(f"Wrote {len(p.output)} bytes to {output_file}", file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue