From fa5c846ebb994f45b22bf92160be886694b7a686 Mon Sep 17 00:00:00 2001 From: Quality App Developer Date: Fri, 6 Feb 2026 10:20:57 +0200 Subject: [PATCH] Add network printer detection on Windows: support printers from print servers --- build_windows.bat | 4 ++-- build_windows.ps1 | 4 ++-- print_label.py | 43 +++++++++++++++++++++++++++++++++++----- requirements_windows.txt | 2 ++ 4 files changed, 44 insertions(+), 9 deletions(-) diff --git a/build_windows.bat b/build_windows.bat index 53c539b..8fdb3fc 100644 --- a/build_windows.bat +++ b/build_windows.bat @@ -39,8 +39,8 @@ echo. REM Install dependencies echo [3/5] Installing dependencies... -echo Installing: python-barcode, pillow, reportlab, kivy, pyinstaller... -pip install python-barcode pillow reportlab kivy==2.3.1 pyinstaller==6.18.0 +echo Installing: python-barcode, pillow, reportlab, kivy, pyinstaller, pywin32, wmi... +pip install python-barcode pillow reportlab kivy==2.2.1 pyinstaller==6.1.0 pywin32 wmi if errorlevel 1 ( echo ERROR: Failed to install dependencies pause diff --git a/build_windows.ps1 b/build_windows.ps1 index f5fae5d..ff56c4e 100644 --- a/build_windows.ps1 +++ b/build_windows.ps1 @@ -38,8 +38,8 @@ if ($LASTEXITCODE -ne 0) { Write-Host "" Write-Host "[3/5] Installing dependencies..." -ForegroundColor Cyan -Write-Host "Installing: python-barcode, pillow, reportlab, kivy, pyinstaller..." -pip install python-barcode pillow reportlab kivy==2.3.1 pyinstaller==6.18.0 +Write-Host "Installing: python-barcode, pillow, reportlab, kivy, pyinstaller, pywin32, wmi..." +pip install python-barcode pillow reportlab kivy==2.2.1 pyinstaller==6.1.0 pywin32 wmi if ($LASTEXITCODE -ne 0) { Write-Host "ERROR: Failed to install dependencies" -ForegroundColor Red Read-Host "Press Enter to exit" diff --git a/print_label.py b/print_label.py index f7c548a..ba4451a 100755 --- a/print_label.py +++ b/print_label.py @@ -28,6 +28,7 @@ SYSTEM = platform.system() # 'Linux', 'Windows', 'Darwin' def get_available_printers(): """ Get list of available printers (cross-platform). + Includes both local and network printers on Windows. Returns: list: List of available printer names, with "PDF" as fallback @@ -40,14 +41,46 @@ def get_available_printers(): return list(printers.keys()) if printers else ["PDF"] elif SYSTEM == "Windows": - # Windows: Try win32print first + # Windows: Get both local and network printers try: printers = [] - for printer_name in win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL): - printers.append(printer_name[2]) + + # Get local printers + try: + for printer_info in win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL): + printer_name = printer_info[2] + if printer_name and printer_name not in printers: + printers.append(printer_name) + except: + pass + + # Get network printers from print server + try: + for printer_info in win32print.EnumPrinters(win32print.PRINTER_ENUM_NETWORK): + printer_name = printer_info[2] + if printer_name and printer_name not in printers: + printers.append(printer_name) + except: + pass + + # Get connected printers (alternative method using WMI) + try: + import wmi + c = wmi.WMI() + for printer in c.Win32_Printer(): + printer_name = printer.Name + if printer_name and printer_name not in printers: + printers.append(printer_name) + except: + pass + + # Add PDF as fallback option + if "PDF" not in printers: + printers.append("PDF") + return printers if printers else ["PDF"] - except: - # Fallback for Windows if win32print fails + except Exception as e: + print(f"Error getting Windows printers: {e}") return ["PDF"] elif SYSTEM == "Darwin": diff --git a/requirements_windows.txt b/requirements_windows.txt index 4fbed6c..e269f67 100644 --- a/requirements_windows.txt +++ b/requirements_windows.txt @@ -3,3 +3,5 @@ pillow kivy>=2.1.0 reportlab pyinstaller>=6.0.0 +pywin32 +wmi