Compare commits
	
		
			2 Commits
		
	
	
		
			33af359a86
			...
			ba6c697f00
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| ba6c697f00 | |||
| 24d959da71 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -21,3 +21,4 @@ map*.png | |||||||
| build | build | ||||||
| # Generated label images | # Generated label images | ||||||
| labels | labels | ||||||
|  | temp | ||||||
							
								
								
									
										26
									
								
								cables.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								cables.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | 1172C | ||||||
|  | 86104CY | ||||||
|  | FIT-221-1_4 | ||||||
|  | 10GXW13 | ||||||
|  | 10GXW53 | ||||||
|  | 29501F | ||||||
|  | 29512 | ||||||
|  | 3092A | ||||||
|  | 3105A | ||||||
|  | 3106A | ||||||
|  | 6300FE | ||||||
|  | 6300UE | ||||||
|  | 7922A | ||||||
|  | 7958A | ||||||
|  | 8760 | ||||||
|  | 9841 | ||||||
|  | FI4X012W0 | ||||||
|  | FISX012W0 | ||||||
|  | IOP6U | ||||||
|  | RA500P | ||||||
|  | SPE101 | ||||||
|  | SPE102 | ||||||
|  | TF-1LF-006-RS5 | ||||||
|  | TF-SD9-006-RI5 | ||||||
|  | TT-SLG-024-HTN | ||||||
|  | 3050 | ||||||
 Submodule jukebox-web updated: 1bdc2b1438...3781e9adcf
									
								
							
							
								
								
									
										51
									
								
								label_document.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										51
									
								
								label_document.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | #!/usr/bin/env python3 | ||||||
