def printAttr(selPrt): #Save the current defauly Printer dfltPrt = win32print.GetDefaultPrinter() win32print.SetDefaultPrinter(selPrt) print('====>> My Current Printer: ', win32print.GetDefaultPrinter()) handle, level, prtProperties = prepPrinter(selPrt) showPtrAttr(prtProperties)
def printPrinter(self): import win32print from win32ui import CreateDC import win32con if entryprint.get() == '': Str = tkinter.messagebox.askquestion( 'None', 'Are you sure you want to print an empty character?') if Str == True: INCH = 1440 hDC = CreateDC() hDC.CreatePrinterDC(win32print.GetDefaultPrinter()) hDC.StartDoc("Test doc") hDC.StartPage() hDC.SetMapMode(win32con.MM_TWIPS) hDC.DrawText('', (0, INCH * -1, INCH * 8, INCH * -2), win32con.DT_CENTER) hDC.EndPage() hDC.EndDoc() else: pass elif entryprint.get() == 'Self Text': INCH = 1440 hDC = CreateDC() hDC.CreatePrinterDC(win32print.GetDefaultPrinter()) hDC.StartDoc("Test doc") hDC.StartPage() hDC.SetMapMode(win32con.MM_TWIPS) hDC.DrawText(self.text.get(0.0, END), (0, INCH * -1, INCH * 8, INCH * -2), win32con.DT_CENTER) hDC.EndPage() hDC.EndDoc() else: INCH = 1440 a = entryprint.get().encode('utf-8') a = a.decode('utf-8') if not ( not 'a' and not 'b' and not 'c' and not 'd' and not 'e' and not 'f' and not 'g' and not "h" and not 'i' ) or 'j' or 'k' or 'l' or 'm' or 'n' or 'o' or 'p' or 'q' or 'r' or 's' or 't' or 'u' or 'v' or 'w' or 'x' or 'y' or 'z' not in a: a = u'{}'.format(a) hDC = CreateDC() hDC.CreatePrinterDC(win32print.GetDefaultPrinter()) hDC.StartDoc("Test doc") hDC.StartPage() hDC.SetMapMode(win32con.MM_TWIPS) hDC.DrawText(a, (0, INCH * -1, INCH * 8, INCH * -2), win32con.DT_CENTER) hDC.EndPage() hDC.EndDoc()
def selectPrinter(): index = 0 Printers = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL, None, 2) print("[Print List]") print("Current Printer Name: " + win32print.GetDefaultPrinter()) print("0. Close") for Printer in Printers: index += 1 print(str(index) + ". " + Printer['pPrinterName']) number = input("Select Printer Number: ") if len(Printers) >= int(number) and int(number) > 0: win32print.SetDefaultPrinter(Printers[int(number) - 1]['pPrinterName']) print("Setting Printer: " + win32print.GetDefaultPrinter()) return win32print.GetDefaultPrinter()
def code_run(): user = var.get() for i in codes.keys(): if user == i: if codes[user][1] == 0: import os from time import gmtime, strftime time = strftime("%H:%M:%S", gmtime()) print(time) my_file = open("Login.txt", "w") name = codes[user][0] my_file.write(name) my_file.write(" ") my_file.write(time) my_file.close() import tempfile import win32api import win32print file = tempfile.mktemp (".txt") win32api.ShellExecute ( 0, "printto", 'Login.txt', '"%s"' % win32print.GetDefaultPrinter (), ".", 0 ) codes[user][1] = 1
def print_file(pdf_file_name, gs='gswin32c'): """ Выводим на принтер pdf-файл :param pdf_file_name: :return: """ # GHOSTSCRIPT_PATH = "w:\\#### D\Work\\# python\\tsc_sample\\gsprint\\gsprint.exe" # GSPRINT_PATH = "C:\\Program Files (x86)\\gs\\gs9.50\\bin\\gswin32.exe" # printer_name = win32print.GetDefaultPrinter() print(f'printer - [{printer_name}]') # # #win32api.ShellExecute (0, "print", filename, f'"{win32print.GetDefaultPrinter()}"', ".", 0) # win32api.ShellExecute(0, 'open', GSPRINT_PATH, '-ghostscript "'+GHOSTSCRIPT_PATH+'" -printer "'+printer_name+'" "1.pdf"', '.', 0) args = gs + '.exe ' \ '-sDEVICE=mswinpr2 ' \ '-q ' \ '-dNOPROMPT -dFitPage ' \ '-dBATCH ' \ '-dNOPAUSE ' \ '-sOutputFile="%printer%{}" '.format(printer_name) ghostscript = args + f'"{pdf_file_name}"' subprocess.call(ghostscript, shell=True)
def begin_document(self, desc="MSWinPrint.py print job"): # open the printer if self.printer is None: self.printer = win32print.GetDefaultPrinter() self.hprinter = win32print.OpenPrinter(self.printer) # load default settings devmode = win32print.GetPrinter(self.hprinter, 8)["pDevMode"] # change paper size and orientation if self.papersize is not None: devmode.PaperSize = paper_sizes[self.papersize] if self.orientation is not None: devmode.Orientation = orientations[self.orientation] # create dc using new settings self.hdc = win32gui.CreateDC("WINSPOOL", self.printer, devmode) self.dc = win32ui.CreateDCFromHandle(self.hdc) # self.dc = win32ui.CreateDC() # if self.printer is not None: # self.dc.CreatePrinterDC(self.printer) # else: # self.dc.CreatePrinterDC() self.dc.SetMapMode(win32con.MM_TWIPS) # hundredths of inches self.dc.StartDoc(desc) self.pen = win32ui.CreatePen(0, int(scale_factor), 0L) self.dc.SelectObject(self.pen) self.page = 1
def print_png_list(pngList, dirPath, printerName): hDC = win32ui.CreateDC() for filename in pngList: try: hDC.CreatePrinterDC(win32print.GetDefaultPrinter()) printer_size = hDC.GetDeviceCaps(win32con.PHYSICALWIDTH), hDC.GetDeviceCaps(win32con.PHYSICALHEIGHT) logging.debug(printer_size) bmp = Image.open(dirPath + '/' + filename) # if bmp.size[0] < bmp.size[1]: # bmp = bmp.rotate(90) hDC.StartDoc(dirPath + '/' + filename) hDC.StartPage() dib = ImageWin.Dib(bmp) labelSize = get_label_size(printerName) dib.draw(hDC.GetHandleOutput(), (0, 0, labelSize[0], labelSize[1])) hDC.EndPage() time.sleep(1) except BaseException as e: raise e finally: hDC.EndDoc()
def sample_print_string(): str1 = "Sample Print String" hDC = win32ui.CreateDC() print(win32print.GetDefaultPrinter()) # test hDC.CreatePrinterDC(win32print.GetDefaultPrinter()) hDC.StartDoc("Test doc") hDC.StartPage() hDC.SetMapMode(win32con.MM_TWIPS) # draws text within a box (assume about 1400 dots per inch for typical HP printer) ulc_x = 1000 # give a left margin ulc_y = -1000 # give a top margin lrc_x = 11500 # width of text area-margin, close to right edge of page lrc_y = -15000 # height of text area-margin, close to bottom of the page hDC.DrawText(str1, (ulc_x, ulc_y, lrc_x, lrc_y), win32con.DT_LEFT) hDC.EndPage() hDC.EndDoc()
def printer_watchdog(): DEFAULT_LOCALE_ENCODING = get_system_encoding() print win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL) # get local printers print win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS) # get printers which other computer shared default_printer_name = win32print.GetDefaultPrinter() printer = win32print.OpenPrinter(default_printer_name) print win32print.GetPrinter(printer) jobs_list = list() total_seconds = 60 * 5 # reset after 60*5 seconds sleep_seconds = 10 times = total_seconds / sleep_seconds current_times = 0 while True: jobs = win32print.EnumJobs(printer, 0, 3, 1) # 0 is location of first job, # 3 is number of jobs to enumerate, # 1 is job info level, can be 1(win32print.JOB_INFO_1), 2, 3. 3 is reserved, 1 and 2 can NOT get job status, :( if len(jobs) >= 1: for job in jobs: print job.get('pUserName'), job.get('Submitted'), job.get('pMachineName'), \ job.get('pDocument').decode(DEFAULT_LOCALE_ENCODING) jobs_list.append(job.get('JobId', -1)) if any([jid in jobs_list for jid in (jobs[0].get('JobId'), jobs[-1].get('JobId'))]): current_times += 1 if current_times > times: print "printer need to be reset, ... " reset_printer() jobs_list = [] # make sure there are not same job id in list current_times = 0 print 'looks good' time.sleep(sleep_seconds)
def print_status_update(status, output): text1.configure( background="white", foreground="black") text1.delete(1.0, END) # clean out the text box first text1.insert(tk.END, status) if status == "Printing...": # print ('\a\a') # make a sound winsound.Beep(600, 400) # print("before print") printer_name = win32print.GetDefaultPrinter() out = '/d:"%s"' % (printer_name) win32api.ShellExecute(0, "print", output, out, ".", 0) # print("after print") text1.after(2100, back_to_ready) #this line of code only delay the text1 refresh, the program doesn't have any delay here # print("after update text") time.sleep(2) # print("after sleep") # os.startfile(output,"print") # https://stackoverflow.com/questions/12723818/print-to-standard-printer-from-python else: text1.configure( background="yellow", foreground="red") winsound.Beep(4000, 800)
def impress(): global nome lista = os.listdir() # print(lista) for i in range(len(lista)): # numero = i + 1 print(i, lista[i]) selec = input("Qual numero do arquivo desejado: ") if (selec == ""): sys.exit() selec = int(selec) nome = lista[selec] arquivo = [nome] numero = numpage(arquivo) r = input(f"Deseja imprimir um total de {numero} páginas?") r = str.upper(r) if (r == "S"): try: arq = open(nome) win32api.ShellExecute(0, "print", nome, '/d:"%s"' % win32print.GetDefaultPrinter(), ".", 0) except: print("Erro na impressão, tente novamente") return numero
def imprimir(): PHYSICALWIDTH = 110 PHYSICALHEIGHT = 110 printer_name = win32print.GetDefaultPrinter() file_name = "image.jpg" hDC = win32ui.CreateDC() hDC.CreatePrinterDC(printer_name) printer_size = hDC.GetDeviceCaps(PHYSICALWIDTH), hDC.GetDeviceCaps( PHYSICALHEIGHT) bmp = Image.open(file_name) if bmp.size[0] < bmp.size[1]: bmp = bmp.rotate(90) hDC.StartDoc(file_name) hDC.StartPage() dib = ImageWin.Dib(bmp) dib.draw(hDC.GetHandleOutput(), (0, 0, printer_size[0], printer_size[1])) hDC.EndPage() hDC.EndDoc() hDC.DeleteDC()
def makeprint(loc): printer_name = win32print.GetDefaultPrinter() hDC = win32ui.CreateDC() hDC.CreatePrinterDC(printer_name) printable_area = hDC.GetDeviceCaps(0), hDC.GetDeviceCaps(0) printer_size = hDC.GetDeviceCaps(0), hDC.GetDeviceCaps(0) printer_margins = hDC.GetDeviceCaps(4), hDC.GetDeviceCaps(6) file_name = PIL.Image.open(loc) ratios = [ 1.0 * printable_area[0] / file_name.size[0], 1.0 * printable_area[1] / file_name.size[1] ] scale = min(ratios) hDC.StartDoc(loc) hDC.StartPage() dib = PIL.ImageWin.Dib(file_name) scaled_width, scaled_height = [int(scale * i) for i in file_name.size] x1 = int((printer_size[0] - scaled_width) / 2) y1 = int((printer_size[1] - scaled_height) / 2) x2 = x1 + scaled_width y2 = y1 + scaled_height dib.draw(hDC.GetHandleOutput(), (x1, y1, x2, y2)) hDC.EndPage() hDC.EndDoc() hDC.DeleteDC()
def prepPrt2(): #http://newcenturycomputers.net/projects/pythonicwindowsprinting.html # if you just want to use the default printer, you need # to retrieve its name. printer = win32print.GetDefaultPrinter() # open the printer. hprinter = win32print.OpenPrinter(printer) # retrieve default settings. this code does not work on # win95/98, as GetPrinter does not accept two devmode = win32print.GetPrinter(hprinter, 2)["pDevMode"] # change paper size and orientation # constants are available here: # http://msdn.microsoft.com/library/default.asp? # url=/library/en-us/intl/nls_Paper_Sizes.asp # number 10 envelope is 20 devmode.PaperSize = 20 # 1 = portrait, 2 = landscape devmode.Orientation = 2 # create dc using new settings. # first get the integer hDC value. note that we need the name. hdc = win32gui.CreateDC("WINSPOOL", printer, devmode) # next create a PyCDC from the hDC. dc = win32ui.CreateDCFromHandle(hdc)
def init_printer(): name = win32print.GetDefaultPrinter() print "printer name: " + name # printdefaults = {"DesiredAccess": win32print.PRINTER_ACCESS_ADMINISTER} printdefaults = {"DesiredAccess": win32print.PRINTER_ACCESS_USE} handle = win32print.OpenPrinter(name, printdefaults) level = 2 attributes = win32print.GetPrinter(handle, level) print "Old Duplex = %d" % attributes['pDevMode'].Duplex # attributes['pDevMode'].Duplex = 1 # no flip attributes['pDevMode'].Duplex = 2 # flip up # attributes['pDevMode'].Duplex = 3 # flip over ## 'SetPrinter' fails because of 'Access is denied.' ## But the attribute 'Duplex' is set correctly try: win32print.SetPrinter(handle, level, attributes, 0) except: print "win32print.SetPrinter: set 'Duplex'" return name, printdefaults, handle, attributes
def send_txt(file_path, printer_name): default_printer = win32print.GetDefaultPrinter() print("---current default printer-----", default_printer) win32print.SetDefaultPrinter(printer_name) handle = win32print.OpenPrinter( printer_name, {"DesiredAccess": win32print.PRINTER_ALL_ACCESS}) print("---changed default printer-----", win32print.GetDefaultPrinter()) dict = shell.ShellExecuteEx(fMask=256 + 64, lpVerb='print', lpFile=file_path, lpParameters=printer_name) wait = dict["hProcess"] win32event.WaitForSingleObject(wait, -1) win32print.ClosePrinter(handle) win32print.SetDefaultPrinter(default_printer) print("---current default printer-----", win32print.GetDefaultPrinter())
def sacar_impresion(request, ubig, zon, name, opc): lista = [] # lista.append("Ubigeo: "+str(ubigeo)+" Zona: " +str(zonaq) +" Seccion: "+ str(seccq)+" y AEU: "+str(aeut) +"<br/>") # cond = Esp_Aeus.objects.filter(ubigeo=ubigeo, zona=zonaq, aeu_final=aeut) print "Esta la impresora elegida de opcion: " + str(opc) tempprinter = " " if opc == 1: "Entro a la impresora blanca" tempprinter = "\\\\172.18.1.35\\192.168.230.16" else: print "Entro a la impresora negra" tempprinter = "\\\\172.18.1.35\\192.168.230.20" print tempprinter currentprinter = win32print.GetDefaultPrinter() # print "Aqui esta el nombre: " + str(ubig) + name source_file_name = "\\\srv-fileserver\\CPV2017\\segm_tab\\urbano\\" + str( ubig) + "\\" + str(zon) + "\\" + str(name) print source_file_name # \\\srv - fileserver\\CPV2017\\list_segm_esp\\" + str(ubigeo) + "\\" + zonal + "\\" + str(ubigeo) + zonal + str(secc) + str(aeu_conv) + ".pdf" win32print.SetDefaultPrinter(tempprinter) win32api.ShellExecute(0, "print", source_file_name, None, ".", 0) win32print.SetDefaultPrinter(currentprinter) return HttpResponse(lista)
def setupUI(self): """ This is the graphical user interface """ printers = self.loadPrinters() self.val_var = tk.StringVar() # This set the default selection in combobox. self.val_var.set(printers[0]) # This set the current printer selected. self.cur_printer = printers[0] # Get the default printer and save it for restoration purposes. self.default_printer = win32print.GetDefaultPrinter() self.title_lbl = tk.Label(self, text="Print to Printer", font=('Times', 13, 'bold'), fg='blue') self.title_lbl.pack(fill='x', padx=10, pady=10) self.combo = ttk.Combobox(self, textvariable=self.val_var, values=printers) self.combo.pack(fill='x', padx=10, pady=10) self.combo.bind("<<ComboboxSelected>>", self.selectPrinter) self.print_btn = ttk.Button(self, text='Print', command=self.printFile) self.print_btn.pack(side='right', padx=10, pady=10) self.cancel_btn = ttk.Button(self, text='Cancel', command=self.closeApp) self.cancel_btn.pack(side='right', padx=10, pady=10)
def thermalPrinter(base64code): try: raw_str = str(base64code) raw_base = base64.b64decode(raw_str) data = bytes(raw_base) nameprinter = win32print.GetDefaultPrinter() hPrinter = win32print.OpenPrinter(nameprinter) win32print.StartDocPrinter(hPrinter, 1, ("Print data otros pagos", None, "RAW")) try: win32print.StartPagePrinter(hPrinter) win32print.WritePrinter(hPrinter, data) win32print.EndPagePrinter(hPrinter) win32print.EndDocPrinter(hPrinter) win32print.ClosePrinter(hPrinter) except Exception as e: return jsonify({ "code":500, "message":str(e.message) }) except Exception as e: return jsonify({ "code":500, "message":str(e.message) }) return jsonify({ "code":200, "message":"printer!!!" })
def do_print(file_path): printer_name = win32print.GetDefaultPrinter() hDC = win32ui.CreateDC() hDC.CreatePrinterDC(printer_name) printable_area = hDC.GetDeviceCaps(HORZRES), hDC.GetDeviceCaps(VERTRES) printer_size = hDC.GetDeviceCaps(PHYSICALWIDTH), hDC.GetDeviceCaps( PHYSICALHEIGHT) bmp = Image.open(file_path) ratios = [ 1.0 * printable_area[0] / bmp.size[0], 1.0 * printable_area[1] / bmp.size[1] ] scale = min(ratios) hDC.StartDoc(file_path) hDC.StartPage() dib = ImageWin.Dib(bmp) scaled_width, scaled_height = [int(scale * i) for i in bmp.size] x1 = int((printer_size[0] - scaled_width) / 2) y1 = int((printer_size[1] - scaled_height) / 2) x2 = x1 + scaled_width y2 = y1 + scaled_height dib.draw(hDC.GetHandleOutput(), (x1, y1, x2, y2)) hDC.EndPage() hDC.EndDoc() hDC.DeleteDC()
def sample_print_image(): sampleFileName = './sample_waybill.png' hDC = win32ui.CreateDC() try: hDC.CreatePrinterDC(win32print.GetDefaultPrinter()) printer_size = hDC.GetDeviceCaps(win32con.PHYSICALWIDTH), hDC.GetDeviceCaps(win32con.PHYSICALHEIGHT) logging.debug(printer_size) bmp = Image.open(sampleFileName) # if bmp.size[0] < bmp.size[1]: # bmp = bmp.rotate(90) hDC.StartDoc(sampleFileName) hDC.StartPage() dib = ImageWin.Dib(bmp) # dib.draw(hDC.GetHandleOutput(), (0, 0, printer_size[0] - 100, printer_size[1])) dib.draw(hDC.GetHandleOutput(), (0, 0, LabelSize.SF_WIDTH, LabelSize.SF_HEIGHT)) except BaseException as e: raise e finally: hDC.EndPage() hDC.EndDoc()
def printer_watchdog(): print win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL) # get local printers print win32print.EnumPrinters(win32print.PRINTER_ENUM_CONNECTIONS) # get printers which other computer shared default_printer_name = win32print.GetDefaultPrinter() printer = win32print.OpenPrinter(default_printer_name) print win32print.GetPrinter(printer) jobs_list = list() total_seconds = 60 * 5 # reset after 60*5 seconds, see 'known issue 2' in this file. sleep_seconds = 10 times = total_seconds / sleep_seconds current_times = 0 while True: jobs = win32print.EnumJobs(printer, 0, 3, 1) # except: pywintypes.error: (1722, 'EnumJobs', 'RPC 服务器不可用。'), ignored this except # 0 is location of first job, # 3 is number of jobs to enumerate, # 1 is job info level, can be 1(win32print.JOB_INFO_1), 2, 3. 3 is reserved, 1 and 2 can NOT get job status, :( if len(jobs) >= 1: for job in jobs: filename = job.get('pDocument') job_id = job.get('JobId', md5(filename).hexdigest()) job_status = job.get('Status', 0) if job_status in [0x00000002, 0x00000004, 0x00000800]: # JOB_STATUS_ERROR """ Refers: https://docs.microsoft.com/en-us/windows/desktop/printdocs/job-info-2 ~\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\WinSDK\Include\WinSpool.h """ print "printer need to be reset, ... " reset_printer() jobs_list = [] # make sure there are not same job id in list current_times = 0 print "Current job: ", job_id, job.get('pUserName'), job.get('Submitted'), job.get( 'pMachineName'), filename, "[ %d/%d ]" % (times, current_times + 1) jobs_list.append(job_id) # if any([jid in jobs_list for jid in (jobs[0].get('JobId'), jobs[-1].get('JobId'))]): # current_times += 1 if Counter(jobs_list).most_common(1)[0][1] > 1: current_times += 1 if current_times > times: """ KNOWN ISSUE 2: It will reset when a document sends lots of pages to printer. This script may reset printer before job finished which is not expected. """ print "printer need to be reset, ... " reset_printer() jobs_list = [] # make sure there are not same job id in list current_times = 0 else: jobs_list = [] current_times = 0 print 'looks good, keep watching ...' time.sleep(sleep_seconds)
def printer(raw_data): default_printer = win32print.GetDefaultPrinter() h = win32print.OpenPrinter(default_printer) win32print.StartDocPrinter(h, 1, ("", "", "RAW")) win32print.WritePrinter(h, raw_data) win32print.EndDocPrinter(h) win32print.ClosePrinter(h)
def makeprint(loc): print('Printer Connection: Complete') printer_name = win32print.GetDefaultPrinter() hDC = win32ui.CreateDC() hDC.CreatePrinterDC(printer_name) scales = 1024, 1024, 820, 733 printable_area = scales[0], scales[1] printer_size = scales[1], scales[0] printer_margins = scales[0] - scales[2], scales[1] - scales[3] for i in range(1, 3): print('Printing in {0} secs'.format((0 - i) * (-1))) sleep(i) file_name = PIL.Image.open(loc) ratios = [ 1.0 * printable_area[0] / file_name.size[0], 1.0 * printable_area[1] / file_name.size[1] ] scale = min(ratios) hDC.StartDoc(loc) hDC.StartPage() dib = PIL.ImageWin.Dib(file_name) scaled_width, scaled_height = [int(scale * i) for i in file_name.size] x1 = int((printer_size[0] - scaled_width) / 2) y1 = int((printer_size[1] - scaled_height) / 2) x2 = x1 + scaled_width y2 = y1 + scaled_height dib.draw(hDC.GetHandleOutput(), (x1, y1, x2, y2)) hDC.EndPage() hDC.EndDoc() hDC.DeleteDC() print('Printed .')
def printFile(filename): import tempfile import win32api import win32print open(filename, "r") win32api.ShellExecute(0, "print", filename, '/d:"%s"' % win32print.GetDefaultPrinter(), ".", 0)
def printer1(self, img): #调用打印机,请事先把默认打印机,纸张格式等参数从电脑上调好 print('start print ' + img) printer_name = win32print.GetDefaultPrinter() # # raw_data could equally be raw PCL/PS read from # some print-to-file operation # if sys.version_info >= (3, ): raw_data = bytes(a, "utf-8") else: raw_data = "This is a test" hPrinter = win32print.OpenPrinter(printer_name) try: hJob = win32print.StartDocPrinter(hPrinter, 1, (img, None, "RAW")) print('here1' + img) try: win32print.StartPagePrinter(hPrinter) win32print.WritePrinter(hPrinter, raw_data) win32print.EndPagePrinter(hPrinter) print('here2') finally: win32print.EndDocPrinter(hPrinter) print('here3') finally: win32print.ClosePrinter(hPrinter) print('here4')
def __init__(self, printer_name): self.printer_name = printer_name # Set printer logger.info("正在设置默认打印机为: %s" % self.printer_name) win32print.SetDefaultPrinter(self.printer_name) self.printer = win32print.GetDefaultPrinter()
def printTest(): source_file_name = "c:/temp/temp.txt" pdf_file_name = tempfile.mktemp(".pdf") styles = getSampleStyleSheet() h1 = styles["h1"] normal = styles["Normal"] doc = SimpleDocTemplate(pdf_file_name) # # reportlab expects to see XML-compliant # data; need to escape ampersands &c. # text = cgi.escape(open(source_file_name).read()).splitlines() # # Take the first line of the document as a # header; the rest are treated as body text. # story = [Paragraph(text[0], h1)] for line in text[1:]: story.append(Paragraph(line, normal)) story.append(Spacer(1, 0.2 * inch)) doc.build(story) win32api.ShellExecute( 0, "print", pdf_file_name, '/d:"%s"' % win32print.GetDefaultPrinter(), ".", 1 )
def __init__(self, printer_name=None, *args, **kwargs): Escpos.__init__(self, *args, **kwargs) if printer_name is not None: self.printer_name = printer_name else: self.printer_name = win32print.GetDefaultPrinter() self.hPrinter = None
def printer_pic(file_name): # 物理宽度、高度 PHYSICALWIDTH = 110 PHYSICALHEIGHT = 111 # 物理偏移位置 PHYSICALOFFSETX = 0 PHYSICALOFFSETY = 0 printer_name = win32print.GetDefaultPrinter() printer_name = 'Microsoft Print to PDF' hDC = win32ui.CreateDC() hDC.CreatePrinterDC(printer_name) printer_size = hDC.GetDeviceCaps(PHYSICALWIDTH), hDC.GetDeviceCaps( PHYSICALHEIGHT) bmp = Image.open(file_name) if (bmp.size[0] > bmp.size[1]): #print('rotate...') #print(bmp.size) bmp = bmp.transpose(Image.ROTATE_90) #bmp.show() print(bmp.size) hDC.StartDoc(file_name) hDC.StartPage() dib = ImageWin.Dib(bmp) dib.draw(hDC.GetHandleOutput(), (0, 0, 4961, 7016)) hDC.EndPage() hDC.EndDoc() hDC.DeleteDC()