Files
quality_recticel/windows_print_service/README.md

273 lines
10 KiB
Markdown

# Quality Recticel Print Service - Native Windows
A lightweight Windows service that provides local HTTP API for silent PDF printing from the Quality Recticel web application. This is a **native PowerShell implementation** with zero external dependencies.
## 🏗️ Technical Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ Quality Recticel Web App │
│ (print_module.html) │
└─────────────────────┬───────────────────────────────────────┘
│ HTTP Request
┌─────────────────────────────────────────────────────────────┐
│ Native PowerShell Print Service │
│ (localhost:8765) │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ PowerShell │ │ CORS │ │ PDF Handler │ │
│ │ HTTP Server │ │ Support │ │ & WMI │ │
│ └─────────────┘ └──────────────┘ └─────────────────┘ │
└─────────────────────┬───────────────────────────────────────┘
│ Native Messaging (Optional)
┌─────────────────────────────────────────────────────────────┐
│ Chrome Extension │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ Background │ │ Content │ │ Popup │ │
│ │ Service │ │ Script │ │ UI │ │
│ │ Worker │ │ │ │ │ │
│ └─────────────┘ └──────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## Overview
This service creates a local HTTP server on `localhost:8765` that receives print requests from the Quality Recticel web application and handles silent PDF printing to local printers.
## Key Features
- **🚀 Native Windows**: Pure PowerShell implementation - no Python or external dependencies
- **🖨️ Silent Printing**: Print PDFs without showing print dialogs
- **🔧 Printer Management**: List and select available local printers
- **⚙️ Windows Service**: Runs automatically in the background
- **🌐 Chrome Extension Integration**: Works seamlessly with the Quality Recticel Chrome extension
- **📡 REST API**: Simple HTTP endpoints for printing operations
- **📝 Comprehensive Logging**: Detailed service logs for troubleshooting
## Quick Installation
### Prerequisites
- Windows 10/11 or Windows Server 2016+
- Administrator privileges
- PowerShell (included with Windows)
- Chrome browser (for the extension)
### Install Steps
1. **Download Service Package**
- Download the complete service package from the Quality Recticel system
- Extract all files to a temporary folder
2. **Run Native Installer**
```batch
# Right-click and "Run as administrator"
install_native_service.bat
```
3. **Install Chrome Extension**
- Open Chrome and go to `chrome://extensions/`
- Enable "Developer mode"
- Click "Load unpacked" and select the `chrome_extension` folder
4. **Test Installation**
- Open your browser to: http://localhost:8765/health
- You should see a JSON response indicating the service is healthy
## Service Architecture
### Native PowerShell Service
- **No Dependencies**: Uses only built-in Windows components
- **HTTP Listener**: .NET HttpListener for web requests
- **WMI Integration**: Windows Management Instrumentation for printer access
- **Service Integration**: Native Windows Service Control Manager
### File Structure
```
C:\Program Files\QualityRecticel\PrintService\
├── print_service.ps1 # Main PowerShell service script
└── print_service.log # Service activity log
```
## API Endpoints
### Health Check
```http
GET http://localhost:8765/health
```
**Response:**
```json
{
"status": "healthy",
"service": "Quality Recticel Print Service",
"version": "1.0",
"timestamp": "2024-01-15 14:30:25",
"platform": "Windows PowerShell"
}
```
### List Printers
```http
GET http://localhost:8765/printers
```
**Response:**
```json
{
"success": true,
"printers": [
{
"name": "HP LaserJet Pro",
"driver": "HP Universal Printing PCL 6",
"port": "IP_192.168.1.100",
"is_default": true,
"status": 3
}
],
"count": 1
}
```
### Print PDF
```http
POST http://localhost:8765/print/pdf
POST http://localhost:8765/print/silent
Content-Type: application/json
{
"pdf_url": "https://example.com/document.pdf",
"printer_name": "HP LaserJet Pro",
"copies": 1
}
```
**Response:**
```json
{
"success": true,
"message": "Print job sent successfully",
"printer": "HP LaserJet Pro",
"timestamp": "2024-01-15 14:30:25"
}
```
## Service Management
### Using Service Control Manager
```batch
# Start service
sc start QualityRecticelPrintService
# Stop service
sc stop QualityRecticelPrintService
# Check status
sc query QualityRecticelPrintService
# Restart service
sc stop QualityRecticelPrintService && sc start QualityRecticelPrintService
```
### Using Services GUI
1. Press `Windows + R`, type `services.msc`
2. Find "Quality Recticel Print Service"
3. Right-click for start/stop/restart options
### View Logs
Service logs are automatically written to:
```
C:\Program Files\QualityRecticel\PrintService\print_service.log
```
## Troubleshooting
### Service Won't Start
1. **Check Administrator Rights**: Ensure installer was run as Administrator
2. **PowerShell Execution Policy**: Verify PowerShell execution policy allows scripts
```powershell
Get-ExecutionPolicy
# Should be RemoteSigned or Unrestricted
```
3. **Port Conflict**: Check if port 8765 is already in use
```cmd
netstat -ano | findstr :8765
```
4. **Service Logs**: Check the log file for detailed error messages
### Printing Issues
1. **Printer Access**: Verify printers are accessible from Windows services
2. **PDF Access**: Ensure PDF URLs are accessible from the service context
3. **Print Queue**: Check Windows print queue for stuck jobs
4. **Permissions**: Verify service has permission to access printers
### Chrome Extension Issues
1. **Service Connection**: Test http://localhost:8765/health in browser
2. **Extension Loading**: Verify extension is properly loaded in Chrome
3. **CORS**: Service includes proper CORS headers for browser access
4. **Console Errors**: Check browser console for JavaScript errors
## Security Features
- **Localhost Only**: Service only accepts connections from 127.0.0.1/localhost
- **No External Access**: No outbound network requirements except for PDF downloads
- **Temporary Files**: PDF downloads are cleaned up automatically
- **Service Account**: Runs with minimal required privileges
- **CORS Protection**: Proper cross-origin resource sharing headers
## Uninstallation
### Automated Uninstall
```batch
# Right-click and "Run as administrator"
uninstall_service.bat
```
### Manual Uninstall
```batch
# Stop and delete service
sc stop QualityRecticelPrintService
sc delete QualityRecticelPrintService
# Remove files (optional)
rmdir /s "C:\Program Files\QualityRecticel"
```
## Advantages of Native Solution
✅ **Zero Dependencies**: No Python, Flask, or external packages required
✅ **Faster Installation**: No package downloads or environment setup
✅ **Better Integration**: Native Windows service with proper lifecycle management
✅ **Smaller Footprint**: Minimal disk space and memory usage
✅ **Enterprise Ready**: Uses only trusted Windows components
✅ **Easier Deployment**: Single installer with no prerequisites
## Development Notes
### PowerShell Service Implementation
The service uses PowerShell's built-in capabilities:
- `System.Net.HttpListener` for HTTP server functionality
- `Get-WmiObject Win32_Printer` for printer enumeration
- `System.Net.WebClient` for PDF downloads
- Native Windows service architecture
### Why PowerShell vs Python?
- **Deployment**: No need to install Python runtime or pip packages
- **Security**: Uses only Microsoft-signed components
- **Performance**: Faster startup and lower memory usage
- **Maintenance**: Easier to troubleshoot with native Windows tools
- **Enterprise**: Better compliance with corporate security policies
## Support
For issues or questions:
1. Check the troubleshooting section above
2. Review service logs at `C:\Program Files\QualityRecticel\PrintService\print_service.log`
3. Test individual endpoints using browser or curl
4. Contact Quality Recticel IT support with log details
## File Inventory
- `install_native_service.bat` - Service installer (run as Administrator)
- `uninstall_service.bat` - Service removal script
- `print_service.ps1` - Main PowerShell service implementation
- `chrome_extension/` - Chrome extension files (optional)
- `README.md` - This documentation file