|  | import fitz  # PyMuPDF | ||||||
|  | from reportlab.pdfgen import canvas | ||||||
|  | from reportlab.lib.pagesizes import letter | ||||||
|  | import os | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def generate_pdf(path="labels"): | ||||||
|  |     # Open the existing PDF | ||||||
|  |     image_folder_path = path | ||||||
|  |     doc = fitz.open('label_template.pdf') | ||||||
|  |     page = doc[0]  # Assuming you want to read from the first page | ||||||
|  |  | ||||||
|  |     placeholders = [] | ||||||
|  |     for shape in page.get_drawings(): | ||||||
|  |         if shape['type'] == 's':  # Checking for rectangle types | ||||||
|  |             placeholders.append({ | ||||||
|  |                 'x': shape['rect'].x0, | ||||||
|  |                 'y': shape['rect'].y0, | ||||||
|  |                 'width': shape['rect'].width, | ||||||
|  |                 'height': shape['rect'].height | ||||||
|  |             }) | ||||||
|  |  | ||||||
|  |     # List all PNG images in the folder | ||||||
|  |     image_files = [f for f in os.listdir(image_folder_path) if f.endswith('.png')] | ||||||
|  |     image_paths = [os.path.join(image_folder_path, file) for file in image_files] | ||||||
|  |  | ||||||
|  |     # Create a new PDF with ReportLab | ||||||
|  |     c = canvas.Canvas(path + "/print.pdf", pagesize=letter) | ||||||
|  |     current_placeholder = 0  # Track the current placeholder index | ||||||
|  |  | ||||||
|  |     for image_path in image_paths: | ||||||
|  |         if current_placeholder >= len(placeholders):  # Check if a new page is needed | ||||||
|  |             c.showPage() | ||||||
|  |             current_placeholder = 0  # Reset placeholder index for new page | ||||||
|  |  | ||||||
|  |         # Get current placeholder | ||||||
|  |         placeholder = placeholders[current_placeholder] | ||||||
|  |  | ||||||
|  |         # Place image at the placeholder position | ||||||
|  |         c.drawImage(image_path, placeholder['x'], page.rect.height - placeholder['y'] - placeholder['height'], width=placeholder['width'], height=placeholder['height']) | ||||||
|  |         current_placeholder += 1 | ||||||
|  |  | ||||||
|  |     # Save the final PDF | ||||||
|  |     c.save() | ||||||
|  |  | ||||||
|  |     # Close the original PDF | ||||||
|  |     doc.close() | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     generate_pdf("labels") | ||||||
| @@ -9,6 +9,7 @@ import os | |||||||
| import signal | import signal | ||||||
| from PIL import Image | from PIL import Image | ||||||
| from label_image import generate_code | from label_image import generate_code | ||||||
|  | from label_document import generate_pdf | ||||||
|  |  | ||||||
|  |  | ||||||
| def input_cable(): | def input_cable(): | ||||||
| @@ -22,7 +23,7 @@ def input_cable(): | |||||||
|     print("Input part number:", inputnum) |     print("Input part number:", inputnum) | ||||||
|     print("Searching databases for cables...") |     print("Searching databases for cables...") | ||||||
|     # Search both AW and BL sites |     # Search both AW and BL sites | ||||||
|     status, output = get_multi(["BL"+inputnum, "AW"+inputnum], delay=0.1, dir="temp/" + str(uuid.uuid4()) + "/", cache=False) |     status, output = get_multi(["BL"+inputnum, "AW"+inputnum], delay=0.1, dir="temp/" + str(uuid.uuid4()) + "/", webport=":9000", cache=False) | ||||||
|     print("") |     print("") | ||||||
|     if len(output) > 1: |     if len(output) > 1: | ||||||
|         for i in output: |         for i in output: | ||||||
| @@ -70,6 +71,8 @@ def gen_label(partnum, path="labels"): | |||||||
|     img = generate_code(partnum) |     img = generate_code(partnum) | ||||||
|     os.makedirs(path, exist_ok=True) |     os.makedirs(path, exist_ok=True) | ||||||
|     img.save(path + "/" + partnum + ".png") |     img.save(path + "/" + partnum + ".png") | ||||||
|  |     generate_pdf(path) | ||||||
|  |  | ||||||
|  |  | ||||||
| def delete_folder(path): | def delete_folder(path): | ||||||
|     # Check if the path is a directory |     # Check if the path is a directory | ||||||
|   | |||||||
| @@ -269,10 +269,10 @@ def qr_image(data, width=600): | |||||||
|     png_image_io = "belden-logo-superhires.png" |     png_image_io = "belden-logo-superhires.png" | ||||||
|     png_image_pillow = Image.open(png_image_io) |     png_image_pillow = Image.open(png_image_io) | ||||||
|     png_width, png_height = png_image_pillow.size |     png_width, png_height = png_image_pillow.size | ||||||
|     png_image_pillow = png_image_pillow.resize((int(width*5.2), int(width*5.2/png_width*png_height))) |     png_image_pillow = png_image_pillow.resize((int(width*4), int(width*4/png_width*png_height))) | ||||||
|     png_width, png_height = png_image_pillow.size |     png_width, png_height = png_image_pillow.size | ||||||
|     # paste belden logo first because it has a big border that would cover stuff up |     # paste belden logo first because it has a big border that would cover stuff up | ||||||
|     img.paste(png_image_pillow, (int(width*5-png_width/2), int(width*4.25 - png_height/2))) |     img.paste(png_image_pillow, (int(width*5-png_width/2), int(width*3.25 - png_height/2))) | ||||||
|  |  | ||||||
|     # draw circle border |     # draw circle border | ||||||
|     #draw.arc(((width - width/5, width - width/5), (width*9 + width/5, width*9 + width/5)),0,360,fill='blue', width = int(width/8)) |     #draw.arc(((width - width/5, width - width/5), (width*9 + width/5, width*9 + width/5)),0,360,fill='blue', width = int(width/8)) | ||||||
| @@ -289,7 +289,7 @@ def qr_image(data, width=600): | |||||||
|         text_width = font.getlength(partnum[2:]) |         text_width = font.getlength(partnum[2:]) | ||||||
|  |  | ||||||
|     txtx = (int(width * 10) - text_width) / 2 |     txtx = (int(width * 10) - text_width) / 2 | ||||||
|     txty = (int(width * 10)) / 2 |     txty = (int(width * 7.5)) / 2 | ||||||
|     # draw part number text |     # draw part number text | ||||||
|     draw.text((txtx,txty),partnum[2:], "black", font) |     draw.text((txtx,txty),partnum[2:], "black", font) | ||||||
|      |      | ||||||
| @@ -298,10 +298,11 @@ def qr_image(data, width=600): | |||||||
|     qrcode = segno.make('HTTPS://BLDN.APP/' + partnum,micro=False,boost_error=False,error="L",mask=3) |     qrcode = segno.make('HTTPS://BLDN.APP/' + partnum,micro=False,boost_error=False,error="L",mask=3) | ||||||
|     out = io.BytesIO() |     out = io.BytesIO() | ||||||
|     qrx, _ = qrcode.symbol_size(1,0) |     qrx, _ = qrcode.symbol_size(1,0) | ||||||
|     qrcode.save(out, scale=width*2/qrx, kind="PNG", border=0) |     qrcode.save(out, scale=width*3/qrx, kind="PNG", border=0) | ||||||
|     qrimg = Image.open(out) |     qrimg = Image.open(out) | ||||||
|     img.paste(qrimg, box=(int(width*4),int(width*5.75))) |     img.paste(qrimg, box=(int(width*3.5),int(width*4.5))) | ||||||
|  |     img = img.crop((width+int(width / 1.4)-int(width/8),width+int(width / 1.4)-int(width/8),img.size[0] - (width+int(width / 1.4)-int(width/8)), img.size[1] - (width+int(width / 1.4)-int(width/8))  )) | ||||||
|  |     img = img.resize((1200, 1200), Image.LANCZOS) # 1200 dpi | ||||||
|      |      | ||||||
|     return img |     return img | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										2064
									
								
								label_template.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2064
									
								
								label_template.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										4
									
								
								run.py
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								run.py
									
									
									
									
									
								
							| @@ -422,7 +422,7 @@ def setup_server(pool, manager): | |||||||
