Sign PDF

Add your signature to PDF documents. Draw, type, or upload your signature.

Select PDF to Sign

Choose a file to add your signature

Maximum file size: 100MB

document.pdf

0 pages • 0 MB

Signature Options

Choose how you want to create your signature

Color:

Drag & drop your signature image here or click to browse

Signature Preview:

Signature Preview
Small Medium Large

Select Page to Sign

Click on a page thumbnail to add your signature

0%
Adding Signature to Your PDF
Please wait while we process your document

Signature Added Successfully!

Your signature has been added to the PDF. Download the signed document below.

if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } // Clear signature function clearSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for clearing'); return; } const ctx = canvas._ctx; ctx.clearRect(0, 0, canvas.width, canvas.height); console.log('Signature cleared'); } // Save signature function saveSignature() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for saving'); return; } const ctx = canvas._ctx; const dataURL = canvas.toDataURL('image/png'); console.log('Signature saved:', dataURL); } // Load signature function loadSignature(dataURL) { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for loading'); return; } const ctx = canvas._ctx; const img = new Image(); img.onload = () => { ctx.drawImage(img, 0, 0); console.log('Signature loaded'); }; img.onerror = () => { console.error('Failed to load signature'); }; img.src = dataURL; } // Check if signature is empty function isSignatureEmpty() { const canvas = document.getElementById('signaturePad'); if (!canvas || !canvas._ctx) { console.error('Canvas not found for checking'); return true; } const ctx = canvas._ctx; const data = ctx.getImageData(0, 0, canvas.width, canvas.height).data; for (let i = 3; i < data.length; i += 4) { if (data[i] > 0) { // If alpha channel is not zero return false; } } return true; } console.log('Signature cleared'); } // Change file function changeFile() { fileInput.click(); } // Remove file function removeFile() { selectedFile = null; pdfDocument = null; fileInput.value = ''; uploadContainer.style.display = 'block'; pdfPreviewContainer.style.display = 'none'; document.getElementById('pagesPreviewContainer').style.display = 'none'; } // Reset tool function resetTool() { selectedFile = null; pdfDocument = null; totalPages = 0; signatureImage = null; selectedPage = null; signedPdfBytes = null; fileInput.value = ''; signatureImageInput.value = ''; signaturePreview.style.display = 'none'; uploadContainer.style.display = 'block'; pdfPreviewContainer.style.display = 'none'; processingContainer.style.display = 'none'; resultContainer.style.display = 'none'; document.getElementById('pagesPreviewContainer').style.display = 'none'; clearSignature(); signAllPagesCheckbox.checked = false; // Reset page thumbnails pageThumbnails.innerHTML = ''; // Reset file info document.getElementById('pdfFileName').textContent = 'document.pdf'; document.getElementById('pdfInfo').textContent = '0 pages • 0 MB'; } // Sign PDF - Fixed and improved version to properly handle signing all pages async function signPDF() { if (!selectedFile || !pdfDocument) { alert('Please select a PDF file first.'); return; } const signAllPages = signAllPagesCheckbox.checked; let pagesToSign = []; if (signAllPages) { // Sign all pages for (let i = 1; i <= totalPages; i++) { pagesToSign.push(i); } console.log('Signing all pages:', pagesToSign); } else { // Sign only selected page if (!selectedPage) { alert('Please select a page to sign.'); return; } pagesToSign = [selectedPage]; console.log('Signing page:', selectedPage); } try { // Show processing pdfPreviewContainer.style.display = 'none'; processingContainer.style.display = 'block'; // Get signature data based on selected type const activeTab = document.querySelector('.signature-type.active').textContent.toLowerCase(); let signatureData = null; if (activeTab === 'draw') { if (isSignaturePadEmpty()) { alert('Please draw your signature first.'); processingContainer.style.display = 'none'; pdfPreviewContainer.style.display = 'block'; return; } const canvas = document.getElementById('signaturePad'); signatureData = canvas.toDataURL(); console.log('Using drawn signature'); } else if (activeTab === 'type') { const typedText = document.getElementById('typedSignature').value.trim(); if (!typedText) { alert('Please enter your name for the signature.'); processingContainer.style.display = 'none'; pdfPreviewContainer.style.display = 'block'; return; } // For typed signature, we would generate an image, but for simplicity we'll use a placeholder signatureData = 'typed:' + typedText; console.log('Using typed signature:', typedText); } else if (activeTab === 'upload') { if (!signatureImage) { alert('Please upload a signature image.'); processingContainer.style.display = 'none'; pdfPreviewContainer.style.display = 'block'; return; } signatureData = signaturePreviewImage.src; console.log('Using uploaded signature'); } // Perform signing const arrayBuffer = await selectedFile.arrayBuffer(); const signedBytes = await signPdfWithSignature(arrayBuffer, pagesToSign, signatureData); // Store result signedPdfBytes = signedBytes; // Show results setTimeout(() => { processingContainer.style.display = 'none'; resultContainer.style.display = 'block'; }, 500); } catch (error) { console.error('Signing error:', error); alert('An error occurred during signing. Please try again.'); processingContainer.style.display = 'none'; pdfPreviewContainer.style.display = 'block'; } } // Sign PDF with signature - Fixed and improved version async function signPdfWithSignature(arrayBuffer, pageNumbers, signatureData) { try { // Use PDFLib to add signature const { PDFDocument, rgb } = PDFLib; const pdfDoc = await PDFDocument.load(arrayBuffer); // Get signature size let signatureSize = parseInt(document.getElementById('signatureSize').value); console.log('Signing pages:', pageNumbers); // Add signature to each page for (const pageNumber of pageNumbers) { const page = pdfDoc.getPage(pageNumber - 1); // Get page dimensions const { width, height } = page.getSize(); // Add signature to bottom right corner if (signatureData.startsWith('data:image')) { // Handle image signature const signatureImageBytes = await fetch(signatureData).then(res => res.arrayBuffer()); const signatureImageEmbed = await pdfDoc.embedPng(signatureImageBytes); let signatureWidth = signatureSize; let signatureHeight = signatureSize * 0.3; // Aspect ratio // Ensure signature fits within page bounds if (signatureWidth > width - 100) { const ratio = (width - 100) / signatureWidth; signatureWidth *= ratio; signatureHeight *= ratio; } page.drawImage(signatureImageEmbed, { x: width - signatureWidth - 50, y: 50, width: signatureWidth, height: signatureHeight, }); console.log(`Added signature to page ${pageNumber}`); } else if (signatureData.startsWith('typed:')) { // Handle typed signature const typedText = signatureData.substring(6); page.drawText(typedText, { x: width - 200, y: 60, size: 20, color: rgb(0, 0, 0), }); console.log(`Added typed signature to page ${pageNumber}: ${typedText}`); } } // Save the modified PDF const signedBytes = await pdfDoc.save(); console.log('PDF signed successfully'); return signedBytes; } catch (error) { console.error('PDF signing failed:', error); throw error; } } // Download signed PDF function downloadSignedPdf() { if (signedPdfBytes) { const blob = new Blob([signedPdfBytes], { type: 'application/pdf' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'signed_' + selectedFile.name; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); } } // Initialize when DOM is loaded document.addEventListener('DOMContentLoaded', function() { console.log('DOM loaded, initializing tool'); // Setup event listeners first setupEventListeners(); // Initialize signature pad with a delay to ensure DOM is ready setTimeout(function() { initSignaturePad(); setupSignaturePadEvents(); }, 500); }); // Also initialize when window is fully loaded window.addEventListener('load', function() { console.log('Window loaded, ensuring signature pad is initialized'); setTimeout(function() { initSignaturePad(); setupSignaturePadEvents(); }, 300); });