Untitled
unknown
plain_text
3 years ago
2.9 kB
12
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...