updated
This commit is contained in:
@@ -8,8 +8,11 @@
|
||||
<div class="row justify-content-center mb-4">
|
||||
<div class="col-md-12">
|
||||
<div class="text-center">
|
||||
<h1 class="display-4">🖨️ Quality Recticel Print Service</h1>
|
||||
<p class="lead">Professional Silent Printing Solution for Windows</p>
|
||||
<h1 class="display-4">🖨️ Quality Recticel Print Extension</h1>
|
||||
<p class="lead">Simple & Robust Chrome Extension for PDF Printing</p>
|
||||
<div class="alert alert-success mx-auto" style="max-width: 600px;">
|
||||
<strong>✨ NEW SIMPLIFIED APPROACH:</strong> No Windows service needed! Just install the Chrome extension and print directly from your browser.
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -19,28 +22,28 @@
|
||||
<div class="col-md-10">
|
||||
<div class="card border-primary">
|
||||
<div class="card-header bg-primary text-white">
|
||||
<h3 class="mb-0"><EFBFBD> Complete Printing Solution</h3>
|
||||
<h3 class="mb-0">🚀 Simple Chrome Extension Solution</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<h5>🏆 What You Get:</h5>
|
||||
<ul>
|
||||
<li>✅ <strong>Silent PDF Printing</strong> - No manual downloads</li>
|
||||
<li>✅ <strong>Automatic Detection</strong> - Smart service fallback</li>
|
||||
<li>✅ <strong>Zero Configuration</strong> - Works out of the box</li>
|
||||
<li>✅ <strong>Auto-Start Service</strong> - Boots with Windows</li>
|
||||
<li>✅ <strong>Professional Integration</strong> - Seamless workflow</li>
|
||||
<li>✅ <strong>Direct PDF Printing</strong> - Uses browser's print dialog</li>
|
||||
<li>✅ <strong>Zero Configuration</strong> - Works immediately after install</li>
|
||||
<li>✅ <strong>Cross-Platform</strong> - Works on Windows, Mac, Linux</li>
|
||||
<li>✅ <strong>No External Services</strong> - No Windows service needed</li>
|
||||
<li>✅ <strong>Robust Fallback</strong> - Downloads PDF if extension unavailable</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h5>🔧 System Components:</h5>
|
||||
<h5>🔧 How It Works:</h5>
|
||||
<ul>
|
||||
<li>🖥️ <strong>Windows Print Service</strong> - Local API (localhost:8765)</li>
|
||||
<li>🌐 <strong>Chrome Extension</strong> - Browser integration</li>
|
||||
<li>📄 <strong>Web Integration</strong> - Smart button detection</li>
|
||||
<li>🔄 <strong>Fallback System</strong> - PDF download backup</li>
|
||||
<li>🛡️ <strong>Security</strong> - Local-only connections</li>
|
||||
<li>🌐 <strong>Chrome Extension</strong> - Simple browser integration</li>
|
||||
<li>📄 <strong>Hidden Tab Method</strong> - Opens PDF in background tab</li>
|
||||
<li><EFBFBD>️ <strong>Native Print Dialog</strong> - User controls printer selection</li>
|
||||
<li>🔄 <strong>Auto Cleanup</strong> - Closes tab after printing</li>
|
||||
<li>🛡️ <strong>Secure</strong> - No external connections required</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -51,85 +54,45 @@
|
||||
|
||||
<!-- Download Cards Row -->
|
||||
<div class="row justify-content-center">
|
||||
<!-- Windows Service Card -->
|
||||
<div class="col-md-5 mb-4">
|
||||
<!-- Chrome Extension Card - NOW THE ONLY COMPONENT NEEDED -->
|
||||
<div class="col-md-8 mb-4">
|
||||
<div class="card h-100 border-success">
|
||||
<div class="card-header bg-success text-white text-center">
|
||||
<h4 class="mb-0">🖥️ Windows Print Service</h4>
|
||||
<small>Core printing engine</small>
|
||||
<h4 class="mb-0">🌐 Chrome Extension - All You Need!</h4>
|
||||
<small>Simple browser-based printing solution</small>
|
||||
</div>
|
||||
<div class="card-body d-flex flex-column">
|
||||
<div class="alert alert-success">
|
||||
<strong>🚀 Install First:</strong> The Windows service provides the printing API and must be installed before the Chrome extension.
|
||||
<strong>🎉 SIMPLIFIED:</strong> Just install this Chrome extension - no Windows service needed!
|
||||
</div>
|
||||
|
||||
<h5>📦 Package Contents:</h5>
|
||||
<h5>🎯 Key Features:</h5>
|
||||
<ul>
|
||||
<li>🔧 <code>install_service.bat</code> - One-click installer</li>
|
||||
<li>🖥️ <code>print_service.py</code> - Main service application</li>
|
||||
<li>⚙️ <code>service_manager.py</code> - Service management</li>
|
||||
<li>🌐 <code>chrome_extension/</code> - Browser extension</li>
|
||||
<li>📚 Complete documentation package</li>
|
||||
</ul>
|
||||
|
||||
<h5>⚡ Quick Install:</h5>
|
||||
<ol>
|
||||
<li>Download and extract the service package</li>
|
||||
<li><strong>Right-click</strong> <code>install_service.bat</code></li>
|
||||
<li>Select <strong>"Run as administrator"</strong></li>
|
||||
<li>Wait for installation to complete</li>
|
||||
</ol>
|
||||
|
||||
<div class="text-center mt-auto">
|
||||
<button class="btn btn-success btn-lg mb-2" id="download-service-btn">
|
||||
📥 Download Windows Service
|
||||
</button>
|
||||
<br>
|
||||
<small class="text-muted">Complete package (~50KB)</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Chrome Extension Card -->
|
||||
<div class="col-md-5 mb-4">
|
||||
<div class="card h-100 border-info">
|
||||
<div class="card-header bg-info text-white text-center">
|
||||
<h4 class="mb-0">🌐 Chrome Extension</h4>
|
||||
<small>Browser integration</small>
|
||||
</div>
|
||||
<div class="card-body d-flex flex-column">
|
||||
<div class="alert alert-info">
|
||||
<strong>🔗 Install Second:</strong> The Chrome extension connects your browser to the Windows service for seamless printing.
|
||||
</div>
|
||||
|
||||
<h5>🎯 Features:</h5>
|
||||
<ul>
|
||||
<li>🖨️ Silent printing via native messaging</li>
|
||||
<li>🔍 Automatic service detection</li>
|
||||
<li>📊 Print status monitoring</li>
|
||||
<li><EFBFBD>️ Opens PDF in hidden browser tab and triggers print dialog</li>
|
||||
<li>🔍 Automatic extension detection on web page</li>
|
||||
<li>📊 Print status feedback and error handling</li>
|
||||
<li>🔄 Graceful fallback to PDF download</li>
|
||||
<li>⚙️ Printer management interface</li>
|
||||
<li>⚙️ Works with any printer Chrome can access</li>
|
||||
<li>🌍 Cross-platform (Windows, Mac, Linux)</li>
|
||||
</ul>
|
||||
|
||||
<h5>🚀 Quick Install:</h5>
|
||||
<h5>🚀 Quick Install (3 steps):</h5>
|
||||
<ol>
|
||||
<li>Download and extract extension files</li>
|
||||
<li>Download and extract the extension files</li>
|
||||
<li>Open Chrome → <code>chrome://extensions/</code></li>
|
||||
<li>Enable <strong>"Developer mode"</strong></li>
|
||||
<li>Click <strong>"Load unpacked"</strong> → Select folder</li>
|
||||
<li>Enable <strong>"Developer mode"</strong> → Click <strong>"Load unpacked"</strong> → Select folder</li>
|
||||
</ol>
|
||||
|
||||
<div class="text-center mt-auto">
|
||||
<button class="btn btn-info btn-lg mb-2" id="download-extension-btn">
|
||||
<button class="btn btn-success btn-lg mb-3" id="download-extension-btn">
|
||||
📥 Download Chrome Extension
|
||||
</button>
|
||||
<br>
|
||||
<small class="text-muted">Extension package (~15KB)</small>
|
||||
<small class="text-muted">Extension package (~10KB)</small>
|
||||
|
||||
<hr>
|
||||
<div class="text-center">
|
||||
<small class="text-muted">Individual files:</small><br>
|
||||
<small class="text-muted">Individual files for inspection:</small><br>
|
||||
<a href="{{ url_for('main.extension_files', filename='manifest.json') }}" target="_blank" class="btn btn-sm btn-outline-secondary">manifest.json</a>
|
||||
<a href="{{ url_for('main.extension_files', filename='background.js') }}" target="_blank" class="btn btn-sm btn-outline-secondary">background.js</a>
|
||||
<a href="{{ url_for('main.extension_files', filename='content.js') }}" target="_blank" class="btn btn-sm btn-outline-secondary">content.js</a>
|
||||
@@ -208,21 +171,22 @@
|
||||
<div class="col-md-6">
|
||||
<h5>💻 Requirements:</h5>
|
||||
<ul>
|
||||
<li><strong>OS:</strong> Windows 10/11 (64-bit)</li>
|
||||
<li><strong>Python:</strong> 3.8+ (auto-installed if missing)</li>
|
||||
<li><strong>Browser:</strong> Google Chrome (latest)</li>
|
||||
<li><strong>Privileges:</strong> Administrator (for installation only)</li>
|
||||
<li><strong>Network:</strong> Localhost access (no internet required)</li>
|
||||
<li><strong>Browser:</strong> Google Chrome (any recent version)</li>
|
||||
<li><strong>OS:</strong> Windows, Mac, or Linux</li>
|
||||
<li><strong>Privileges:</strong> None required (standard user)</li>
|
||||
<li><strong>Internet:</strong> Not required (works offline)</li>
|
||||
<li><strong>Installation:</strong> Just load extension in Chrome</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<h5>🔍 How It Works:</h5>
|
||||
<div class="alert alert-light">
|
||||
<ol class="mb-0">
|
||||
<li>🌐 Web page detects service status</li>
|
||||
<li>🖨️ <strong>Service Available</strong> → Green "Print Labels (Silent)" button</li>
|
||||
<li>📄 <strong>Service Unavailable</strong> → Blue "Generate PDF" button</li>
|
||||
<li>🔄 Automatic fallback ensures printing always works</li>
|
||||
<li>🌐 Web page detects Chrome extension</li>
|
||||
<li>🖨️ <strong>Extension Available</strong> → Green "Print Labels (Extension)" button</li>
|
||||
<li>📄 <strong>Extension Unavailable</strong> → Blue "Generate PDF" button</li>
|
||||
<li>🔄 Extension opens PDF in hidden tab → triggers print dialog</li>
|
||||
<li>✅ User selects printer and confirms → automatic cleanup</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
@@ -234,11 +198,22 @@
|
||||
|
||||
<!-- Action Buttons -->
|
||||
<div class="row justify-content-center mb-5">
|
||||
<div class="col-md-8 text-center">
|
||||
<div class="col-md-10 text-center">
|
||||
<div class="card border-dark">
|
||||
<div class="card-body">
|
||||
<h5>🚀 Ready to Start?</h5>
|
||||
<p class="text-muted">Installation takes ~5 minutes • Zero maintenance required</p>
|
||||
<h5>🚀 Ready to Test?</h5>
|
||||
<p class="text-muted">Installation takes ~2 minutes • Zero maintenance required</p>
|
||||
|
||||
<!-- Test Extension Button -->
|
||||
<div class="alert alert-info">
|
||||
<h6>🧪 Test the Extension</h6>
|
||||
<p class="mb-2">After installing the extension, click below to test if the print module detects it correctly:</p>
|
||||
<button class="btn btn-info mb-2" id="test-extension-btn">
|
||||
🔍 Test Extension Detection
|
||||
</button>
|
||||
<div id="test-results" class="mt-2" style="display: none;"></div>
|
||||
</div>
|
||||
|
||||
<div class="btn-group-vertical btn-group-lg" role="group">
|
||||
<a href="{{ url_for('main.print_module') }}" class="btn btn-success btn-lg">
|
||||
🖨️ Go to Print Module
|
||||
@@ -254,46 +229,6 @@
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// Windows Service Download Handler
|
||||
document.getElementById('download-service-btn').addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
// Show loading state
|
||||
const originalText = this.innerHTML;
|
||||
this.innerHTML = '⏳ Preparing Windows Service Package...';
|
||||
this.disabled = true;
|
||||
|
||||
// Create the Windows service package
|
||||
fetch('/create_service_package', {method: 'POST'})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
if (data.success) {
|
||||
// Start download
|
||||
window.location.href = data.download_url;
|
||||
|
||||
// Show success message
|
||||
setTimeout(() => {
|
||||
this.innerHTML = '✅ Download Started!';
|
||||
}, 500);
|
||||
|
||||
// Reset button
|
||||
setTimeout(() => {
|
||||
this.innerHTML = originalText;
|
||||
this.disabled = false;
|
||||
}, 3000);
|
||||
} else {
|
||||
alert('Error creating Windows service package: ' + data.error);
|
||||
this.innerHTML = originalText;
|
||||
this.disabled = false;
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
alert('Error: ' + error.message);
|
||||
this.innerHTML = originalText;
|
||||
this.disabled = false;
|
||||
});
|
||||
});
|
||||
|
||||
// Chrome Extension Download Handler
|
||||
document.getElementById('download-extension-btn').addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
@@ -334,20 +269,115 @@ document.getElementById('download-extension-btn').addEventListener('click', func
|
||||
});
|
||||
});
|
||||
|
||||
// Documentation links - track clicks for analytics
|
||||
document.querySelectorAll('a[href*="/static/documentation/"]').forEach(link => {
|
||||
link.addEventListener('click', function(e) {
|
||||
// Could add analytics tracking here
|
||||
console.log('Documentation accessed:', this.href);
|
||||
});
|
||||
// Extension Test Functionality
|
||||
document.getElementById('test-extension-btn').addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
const testResults = document.getElementById('test-results');
|
||||
const originalText = this.innerHTML;
|
||||
|
||||
this.innerHTML = '🔍 Testing...';
|
||||
this.disabled = true;
|
||||
testResults.style.display = 'block';
|
||||
testResults.innerHTML = '<div class="spinner-border spinner-border-sm" role="status"></div> Checking Chrome extension...';
|
||||
|
||||
// Test extension detection (same logic as print module)
|
||||
testExtensionConnection()
|
||||
.then(result => {
|
||||
if (result.success) {
|
||||
testResults.innerHTML = `
|
||||
<div class="alert alert-success">
|
||||
<strong>✅ Extension Test Successful!</strong><br>
|
||||
Extension ID: ${result.extensionId || 'Detected'}<br>
|
||||
Version: ${result.version || 'Unknown'}<br>
|
||||
Status: Ready for printing<br>
|
||||
<small class="text-muted">The print module will show the green "Print Labels (Extension)" button</small>
|
||||
</div>
|
||||
`;
|
||||
} else {
|
||||
testResults.innerHTML = `
|
||||
<div class="alert alert-warning">
|
||||
<strong>❌ Extension Not Detected</strong><br>
|
||||
Reason: ${result.error}<br>
|
||||
<small class="text-muted">
|
||||
Make sure you've:<br>
|
||||
1. Downloaded and extracted the extension<br>
|
||||
2. Loaded it in Chrome at chrome://extensions/<br>
|
||||
3. Enabled "Developer mode" first<br>
|
||||
4. Refreshed this page after installation
|
||||
</small>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
testResults.innerHTML = `
|
||||
<div class="alert alert-danger">
|
||||
<strong>❌ Test Failed</strong><br>
|
||||
Error: ${error.message}<br>
|
||||
<small class="text-muted">Chrome extension communication failed</small>
|
||||
</div>
|
||||
`;
|
||||
})
|
||||
.finally(() => {
|
||||
this.innerHTML = originalText;
|
||||
this.disabled = false;
|
||||
});
|
||||
});
|
||||
|
||||
// Show installation progress tips
|
||||
// Test extension connection function
|
||||
async function testExtensionConnection() {
|
||||
return new Promise((resolve) => {
|
||||
// Try to get extension ID from injected DOM element or use fallback
|
||||
const extensionElement = document.getElementById('chrome-extension-id');
|
||||
const extensionId = extensionElement ?
|
||||
extensionElement.getAttribute('data-extension-id') :
|
||||
'cifcoidplhgclhcnlcgdkjbaoempjmdl'; // Fallback
|
||||
|
||||
if (!window.chrome || !window.chrome.runtime) {
|
||||
resolve({ success: false, error: 'Chrome runtime not available' });
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
chrome.runtime.sendMessage(extensionId, { action: 'ping' }, function(response) {
|
||||
if (chrome.runtime.lastError) {
|
||||
resolve({
|
||||
success: false,
|
||||
error: chrome.runtime.lastError.message,
|
||||
extensionId: extensionId
|
||||
});
|
||||
} else if (response && response.success) {
|
||||
resolve({
|
||||
success: true,
|
||||
extensionId: extensionId,
|
||||
version: response.extension_version,
|
||||
message: response.message
|
||||
});
|
||||
} else {
|
||||
resolve({
|
||||
success: false,
|
||||
error: 'Extension ping failed - no response',
|
||||
extensionId: extensionId
|
||||
});
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
resolve({
|
||||
success: false,
|
||||
error: 'Exception: ' + error.message,
|
||||
extensionId: extensionId
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// Show installation tips
|
||||
function showInstallationTips() {
|
||||
const tips = [
|
||||
'💡 Tip: The Windows service automatically starts with your computer',
|
||||
'💡 Tip: Both components work together - install the service first',
|
||||
'💡 Tip: Check the documentation for troubleshooting common issues',
|
||||
'💡 Tip: This new approach is much simpler - no Windows service needed!',
|
||||
'💡 Tip: The extension works on Windows, Mac, and Linux',
|
||||
'💡 Tip: Users will see Chrome\'s print dialog for printer selection',
|
||||
'💡 Tip: The system gracefully falls back to PDF downloads if needed'
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user