diff --git a/__pycache__/imageprinter.cpython-37.pyc b/__pycache__/imageprinter.cpython-37.pyc index e976153..daedf26 100644 Binary files a/__pycache__/imageprinter.cpython-37.pyc and b/__pycache__/imageprinter.cpython-37.pyc differ diff --git a/imageprinter.py b/imageprinter.py index c081e7e..cebcdc6 100644 --- a/imageprinter.py +++ b/imageprinter.py @@ -56,7 +56,7 @@ def _int_low_high(inp_number, out_bytes): return outp -def print(filename): +def print(filename, getlines=False): im = Image.open(filename) basewidth = 350 @@ -83,13 +83,20 @@ def print(filename): height_pixels, width_pixels = im.size - with open('/dev/usb/lp0', 'wb') as fp: - fp.write(ESC+b"@") - fp.write(ESC+b"\x7B"+b"\x41") - fp.write(ESC + b"3" + six.int2byte(22)); # Adjust line-feed size - fp.write(CARIDGE_RET) - for blob in blobs: - fp.write(GRAPHIC + _int_low_high( width_pixels, 2 ) + blob) - fp.write(LINE_FEED) - #fp.write(GRAPHIC + bytes([L,H]) + DATA) - fp.write(ESC + b"2"); # Reset line-feed size + if getlines: + return len(blobs) + + else: + with open('/dev/usb/lp0', 'wb') as fp: + fp.write(ESC+b"@") + fp.write(ESC+b"\x7B"+b"\x41") + #fp.write(ESC + b"3" + six.int2byte(22)); # Adjust line-feed size + fp.write(ESC + b"\x33" + bytes([22])); + + #fp.write(ESC + ) + fp.write(CARIDGE_RET) + for blob in blobs: + fp.write(GRAPHIC + _int_low_high( width_pixels, 2 ) + blob) + fp.write(LINE_FEED) + #fp.write(GRAPHIC + bytes([L,H]) + DATA) + fp.write(ESC + b"2"); # Reset line-feed size diff --git a/print.py b/print.py index 749b6ec..9376cdc 100644 --- a/print.py +++ b/print.py @@ -14,20 +14,42 @@ import subprocess from subprocess import check_output import datetime import time - +import re class Printer(): ESC = b'\x1B' + FORMFEED = b'\x0C' + UNDERLINEDON = b'\x1B'+b'\x2D'+b'\x31' + ITALICON = b'\x1B'+b'\x34' + ITALICOFF = b'\x1B'+b'\x35' + BOLDON = b'\x1B'+b'\x45' + BOLDOFF = b'\x1B'+b'\x46' + DHON = b'\x1B'+b'\x77'+b'\x01' + DHOFF = b'\x1B'+b'\x77'+b'\x00' + COMPRON = b'\x1B'+b'\x0f' + COMPROFF = b'\x1B'+b'\x12' CHANGE_EMULATION = ESC+b'\x7B'+b'\x65' LINE_FEED = b'\n' CARIDGE_RET = b'\x0D' CHARWIDTH = 78 + printedheight = 0 + pages = 1 strokes = 0 - debug = False + debug = True target = "/dev/usb/lp0" if debug: target = "/dev/tty" + + def formfeed(self): + with open(self.target, 'wb') as printer: + if not self.debug: + while self.checkpagebreak(printer) == False: + self.printedheight+=(44/216) + printer.write(self.LINE_FEED) + + + def printchar(self,char): with open(self.target, 'wb') as printer: if self.debug: @@ -39,11 +61,13 @@ class Printer(): printer.write(self.ESC+b"\x25"+b"\x46"+b"\x0F"+b"\x00"+b"\x04"+b"\x08"+b"\x00") self.strokes += 1 if(self.strokes>self.CHARWIDTH): + self.checkpagebreak(printer) + self.printedheight+=(44/216) printer.write(self.LINE_FEED) self.strokes = 0 def printstring(self,string, formating="p"): - + strokesinline = 0 with open(self.target, 'wb') as printer: if self.debug: if formating == "u": @@ -52,10 +76,49 @@ class Printer(): printer.write(b"\x1B"+b"\x5B"+b"\x30"+b"\x6D") else: - printer.write(bytes(str(string), 'utf-8')) + for word in re.split(r'(\s+)', string): + strokesinline += len(word) + if "\n" in word: + strokesinline = 0 + if strokesinline > self.CHARWIDTH: + printer.write(self.LINE_FEED) + strokesinline = len(word) + if not (strokesinline == 1 and word == " "): + printer.write(bytes(str(word), 'utf-8')) else: printer.write(self.ESC+b"\x7B"+b"\x41") - printer.write(bytes(str(string), 'utf-8')) + printer.write(self.ESC + b"\x33" + bytes([44])); + if formating == "u": + printer.write(self.BOLDON) + if formating == "i": + printer.write(self.ITALICON) + if formating == "dh": + printer.write(self.DHON) + if formating == "compr": + printer.write(self.COMPRON) + if self.printedheight > 11.69: + printer.write(bytes(str("NEW PAGE YESY"), 'utf-8')); + self.printedheight=0 + for word in re.split(r'(\s+)', string): + strokesinline += len(word) + if "\n" in word: + strokesinline = 0 + self.printedheight+=(44/216) + if strokesinline > self.CHARWIDTH: + self.checkpagebreak(printer) + self.printedheight+=(44/216) + printer.write(self.LINE_FEED) + strokesinline = len(word) + if not (strokesinline == 1 and word == " "): + printer.write(bytes(str(word), 'utf-8')) + if formating == "u": + printer.write(self.BOLDOFF) + if formating == "i": + printer.write(self.ITALICOFF) + if formating == "dh": + printer.write(self.DHOFF) + if formating == "compr": + printer.write(self.COMPROFF) printer.write(self.ESC+b"\x25"+b"\x46"+b"\x0F"+b"\x00"+b"\x04"+b"\x08"+b"\x00") try: self.newline() @@ -66,9 +129,31 @@ class Printer(): def newline(self): global strokes with open(self.target, 'wb') as printer: - printer.write(self.LINE_FEED) - self.strokes = 0 - + if not self.debug: + self.checkpagebreak(printer) + printer.write(self.ESC + b"\x33" + bytes([44])); + self.printedheight+=(44/216) + printer.write(self.LINE_FEED) + self.strokes = 0 + + def checkpagebreak(self, printer): + if self.printedheight+(44/216)*4 > 11.69: + printer.write(self.LINE_FEED) + printer.write(self.LINE_FEED) + printer.write(bytes(str("PAGE "+str(self.pages)), 'utf-8')); + printer.write(self.ESC + b"\x33" + bytes([44])); + printer.write(self.LINE_FEED) + printer.write(self.LINE_FEED) + printer.write(self.LINE_FEED) + printer.write(self.COMPRON) + printer.write(bytes(str("------------------------------------------------------ POETIC SOFTWARE PUBLICATION -----------------------------------------------------"), 'utf-8')); + printer.write(self.COMPROFF) + printer.write(self.LINE_FEED) + self.printedheight=(44/216) + self.pages+=1 + return True + else: + return False def printimagefromurl(self, url): page = requests.get(url) @@ -77,11 +162,26 @@ class Printer(): with open(f_name, 'wb') as f: f.write(page.content) - if printer.debug: + if self.debug: rows, columns = os.popen('stty size', 'r').read().split() - subprocess.call(["catimg","-w",columns,f_name]) + #subprocess.call(["catimg","-w",columns,f_name]) + subprocess.call(["feh",f_name]) else: + imagelines = imageprinter.print(f_name,True) + isodd = False + if imagelines % 2 == 1: + isodd = True + imagelines+=1 + if self.printedheight + (22/216)*imagelines +(44/216)*4 > 11.69: + self.formfeed() + self.printedheight += (22/216)*imagelines imageprinter.print(f_name) + if isodd: + with open('/dev/usb/lp0', 'wb') as printer: + printer.write(ESC + b"\x33" + bytes([22])); + printer.write(self.LINE_FEED) + printer.write(ESC + b"\x33" + bytes([44])); + @@ -96,6 +196,7 @@ class Terminal(): "list":"list theses and exercises", "exercise ":"see the exercise with the specified", "thesis ":"see the thesis with the specified", + "whois ":"get biography of person given", "exit":"finish the publication", } @@ -176,6 +277,9 @@ class Terminal(): elif "start" == str(command) or "restart" == str(command): main() + elif "ff" == str(command): + printer.formfeed() + elif str(command).split(" ")[0] == "exercise" or str(command).split(" ")[0] == "thesis": part = str(command).split(" ")[0] arguments = str(command.strip()).split(" ") @@ -233,7 +337,8 @@ class Terminal(): persons = { "Kittler":"Friedrich A. Kittler (June 12, 1943 – October 18, 2011) was a literary scholar and a media theorist. His works relate to media, technology, and the military. ", -"Alex":"Alexander Roidl created Poetic Software as part of his Master's thesis" +"Alex":"Alexander Roidl created Poetic Software as part of his Master's thesis.", +"Jule":"Jule Ulrych is an evironmental activist and passionate vegan food lover living in Den Haag." } printer = Printer() term = Terminal(printer, persons) @@ -241,24 +346,26 @@ now = datetime.datetime.now() def main(): term.waittostart() - printer.printstring("W E L C O M E !") - printer.newline() - #printimagefromurl('https://apod.nasa.gov/apod/image/1701/potw1636aN159_HST_2048.jpg') - printer.printstring(now.strftime("%Y-%m-%d %H:%M")) + printer.printstring("W E L C O M E !", "dh") printer.newline() - printer.printstring("---------------") - printer.printstring("POETIC SOFTWARE") - printer.printstring("---------------") - printer.printstring("type help for help") + printer.printstring(now.strftime("%Y-%m-%d %H:%M"), "compr") printer.newline() - result = apirequest.gettitle("introduction", 1) - for line in result: - printer.printstring(line, "u") - result = apirequest.getcontent("introduction", 1) - for line in result: - printer.printstring(line) +# printer.formfeed() + printer.printimagefromurl("https://www.sanfranciscobaycoffee.com/wp-content/uploads/2017/03/52279468.jpg") + +# printer.printstring("---------------") +# printer.printstring("POETIC SOFTWARE") +# printer.printstring("---------------") +# printer.printstring("type help for help") +# printer.newline() +# result = apirequest.gettitle("introduction", 1) +# for line in result: +# printer.printstring(line, "u") +# result = apirequest.getcontent("introduction", 1) +# for line in result: +# printer.printstring(line) printer.newline() - term.list() +# term.list() printer.printstring("SELECT which one to see, for exercise type: exercise and for thesis type: thesis ") printer.newline() term.waitforinput()