Untitled
unknown
plain_text
2 years ago
2.9 kB
10
Indexable
import barcode from barcode.writer import ImageWriter from PIL import Image, ImageWin, ImageOps 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') writer = barcode.writer.SVGWriter() barcode_image = Code128(product_code, writer=writer) output_filename = 'temp_barcode' barcode_image.save(output_filename) return output_filename+".svg" 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) dpi = 300 # Use a fixed DPI value (adjust it according to your printer's DPI) page_size_pixels = tuple(int(dpi * page_size_mm[i] / 25.4) for i in (0, 1)) image = Image.open(barcode_image) # Rotate the image by 90 degrees image = image.rotate(90, expand=True) image_width, image_height = image.size # Set the new size directly based on the paper dimensions new_size = (300, int(300 * 2.125)) # Resize the image without maintaining the aspect ratio resized_image = image.resize(new_size, Image.LANCZOS) resized_width, resized_height = resized_image.size # Calculate the position to center the image on the page x_pos = int((page_size_pixels[0] - resized_width) / 2) y_pos = int((page_size_pixels[1] - resized_height) / 2) - 80 # Start the print job printer_dc.StartDoc(barcode_image) printer_dc.StartPage() # Print the image dib = ImageWin.Dib(resized_image) dib.draw(printer_dc.GetSafeHdc(), (x_pos, y_pos, resized_width, resized_height)) # End the print job printer_dc.EndPage() printer_dc.EndDoc() printer_dc.DeleteDC() def main(): product_code = get_product_code() barcode_image = generate_barcode(product_code) 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) if __name__ == "__main__": main()
Editor is loading...