We Built Client Onboarding Templates That Stands Apart.
“A Laptop Or Tablet Is Recommended For Better Use.”
Editable Digital Marketer Invoice
INVOICE
Invoice #: INV-00123
Date of Issue: Oct 11, 2025
Click to add logo
[Your Business Name]
[your.email@example.com]
[Your Business Address]
[Your Phone Number]
CLIENT INFORMATION
[Client’s Name]
[client.email@example.com]
[Client’s Address]
Services / Products
Qty
Rate
Amount
Social Media Management
Monthly retainer for social channels.
1
1200.00
1200.00
Subtotal1200.00
Tax (10%)120.00
Total1320.00
Payment Details
Bank: [Your Bank Name]
Account Name: [Your Account Name]
Account Number: [Your Account Number]
`);
printWindow.document.close();// Give the print window a brief moment to apply styles and render images (logo) before printing.
// This avoids printing before CSS loads in WP/Astra environments.
const tryPrint = () => {
try {
printWindow.focus();
printWindow.print();
// Do not always auto-close; some browsers block window.close() — close after short delay if allowed
setTimeout(() => { try { printWindow.close(); } catch(e) { /* ignore */ } }, 500);
} catch (err) {
// If print() fails, let user know
alert('Print dialog failed to open. Please use the print dialog from the new tab.');
}
};// Wait for the new window to fully load resources (images/fonts). Use load event when available.
if (printWindow.document.readyState === 'complete') {
setTimeout(tryPrint, 250);
} else {
printWindow.onload = function() {
setTimeout(tryPrint, 250);
};
// fallback: if onload never fires within 2s, try anyway
setTimeout(() => { if (!printWindow.closed) tryPrint(); }, 2000);
}
}// Event wiring
document.addEventListener('DOMContentLoaded', function () {
const invoiceItems = document.getElementById('invoice-items');document.getElementById('add-item').addEventListener('click', () => {
const newItemRow = `