|     if sensor_ready is False: |     if sensor_ready is False: | ||||||
|         fprint("waiting for " + "Sensor Initialization" + " to complete...", sendqueue=to_server_queue) |         fprint("waiting for " + "Sensor Initialization" + " to complete...", sendqueue=to_server_queue) | ||||||
|         global mbconn |         global mbconn | ||||||
|         mbconn = ModbusClient(host="192.168.1.20", port=502, auto_open=True, auto_close=True) |         mbconn = ModbusClient(host="192.168.1.20", port=502, auto_open=True, auto_close=False) | ||||||
|         get_sensors() |         get_sensors() | ||||||
|     fprint("Sensors initialized.", sendqueue=to_server_queue) |     fprint("Sensors initialized.", sendqueue=to_server_queue) | ||||||
|  |  | ||||||
| @@ -490,7 +490,7 @@ def get_sensors(): | |||||||
|         return -1 |         return -1 | ||||||
|     sensors = out |     sensors = out | ||||||
|     #fprint("Values: " + str(sensors)) |     #fprint("Values: " + str(sensors)) | ||||||
|     #mbconn.close() |     mbconn.close() | ||||||
|     for x in range(len(oldsens)): |     for x in range(len(oldsens)): | ||||||
|         if oldsens[x] == 0 and out[x] == 1: |         if oldsens[x] == 0 and out[x] == 1: | ||||||
|             # cable newly detected on tray |             # cable newly detected on tray | ||||||
|   | |||||||
| @@ -83,7 +83,7 @@ async def send_messages(to_server_queue): | |||||||
|         await asyncio.sleep(0.001) |         await asyncio.sleep(0.001) | ||||||
|  |  | ||||||
| def websocket_server(to_server_queue, from_server_queue): | def websocket_server(to_server_queue, from_server_queue): | ||||||
|     start_server = websockets.serve(lambda ws, path: handler(ws, path, to_server_queue, from_server_queue), "localhost", 9000) |     start_server = websockets.serve(lambda ws, path: handler(ws, path, to_server_queue, from_server_queue), "0.0.0.0", 9000) | ||||||
|  |  | ||||||
|     asyncio.get_event_loop().run_until_complete(start_server) |     asyncio.get_event_loop().run_until_complete(start_server) | ||||||
|     asyncio.get_event_loop().create_task(send_messages(to_server_queue)) |     asyncio.get_event_loop().create_task(send_messages(to_server_queue)) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user