From 1cf4482914d709700d695f77c659237b1d86f99d Mon Sep 17 00:00:00 2001 From: scheianuionut Date: Fri, 6 Feb 2026 10:48:19 +0200 Subject: [PATCH] updated printer list to show local networ printers --- __pycache__/print_label.cpython-313.pyc | Bin 12483 -> 13581 bytes __pycache__/print_label_pdf.cpython-313.pyc | Bin 10070 -> 10069 bytes print_label.py | 60 ++++++++++---------- 3 files changed, 29 insertions(+), 31 deletions(-) diff --git a/__pycache__/print_label.cpython-313.pyc b/__pycache__/print_label.cpython-313.pyc index d12596e07a9e12fdcccb757350c8fca45a05ca6a..cacd18de38062e7deffef9c7242389a73de1eb2d 100644 GIT binary patch delta 2958 zcmZ`*drVu`89(Q~`~t_uHe7>kE|`~j1Sfzr_a)wF7VOxolmEULyI-8p_F zkZs4-_kHJkfA)8O_FDLjZy6t#m+JvOm*0Ceda38v##bO@(3|j{?gs$4KqpWj`np~~ z-=|z$hXw$JLifvs;}X>aNfZDUFyz5%TB1dU#dn2~n3lW+fLRKFQ8NIieP6-e`5O;_ z1d*4w)=Nw&g#bp|05AXnh?E40YZwO=+;n2868fBKs?r`ijjgYe)+QarDj?)Sb##?S zcM^(v{4yM+6^=A6aUr4P^NfewC`?;yWu@wPfC1dLM$&{Di3OIUpU`$%gZ=&itM#I> zI90xD+ zwlFIvgtPJFIUyFG3CD!6GAk%@axt!+7v|Ndl9bhi5Lbk+MU~n3Vgh~0obz3F_*FHo z3bL|rK~}@bs51A|_n0ttStyw2X!jOl0sbzXEcmZj|9hmMY6@Gd0eu+MHfvKK{VbwCy;0 z&vEqkFK+iu-@|Xm^i}_Zmc!dE1Dh=a@3Wt@1g@85n!8qfKU=z9_E}By^}d@UAGZ%> z91S{G317sfVcsxeZz5N)x1h?RQGLL`|nx%cXKp0?C#)v&c}c%uYF*$ZSV!3 z%DydAe};EnUA$)8&9T_Hn{%NrHQh_M@uXLL_Mj8oa!`cU>IrS70&U<{hmQ$x;C2s9 zXrB$!HFGUCtQ{iewQl0NHsC7@TELwHUQE+~B9tbX(wsifLZ?l}fSXRcSR9acvqaNE z6S++vG|_2)k11%N*I9@!>l}l_)(tF?O*D}$Y_OVM=OK}+^BSjqh@#h zpB+m5N}JQbCbVq22!)j0oPyAcKB(Z?@8IbsQ-80R=eRB`s@>>}{iLmlh$DoI5`uvd zs8c9yZ-(DM|FpYJXNV$9$XP;WP+fK4fR~7`m&l#eOVtddPBZA+HTOF|$U|BgHs((W zLBnwXM6Ia%sz#ynT&plHAkipSWkr921`SJYAu9$zt4RVSOcQ{_geuWPU1gc5m!PN< z4WhP(LoP>yRbrnex00fz@Jfk&7CsJLV2+kx$i5#epN3+%L0+eT1gF{HDs>$aa7kND zxoDJNCoLWjO-CsKOyY;2a6~g&uBozF^B~@gKiB6X4K}gzH0)$VS~Q_mXUEB^N&E{^ zIQtQF?m!*JQBkL`wP5UF2|Ee0j{UrJ+cPKz#AkyB_6`~WBoT(*A{v%B2IBfsX$PLHW;8CEjQRY zswKF8;QwF6QDfXPY6sRN$nzo;j!K@2tSOJ5)5&-VNY$TW^a+f#0trEP7QChvCBiOr@HA2q#j-H_AjZH*beew**! z`$&ZEM982_i;1JM4eVy%dzW#>s9pg>iO82ULqj~Ud&nABo{j&bl zKyDa9(opL=hTU8xbT-}>8g`%P{&&_da#X?N-#Oy3yW>E#`~1>x@YGkV!A9`5&w%MI zx1P|0mOu}4TKz8Z(ay)h$w*wipt{ke z&O_2QV#zPTx^ w5zI@xi@xj>-F>j?(aUfSFUF%&bPW{YqrOoHt^YbhVfG^YA~&oc70F2Sf&;S4c delta 1992 zcma)7TWlLe6rI`iuHR1LY!W|XCvoDqq_)$zs+vcuwB680UiHSbN!qxsvq?>zjafT= zM9>EaAt9lr8KFXd3PMQX0~D}86+);lSN$UmRU5WdsrW|hu_srch zckbN1vuF05m#-%*znaYkfZJcoZ=`C1pIgpANTYM`w!R;LS`Y#fL|08-YSe=I9j>m8 zkoW>n33k>1AW<%@Whi z_<*4H6L11_(H<}X1D4rS=n}I5vFrr;lpUk{16E|#4hBrTG&40Qr=*-HXBF#UbXWfn zAC2?>69cYP|UJ8W3Sp2ZzwAt3-u-ri|O^_Vm37?h0qS2-x|a&E_`L< zc+1a#RZAm!P1hUInmsE{_nhv5FL=+_vFz*kX7|0$;oF_VcYPysy(^sS!oc}~4|*3X zJ{-8qMSh_{<0wR%^zW6e`YE&Lk{G9#mWD#Z7DgK+p;LJz9xYd!72yTd``a_}&nMf-wdxKrpq@ zf*D0U&Fz!)ziU&lJgLu;W)FJ(0F^j0`Wg6pGG4M59tcI33d3kOD5rnm`?L2#NwT{AKG*PwbKTPqC6>B_04*h@>@`<8|eERDtQaEBgn_9a)_V(;RXCC9cq-1Zfx2L+nyY96z| z-f+os(X!xQ+;KUu_lr#M-PtR^Did)n!jdY zB>!FTMd&B>S2Vek8L_AwB1bt&NJA={l5mBkq$poNUE#2qR7S0Dz#wPPY&fzmNgRzC zSv-~!kH@oOQh}*rS;?obcn}iArCkZTn9nfD<^Kr3OTj^OuFdZFm_#IdDWAoFkJ)r0 zH!&?w$zF7=tu?0ZlDc2>WSGsK%;v-?nS2;!a*V2nM=@_THxmC7Aiqt9)B{J?IW;{# zlNPtgUttdKC&*qzJ0n7U3#?figOdIQGcPX}0}!k~)0`QpwUN)0MOa0@xTs9uCow5CM>i$4I5Ry@e{&|w8zlgP CGY~fb diff --git a/print_label.py b/print_label.py index ba4451a..375487d 100755 --- a/print_label.py +++ b/print_label.py @@ -41,38 +41,21 @@ def get_available_printers(): return list(printers.keys()) if printers else ["PDF"] elif SYSTEM == "Windows": - # Windows: Get both local and network printers + # Windows: Get local + connected printers (includes print server connections) try: printers = [] - # Get local printers + # PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS captures: + # - Locally installed printers + # - Printers connected from a print server (e.g. \\server\printer) try: - for printer_info in win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL): + flags = win32print.PRINTER_ENUM_LOCAL | win32print.PRINTER_ENUM_CONNECTIONS + for printer_info in win32print.EnumPrinters(flags): 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 + except Exception as e: + print(f"Error enumerating printers: {e}") # Add PDF as fallback option if "PDF" not in printers: @@ -266,22 +249,37 @@ def print_to_printer(printer_name, file_path): return True elif SYSTEM == "Windows": - # Windows: Use win32print or open with default printer + # Windows: Use win32print API for reliable printing (supports UNC paths) try: if WIN32_AVAILABLE: import win32print import win32api - # Print using the Windows API - win32api.ShellExecute(0, "print", file_path, f'/d:"{printer_name}"', ".", 0) - print(f"Label sent to printer: {printer_name}") + + # Set the target printer as default temporarily, then print + # This approach works reliably with both local and UNC printer paths + try: + old_default = win32print.GetDefaultPrinter() + except: + old_default = None + + try: + win32print.SetDefaultPrinter(printer_name) + win32api.ShellExecute(0, "print", file_path, None, ".", 0) + print(f"Label sent to printer: {printer_name}") + finally: + # Restore original default printer + if old_default: + try: + win32print.SetDefaultPrinter(old_default) + except: + pass return True else: # Fallback: Open with default printer if file_path.endswith('.pdf'): os.startfile(file_path, "print") else: - # For images, use default print application - subprocess.run([f'notepad', '/p', file_path], check=False) + subprocess.run(['notepad', '/p', file_path], check=False) print(f"Label sent to default printer") return True except Exception as e: