""" Alternative PDF printing using GhostScript for superior quality. GhostScript maintains vector quality better than SumatraPDF. """ import subprocess import os import sys def find_ghostscript(): """ Find GhostScript installation on Windows. Returns: str: Path to gswin64c.exe or gswin32c.exe, or None if not found """ possible_paths = [ r"C:\Program Files\gs\gs10.04.0\bin\gswin64c.exe", r"C:\Program Files\gs\gs10.03.1\bin\gswin64c.exe", r"C:\Program Files\gs\gs10.03.0\bin\gswin64c.exe", r"C:\Program Files\gs\gs10.02.1\bin\gswin64c.exe", r"C:\Program Files\gs\gs10.02.0\bin\gswin64c.exe", r"C:\Program Files\gs\gs10.01.2\bin\gswin64c.exe", r"C:\Program Files\gs\gs10.01.1\bin\gswin64c.exe", r"C:\Program Files\gs\gs10.01.0\bin\gswin64c.exe", r"C:\Program Files (x86)\gs\gs10.04.0\bin\gswin32c.exe", r"C:\Program Files (x86)\gs\gs10.03.1\bin\gswin32c.exe", r"C:\Program Files (x86)\gs\gs10.03.0\bin\gswin32c.exe", ] # Check standard locations for path in possible_paths: if os.path.exists(path): return path # Search in gs directory for program_files in [r"C:\Program Files", r"C:\Program Files (x86)"]: gs_base = os.path.join(program_files, "gs") if os.path.exists(gs_base): for version_dir in os.listdir(gs_base): for exe_name in ["gswin64c.exe", "gswin32c.exe"]: gs_path = os.path.join(gs_base, version_dir, "bin", exe_name) if os.path.exists(gs_path): return gs_path return None def print_pdf_with_ghostscript(pdf_path, printer_name): """ Print PDF using GhostScript for maximum quality. GhostScript renders PDF at high resolution and maintains vector quality. Args: pdf_path (str): Path to PDF file printer_name (str): Name of the printer Returns: bool: True if successful """ gs_path = find_ghostscript() if not gs_path: print("GhostScript not found. Install from: https://ghostscript.com/releases/gsdnld.html") return False try: # GhostScript command for high-quality printing # -dNOPAUSE: Don't pause between pages # -dBATCH: Exit after processing # -sDEVICE=mswinpr2: Windows printer device (high quality) # -dNOSAFER: Allow file operations # -r1200: 1200 DPI resolution # -sOutputFile: Printer name with %printer% syntax cmd = [ gs_path, '-dNOPAUSE', '-dBATCH', '-sDEVICE=mswinpr2', # Windows printer with high quality '-dNOSAFER', '-r1200', # 1200 DPI - matches our PDF quality '-dTextAlphaBits=4', # Anti-aliasing for text '-dGraphicsAlphaBits=4', # Anti-aliasing for graphics f'-sOutputFile=%printer%{printer_name}', pdf_path ] print(f"Printing with GhostScript at 1200 DPI...") result = subprocess.run( cmd, check=True, capture_output=True, text=True, creationflags=subprocess.CREATE_NO_WINDOW if os.name == 'nt' else 0 ) print(f"✅ Label sent to printer via GhostScript: {printer_name}") return True except subprocess.CalledProcessError as e: print(f"GhostScript print failed: {e}") if e.stderr: print(f"Error details: {e.stderr}") return False except Exception as e: print(f"Error printing with GhostScript: {e}") return False def check_ghostscript_available(): """ Check if GhostScript is available. Returns: tuple: (available: bool, path: str or None) """ gs_path = find_ghostscript() return (gs_path is not None, gs_path) if __name__ == "__main__": # Test GhostScript availability available, gs_path = check_ghostscript_available() if available: print(f"✅ GhostScript found at: {gs_path}") print("GhostScript is available for high-quality PDF printing") else: print("❌ GhostScript not found") print("\nTo install GhostScript:") print("1. Download from: https://ghostscript.com/releases/gsdnld.html") print("2. Install the Windows 64-bit version") print("3. Restart your application") print("\nGhostScript provides superior print quality by:") print(" • Maintaining vector graphics quality") print(" • Rendering at full 1200 DPI") print(" • Better text anti-aliasing")