diff --git a/py_app/app/__pycache__/routes.cpython-312.pyc b/py_app/app/__pycache__/routes.cpython-312.pyc index a6d5be3..2a6fd2a 100644 Binary files a/py_app/app/__pycache__/routes.cpython-312.pyc and b/py_app/app/__pycache__/routes.cpython-312.pyc differ diff --git a/py_app/app/routes.py b/py_app/app/routes.py index f13794a..d40aa9b 100644 --- a/py_app/app/routes.py +++ b/py_app/app/routes.py @@ -1061,6 +1061,153 @@ For support, contact your system administrator. 'error': str(e) }), 500 +@bp.route('/create_service_package', methods=['POST']) +def create_service_package(): + """Create and serve ZIP package of Windows Print Service""" + import os + import zipfile + from flask import current_app, jsonify + + try: + # Path to the windows_print_service directory + service_dir = os.path.join(os.path.dirname(os.path.dirname(current_app.root_path)), 'windows_print_service') + print(f"Looking for service files in: {service_dir}") + + if not os.path.exists(service_dir): + return jsonify({ + 'success': False, + 'error': f'Windows service directory not found: {service_dir}' + }), 500 + + # Create static directory if it doesn't exist + static_dir = os.path.join(current_app.root_path, 'static') + os.makedirs(static_dir, exist_ok=True) + + zip_filename = 'quality_recticel_print_service.zip' + zip_path = os.path.join(static_dir, zip_filename) + + # Create ZIP file with Windows service package + with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf: + files_added = 0 + + # Add all service files to ZIP (prioritize native PowerShell solution) + for root, dirs, files in os.walk(service_dir): + for file in files: + # Include all relevant files, with focus on native PowerShell solution + if file.endswith(('.ps1', '.bat', '.md', '.json', '.js', '.html', '.css', '.png', '.txt')): + file_path = os.path.join(root, file) + # Create relative path for archive + arcname = os.path.relpath(file_path, service_dir) + + # Skip Python files in favor of PowerShell native solution + if file.endswith('.py') and not file.startswith('print_service'): + print(f"Skipping Python file (using native solution): {file_path}") + continue + + print(f"Adding service file: {file_path} as {arcname}") + zipf.write(file_path, arcname) + files_added += 1 + + # Add installation instructions for native PowerShell solution + installation_readme = """# Quality Recticel Windows Print Service - Native Edition + +## INSTALLATION INSTRUCTIONS (Native PowerShell - Zero Dependencies!) + +### Prerequisites: +- Windows 10/11 or Windows Server 2016+ +- Administrator privileges +- Google Chrome browser +- PowerShell (included with Windows) + +### Quick Installation (Under 3 Minutes): + +1. **Extract Files**: Extract this ZIP to any temporary location + ✅ No permanent installation directory needed - files are copied during installation + +2. **Install Native Service**: Right-click on 'install_native_service.bat' and select "Run as administrator" + ✅ Pure PowerShell implementation - no Python or external dependencies required + +3. **Install Chrome Extension**: + - Open Chrome → chrome://extensions/ + - Enable "Developer mode" + - Click "Load unpacked" → Select the 'chrome_extension' folder + +4. **Verify Installation**: Visit http://localhost:8765/health in your browser + Expected response: {"status": "healthy", "platform": "Windows PowerShell"} + +### What Gets Installed: +- ✅ Native Windows Print Service (PowerShell-based, zero dependencies) +- ✅ Auto-start service configuration +- ✅ Service recovery options (automatic restart) +- ✅ Comprehensive logging system + +### Files Included: +- 🔧 install_native_service.bat - Native PowerShell installer (RUN AS ADMIN) +- 🖥️ print_service.ps1 - Main PowerShell service (native Windows) +- 🗑️ uninstall_service.bat - Complete removal script +- 🌐 chrome_extension/ - Complete Chrome extension +- 📚 Documentation files (QUICK_SETUP_NATIVE.md, INSTALLATION_GUIDE.md, README.md) + +### Native Advantages: +- 🚀 No Python dependencies - pure PowerShell +- ⚡ Faster startup and lower memory usage +- 🛡️ Enterprise-ready with Microsoft components only +- 📦 Tiny footprint - minimal system impact + +### Support: +- 📖 Read QUICK_SETUP_NATIVE.md for 3-minute setup guide +- 📋 Read INSTALLATION_GUIDE.md for complete documentation +- 🛠️ Read README.md for technical details + +### Service URLs: +- Health Check: http://localhost:8765/health +- Printer List: http://localhost:8765/printers +- API Documentation: See README.md + +### Troubleshooting: +1. Service not starting? Run install_service.bat as Administrator +2. Can't connect? Check Windows Firewall (port 8765) +3. Chrome extension not working? Reload extension in chrome://extensions/ + +Installation takes ~5 minutes • Zero maintenance required +""" + zipf.writestr('INSTALLATION_README.txt', installation_readme) + files_added += 1 + + print(f"Total service files added to ZIP: {files_added}") + + # Verify ZIP was created + if os.path.exists(zip_path): + zip_size = os.path.getsize(zip_path) + print(f"Service ZIP file created: {zip_path}, size: {zip_size} bytes") + + if zip_size > 0: + return jsonify({ + 'success': True, + 'download_url': f'/static/{zip_filename}', + 'files_included': files_added, + 'zip_size': zip_size + }) + else: + return jsonify({ + 'success': False, + 'error': 'ZIP file was created but is empty' + }), 500 + else: + return jsonify({ + 'success': False, + 'error': 'Failed to create service ZIP file' + }), 500 + + except Exception as e: + print(f"Error creating service package: {e}") + import traceback + traceback.print_exc() + return jsonify({ + 'success': False, + 'error': str(e) + }), 500 + @bp.route('/test_extension_files') def test_extension_files(): """Test route to check extension files""" diff --git a/py_app/app/static/documentation/INSTALLATION_GUIDE.md b/py_app/app/static/documentation/INSTALLATION_GUIDE.md new file mode 100644 index 0000000..0b68622 --- /dev/null +++ b/py_app/app/static/documentation/INSTALLATION_GUIDE.md @@ -0,0 +1,361 @@ +# Quality Recticel Windows Print Service - Installation Guide + +## 📋 Overview + +The Quality Recticel Windows Print Service enables **silent PDF printing** directly from the web application through a Chrome extension. This system eliminates the need for manual PDF downloads and provides seamless label printing functionality. + +## 🏗️ System Architecture + +``` +Web Application (print_module.html) + ↓ +Windows Print Service (localhost:8765) + ↓ +Chrome Extension (Native Messaging) + ↓ +Windows Print System +``` + +## 📦 Package Contents + +``` +windows_print_service/ +├── print_service.py # Main Windows service (Flask API) +├── service_manager.py # Service installation & management +├── install_service.bat # Automated installation script +├── chrome_extension/ # Chrome extension files +│ ├── manifest.json # Extension configuration +│ ├── background.js # Service worker +│ ├── content.js # Page integration +│ ├── popup.html # Extension UI +│ ├── popup.js # Extension logic +│ └── icons/ # Extension icons +└── INSTALLATION_GUIDE.md # This documentation +``` + +## 🔧 Prerequisites + +### System Requirements +- **Operating System**: Windows 10/11 (64-bit) +- **Python**: Python 3.8 or higher +- **Browser**: Google Chrome (latest version) +- **Privileges**: Administrator access required for installation + +### Python Dependencies +The following packages will be installed automatically: +- `flask` - Web service framework +- `flask-cors` - Cross-origin resource sharing +- `requests` - HTTP client library +- `pywin32` - Windows service integration + +## 🚀 Installation Process + +### Step 1: Download and Extract Files + +1. Download the `windows_print_service` folder to your system +2. Extract to a permanent location (e.g., `C:\QualityRecticel\PrintService\`) +3. **Do not move or delete this folder after installation** + +### Step 2: Install Windows Service + +#### Method A: Automated Installation (Recommended) + +1. **Right-click** on `install_service.bat` +2. Select **"Run as administrator"** +3. Click **"Yes"** when Windows UAC prompt appears +4. Wait for installation to complete + +#### Method B: Manual Installation + +If the automated script fails, follow these steps: + +```bash +# Open Command Prompt as Administrator +cd C:\path\to\windows_print_service + +# Install Python dependencies +pip install flask flask-cors requests pywin32 + +# Install Windows service +python service_manager.py install + +# Add firewall exception +netsh advfirewall firewall add rule name="Quality Recticel Print Service" dir=in action=allow protocol=TCP localport=8765 + +# Create Chrome extension registry entry +reg add "HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.qualityrecticel.printservice" /ve /d "%cd%\chrome_extension\manifest.json" /f +``` + +### Step 3: Install Chrome Extension + +1. Open **Google Chrome** +2. Navigate to `chrome://extensions/` +3. Enable **"Developer mode"** (toggle in top-right corner) +4. Click **"Load unpacked"** +5. Select the `chrome_extension` folder +6. Verify the extension appears with a printer icon + +### Step 4: Verify Installation + +#### Check Windows Service Status + +1. Press `Win + R`, type `services.msc`, press Enter +2. Look for **"Quality Recticel Print Service"** +3. Status should show **"Running"** +4. Startup type should be **"Automatic"** + +#### Test API Endpoints + +Open a web browser and visit: +- **Health Check**: `http://localhost:8765/health` +- **Printer List**: `http://localhost:8765/printers` + +Expected response for health check: +```json +{ + "status": "healthy", + "service": "Quality Recticel Print Service", + "version": "1.0", + "timestamp": "2025-09-21T10:30:00" +} +``` + +#### Test Chrome Extension + +1. Click the extension icon in Chrome toolbar +2. Verify it shows "Service Status: Connected ✅" +3. Check that printers are listed +4. Try the "Test Print" button + +## 🔄 Web Application Integration + +The web application automatically detects the Windows service and adapts the user interface: + +### Service Available (Green Button) +- Button text: **"🖨️ Print Labels (Silent)"** +- Functionality: Direct printing to default printer +- User experience: Click → Labels print immediately + +### Service Unavailable (Blue Button) +- Button text: **"📄 Generate PDF"** +- Functionality: PDF download for manual printing +- User experience: Click → PDF downloads to browser + +### Detection Logic +```javascript +// Automatic service detection on page load +const response = await fetch('http://localhost:8765/health'); +if (response.ok) { + // Service available - enable silent printing +} else { + // Service unavailable - fallback to PDF download +} +``` + +## 🛠️ Configuration + +### Service Configuration + +The service runs with the following default settings: + +| Setting | Value | Description | +|---------|-------|-------------| +| **Port** | 8765 | Local API port | +| **Host** | localhost | Service binding | +| **Startup** | Automatic | Starts with Windows | +| **Printer** | Default | Uses system default printer | +| **Copies** | 1 | Default print copies | + +### Chrome Extension Permissions + +The extension requires these permissions: +- `printing` - Access to printer functionality +- `nativeMessaging` - Communication with Windows service +- `activeTab` - Access to current webpage +- `storage` - Save extension settings + +## 🔍 Troubleshooting + +### Common Issues + +#### 1. Service Not Starting +**Symptoms**: API not accessible at localhost:8765 +**Solutions**: +```bash +# Check service status +python -c "from service_manager import service_status; service_status()" + +# Restart service manually +python service_manager.py restart + +# Check Windows Event Viewer for service errors +``` + +#### 2. Chrome Extension Not Working +**Symptoms**: Extension shows "Service Status: Disconnected ❌" +**Solutions**: +- Verify Windows service is running +- Check firewall settings (port 8765 must be open) +- Reload the Chrome extension +- Restart Chrome browser + +#### 3. Firewall Blocking Connection +**Symptoms**: Service runs but web page can't connect +**Solutions**: +```bash +# Add firewall rule manually +netsh advfirewall firewall add rule name="Quality Recticel Print Service" dir=in action=allow protocol=TCP localport=8765 + +# Or disable Windows Firewall temporarily to test +``` + +#### 4. Permission Denied Errors +**Symptoms**: Installation fails with permission errors +**Solutions**: +- Ensure running as Administrator +- Check Windows UAC settings +- Verify Python installation permissions + +#### 5. Print Jobs Not Processing +**Symptoms**: API accepts requests but nothing prints +**Solutions**: +- Check default printer configuration +- Verify printer drivers are installed +- Test manual printing from other applications +- Check Windows Print Spooler service + +### Log Files + +Check these locations for troubleshooting: + +| Component | Log Location | +|-----------|--------------| +| **Windows Service** | `print_service.log` (same folder as service) | +| **Chrome Extension** | Chrome DevTools → Extensions → Background page | +| **Windows Event Log** | Event Viewer → Windows Logs → System | + +### Diagnostic Commands + +```bash +# Check service status +python service_manager.py status + +# Test API manually +curl http://localhost:8765/health + +# List available printers +curl http://localhost:8765/printers + +# Check Windows service +sc query QualityRecticelPrintService + +# Check listening ports +netstat -an | findstr :8765 +``` + +## 🔄 Maintenance + +### Updating the Service + +1. Stop the current service: +```bash +python service_manager.py stop +``` + +2. Replace service files with new versions + +3. Restart the service: +```bash +python service_manager.py start +``` + +### Uninstalling + +#### Remove Chrome Extension +1. Go to `chrome://extensions/` +2. Find "Quality Recticel Print Service" +3. Click "Remove" + +#### Remove Windows Service +```bash +# Run as Administrator +python service_manager.py uninstall +``` + +#### Remove Firewall Rule +```bash +netsh advfirewall firewall delete rule name="Quality Recticel Print Service" +``` + +## 📞 Support Information + +### API Endpoints Reference + +| Endpoint | Method | Purpose | +|----------|--------|---------| +| `/health` | GET | Service health check | +| `/printers` | GET | List available printers | +| `/print/pdf` | POST | Print PDF from URL | +| `/print/silent` | POST | Silent print with metadata | + +### Request Examples + +**Silent Print Request**: +```json +POST /print/silent +{ + "pdf_url": "http://localhost:5000/generate_labels_pdf/123", + "printer_name": "default", + "copies": 1, + "silent": true, + "order_id": "123", + "quantity": "10" +} +``` + +**Expected Response**: +```json +{ + "success": true, + "message": "Print job sent successfully", + "job_id": "print_20250921_103000", + "printer": "HP LaserJet Pro", + "timestamp": "2025-09-21T10:30:00" +} +``` + +## 📚 Technical Details + +### Service Architecture +- **Framework**: Flask (Python) +- **Service Type**: Windows Service (pywin32) +- **Communication**: HTTP REST API + Native Messaging +- **Security**: Localhost binding only (127.0.0.1:8765) + +### Chrome Extension Architecture +- **Manifest Version**: 3 +- **Service Worker**: Handles background print requests +- **Content Script**: Integrates with Quality Recticel web pages +- **Native Messaging**: Communicates with Windows service + +### Security Considerations +- Service only accepts local connections (localhost) +- No external network access required +- Chrome extension runs in sandboxed environment +- Windows service runs with system privileges (required for printing) + +--- + +## 📋 Quick Start Checklist + +- [ ] Download `windows_print_service` folder +- [ ] Right-click `install_service.bat` → "Run as administrator" +- [ ] Install Chrome extension from `chrome_extension` folder +- [ ] Verify service at `http://localhost:8765/health` +- [ ] Test printing from Quality Recticel web application + +**Installation Time**: ~5 minutes +**User Training Required**: Minimal (automatic detection and fallback) +**Maintenance**: Zero (auto-starts with Windows) + +For additional support, check the log files and diagnostic commands listed above. \ No newline at end of file diff --git a/py_app/app/static/documentation/QUICK_SETUP.md b/py_app/app/static/documentation/QUICK_SETUP.md new file mode 100644 index 0000000..e48da2b --- /dev/null +++ b/py_app/app/static/documentation/QUICK_SETUP.md @@ -0,0 +1,69 @@ +# 🚀 Quality Recticel Print Service - Quick Setup + +## 📦 What You Get +- **Silent PDF Printing** - No more manual downloads! +- **Automatic Detection** - Smart fallback when service unavailable +- **Zero Configuration** - Works out of the box + +## ⚡ 2-Minute Installation + +### Step 1: Install Windows Service +1. **Right-click** `install_service.bat` +2. Select **"Run as administrator"** +3. Click **"Yes"** and wait for completion + +### Step 2: Install Chrome Extension +1. Open Chrome → `chrome://extensions/` +2. Enable **"Developer mode"** +3. Click **"Load unpacked"** → Select `chrome_extension` folder + +### Step 3: Verify Installation +- Visit: `http://localhost:8765/health` +- Should see: `{"status": "healthy"}` + +## 🎯 How It Works + +| Service Status | Button Appearance | What Happens | +|---------------|-------------------|--------------| +| **Running** ✅ | 🖨️ **Print Labels (Silent)** (Green) | Direct printing | +| **Not Running** ❌ | 📄 **Generate PDF** (Blue) | PDF download | + +## ⚠️ Troubleshooting + +| Problem | Solution | +|---------|----------| +| **Service won't start** | Run `install_service.bat` as Administrator | +| **Chrome extension not working** | Reload extension in `chrome://extensions/` | +| **Can't connect to localhost:8765** | Check Windows Firewall (port 8765) | +| **Nothing prints** | Verify default printer is set up | + +## 🔧 Management Commands + +```bash +# Check service status +python service_manager.py status + +# Restart service +python service_manager.py restart + +# Uninstall service +python service_manager.py uninstall +``` + +## 📍 Important Notes + +- ⚡ **Auto-starts** with Windows - no manual intervention needed +- 🔒 **Local only** - service only accessible from same computer +- 🖨️ **Uses default printer** - configure your default printer in Windows +- 💾 **Don't move files** after installation - keep folder in same location + +## 🆘 Quick Support + +**Service API**: `http://localhost:8765` +**Health Check**: `http://localhost:8765/health` +**Printer List**: `http://localhost:8765/printers` + +**Log File**: `print_service.log` (same folder as installation) + +--- +*Installation takes ~5 minutes • Zero maintenance required • Works with existing Quality Recticel web application* \ No newline at end of file diff --git a/py_app/app/static/documentation/README.md b/py_app/app/static/documentation/README.md new file mode 100644 index 0000000..01a49f3 --- /dev/null +++ b/py_app/app/static/documentation/README.md @@ -0,0 +1,348 @@ +# Quality Recticel Windows Print Service + +## 🏗️ Technical Architecture + +Local Windows service providing REST API for silent PDF printing via Chrome extension integration. + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Quality Recticel Web App │ +│ (print_module.html) │ +└─────────────────────┬───────────────────────────────────────┘ + │ HTTP Request + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Windows Print Service │ +│ (localhost:8765) │ +│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │ +│ │ Flask │ │ CORS │ │ PDF Handler │ │ +│ │ Server │ │ Support │ │ │ │ +│ └─────────────┘ └──────────────┘ └─────────────────┘ │ +└─────────────────────┬───────────────────────────────────────┘ + │ Native Messaging + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Chrome Extension │ +│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │ +│ │ Background │ │ Content │ │ Popup │ │ +│ │ Service │ │ Script │ │ UI │ │ +│ │ Worker │ │ │ │ │ │ +│ └─────────────┘ └──────────────┘ └─────────────────┘ │ +└─────────────────────┬───────────────────────────────────────┘ + │ Windows API + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Windows Print System │ +└─────────────────────────────────────────────────────────────┘ +``` + +## 📁 Project Structure + +``` +windows_print_service/ +├── 📄 print_service.py # Main Flask service +├── 📄 service_manager.py # Windows service wrapper +├── 📄 install_service.bat # Installation script +├── 📄 INSTALLATION_GUIDE.md # Complete documentation +├── 📄 QUICK_SETUP.md # User quick reference +├── 📄 README.md # This file +└── 📁 chrome_extension/ # Chrome extension + ├── 📄 manifest.json # Extension manifest v3 + ├── 📄 background.js # Service worker + ├── 📄 content.js # Page content integration + ├── 📄 popup.html # Extension popup UI + ├── 📄 popup.js # Popup functionality + └── 📁 icons/ # Extension icons +``` + +## 🚀 API Endpoints + +### Base URL: `http://localhost:8765` + +| Endpoint | Method | Description | Request Body | Response | +|----------|--------|-------------|--------------|----------| +| `/health` | GET | Service health check | None | `{"status": "healthy", ...}` | +| `/printers` | GET | List available printers | None | `{"printers": [...]}` | +| `/print/pdf` | POST | Print PDF from URL | `{"url": "...", "printer": "..."}` | `{"success": true, ...}` | +| `/print/silent` | POST | Silent print with metadata | `{"pdf_url": "...", "order_id": "..."}` | `{"success": true, ...}` | + +### Example API Usage + +```javascript +// Health Check +const health = await fetch('http://localhost:8765/health'); +const status = await health.json(); + +// Silent Print +const printRequest = { + pdf_url: 'http://localhost:5000/generate_labels_pdf/123', + printer_name: 'default', + copies: 1, + silent: true, + order_id: '123', + quantity: '10' +}; + +const response = await fetch('http://localhost:8765/print/silent', { + method: 'POST', + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify(printRequest) +}); +``` + +## 🔧 Development Setup + +### Prerequisites +- Python 3.8+ +- Windows 10/11 +- Chrome Browser +- Administrator privileges + +### Local Development + +```bash +# Clone/download the project +cd windows_print_service + +# Install dependencies +pip install flask flask-cors requests pywin32 + +# Run development server (not as service) +python print_service.py + +# Install as Windows service +python service_manager.py install + +# Service management +python service_manager.py start +python service_manager.py stop +python service_manager.py restart +python service_manager.py uninstall +``` + +### Chrome Extension Development + +```bash +# Load extension in Chrome +chrome://extensions/ → Developer mode ON → Load unpacked + +# Debug extension +chrome://extensions/ → Details → Background page (for service worker) +chrome://extensions/ → Details → Inspect views (for popup) +``` + +## 📋 Configuration + +### Service Configuration (`print_service.py`) + +```python +class WindowsPrintService: + def __init__(self, host='127.0.0.1', port=8765): + self.host = host # Localhost binding only + self.port = port # Service port + self.app = Flask(__name__) +``` + +### Chrome Extension Permissions (`manifest.json`) + +```json +{ + "permissions": [ + "printing", // Access to printer API + "nativeMessaging", // Communication with Windows service + "activeTab", // Current tab access + "storage" // Extension settings storage + ] +} +``` + +## 🔄 Integration Flow + +### 1. Service Detection +```javascript +// Web page detects service availability +const isServiceAvailable = await checkServiceHealth(); +updatePrintButton(isServiceAvailable); +``` + +### 2. Print Request Flow +``` +User clicks print → Web app → Windows service → Chrome extension → Printer +``` + +### 3. Fallback Mechanism +``` +Service unavailable → Fallback to PDF download → Manual printing +``` + +## 🛠️ Customization + +### Adding New Print Options + +```python +# In print_service.py +@app.route('/print/custom', methods=['POST']) +def print_custom(): + data = request.json + # Custom print logic here + return jsonify({'success': True}) +``` + +### Modifying Chrome Extension + +```javascript +// In background.js - Add new message handler +chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { + if (message.type === 'CUSTOM_PRINT') { + // Custom print logic + } +}); +``` + +### Web Application Integration + +```javascript +// In print_module.html - Modify print function +async function customPrintFunction(orderId) { + const response = await fetch('http://localhost:8765/print/custom', { + method: 'POST', + body: JSON.stringify({orderId, customOptions: {...}}) + }); +} +``` + +## 🧪 Testing + +### Unit Tests (Future Enhancement) + +```python +# test_print_service.py +import unittest +from print_service import WindowsPrintService + +class TestPrintService(unittest.TestCase): + def test_health_endpoint(self): + # Test implementation + pass +``` + +### Manual Testing Checklist + +- [ ] Service starts automatically on Windows boot +- [ ] API endpoints respond correctly +- [ ] Chrome extension loads without errors +- [ ] Print jobs execute successfully +- [ ] Fallback works when service unavailable +- [ ] Firewall allows port 8765 traffic + +## 📊 Monitoring & Logging + +### Log Files +- **Service Log**: `print_service.log` (Flask application logs) +- **Windows Event Log**: Windows Services logs +- **Chrome DevTools**: Extension console logs + +### Health Monitoring + +```python +# Monitor service health +import requests +try: + response = requests.get('http://localhost:8765/health', timeout=5) + if response.status_code == 200: + print("✅ Service healthy") +except: + print("❌ Service unavailable") +``` + +## 🔒 Security Considerations + +### Network Security +- **Localhost Only**: Service binds to 127.0.0.1 (no external access) +- **No Authentication**: Relies on local machine security +- **Firewall Rule**: Port 8765 opened for local connections only + +### Chrome Extension Security +- **Manifest V3**: Latest security standards +- **Minimal Permissions**: Only necessary permissions requested +- **Sandboxed**: Runs in Chrome's security sandbox + +### Windows Service Security +- **System Service**: Runs with appropriate Windows service privileges +- **Print Permissions**: Requires printer access (normal for print services) + +## 🚀 Deployment + +### Production Deployment + +1. **Package Distribution**: +```bash +# Create deployment package +zip -r quality_recticel_print_service.zip windows_print_service/ +``` + +2. **Installation Script**: Use `install_service.bat` for end users + +3. **Group Policy Deployment**: Deploy Chrome extension via enterprise policies + +### Enterprise Considerations + +- **Silent Installation**: Modify `install_service.bat` for unattended install +- **Registry Deployment**: Pre-configure Chrome extension registry entries +- **Network Policies**: Ensure firewall policies allow localhost:8765 + +## 📚 Dependencies + +### Python Packages +``` +flask>=2.3.0 # Web framework +flask-cors>=4.0.0 # CORS support +requests>=2.31.0 # HTTP client +pywin32>=306 # Windows service integration +``` + +### Chrome APIs +- `chrome.printing.*` - Printing functionality +- `chrome.runtime.*` - Extension messaging +- `chrome.nativeMessaging.*` - Native app communication + +## 🐛 Debugging + +### Common Debug Commands + +```bash +# Check service status +sc query QualityRecticelPrintService + +# Test API manually +curl http://localhost:8765/health + +# Check listening ports +netstat -an | findstr :8765 + +# View service logs +type print_service.log +``` + +### Chrome Extension Debugging + +```javascript +// In background.js - Add debug logging +console.log('Print request received:', message); + +// In popup.js - Test API connection +fetch('http://localhost:8765/health') + .then(r => r.json()) + .then(data => console.log('Service status:', data)); +``` + +--- + +## 📄 License & Support + +**Project**: Quality Recticel Print Service +**Version**: 1.0 +**Compatibility**: Windows 10/11, Chrome 88+ +**Maintenance**: Zero-maintenance after installation + +For technical support, refer to `INSTALLATION_GUIDE.md` troubleshooting section. \ No newline at end of file diff --git a/py_app/app/templates/download_extension.html b/py_app/app/templates/download_extension.html index 45beacc..953e3f6 100644 --- a/py_app/app/templates/download_extension.html +++ b/py_app/app/templates/download_extension.html @@ -1,103 +1,250 @@ {% extends "base.html" %} -{% block title %}Chrome Extension Download{% endblock %} +{% block title %}Quality Recticel Print Service Downloads{% endblock %} {% block content %}
Professional Silent Printing Solution for Windows
+install_service.bat - One-click installerprint_service.py - Main service applicationservice_manager.py - Service managementchrome_extension/ - Browser extensioninstall_service.batchrome://extensions/2-minute installation guide with visual steps and troubleshooting tips.
+ + 📖 Quick Setup +Extract the downloaded ZIP file to a folder on your computer (e.g., Desktop/print_extension)
-In Google Chrome, go to: chrome://extensions/
Toggle the "Developer mode" switch in the top-right corner
-Click "Load unpacked" and select the folder where you extracted the files
-The extension icon 🖨️ should appear in your Chrome toolbar
-Comprehensive installation documentation with troubleshooting and API reference.
+ + 📚 Full Documentation + +Developer documentation with API specs and customization examples.
+ + 🔧 Developer Docs + +chrome://settings/printingInstallation takes ~5 minutes • Zero maintenance required
+