Untitled
unknown
plain_text
2 years ago
2.8 kB
10
Indexable
import barcode from barcode.writer import ImageWriter from PIL import Image, ImageWin import os import platform import subprocess import win32print import win32ui from ctypes import windll def get_printers(): printers = [printer[2] for printer in win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL)] return printers def user_select_printer(printers): if not printers: print("No printers found.") return None print("List of printers:") for i, printer in enumerate(printers, start=1): print(f"{i}. {printer}") selected_index = int(input("Enter the number of the printer you'd like to use: ")) return printers[selected_index - 1] def get_product_code(): product_code = input("Enter the product code: ") return product_code.upper() def generate_barcode(product_code): Code128 = barcode.get_barcode_class('code128') barcode_image = Code128(product_code, writer=ImageWriter()) output_filename = 'temp_barcode' barcode_image.save(output_filename) return output_filename def print_barcode(printer, barcode_image): # Get the printer DC printer_dc = win32ui.CreateDC() printer_dc.CreatePrinterDC(printer) # Get the page size and image size in pixels page_size_mm = (25.4, 54) page_size_pixels = tuple(int(windll.gdi32.GetDeviceCaps(printer_dc.GetSafeHdc(), i) * page_size_mm[i] / 1000) for i in (0, 1)) image = Image.open(barcode_image+".png") image_width, image_height = image.size # Calculate the scaling factor to fit the image on the page scaling_factor = min(page_size_pixels[0] / image_width, page_size_pixels[1] / image_height) # Calculate the position to center the image on the page x_pos = int((page_size_pixels[0] - scaling_factor * image_width) / 2) y_pos = int((page_size_pixels[1] - scaling_factor * image_height) / 2) # Start the print job printer_dc.StartDoc(barcode_image+".png") printer_dc.StartPage() # Print the image dib = ImageWin.Dib(image) dib.draw(printer_dc.GetSafeHdc(), (x_pos, y_pos, scaling_factor * image_width, scaling_factor * image_height)) # End the print job printer_dc.EndPage() printer_dc.EndDoc() printer_dc.ClosePrinter() print('Barcode printed successfully') def main(): printers = get_printers() selected_printer = user_select_printer(printers) if selected_printer is None: return while True: product_code = get_product_code() barcode_image = generate_barcode(product_code) print_barcode(selected_printer, barcode_image) print("Barcode printed successfully.") continue_printing = input("Do you want to print another barcode? (y/n): ") if continue_printing.lower() != 'y': break if __name__ == "__main__": main()
Editor is loading...