rshabk-app/public/js/html2media/html2pdf-script.js
2025-04-26 23:48:27 +07:00

98 lines
3.0 KiB
JavaScript

document.addEventListener('DOMContentLoaded', function () {
Livewire.on('triggerPrint', function (options = {}) {
console.log('triggerPrint', options);
performAction(options);
});
});
function performAction({ action = 'print', element, ...customOptions } = {}) {
const printElement = document.getElementById(`print-smart-content-${element}`);
// Default options for html2pdf
const defaultOptions = {
filename: 'document.pdf',
pagebreak: {
mode: ['css', 'legacy'],
after: 'section'
},
jsPDF: {
unit: 'mm',
format: 'a4',
orientation: 'portrait'
},
html2canvas: {
scale: 2,
useCORS: true,
logging: true
},
margin: 0
};
// Merge custom options with defaults
const options = {
...defaultOptions,
...customOptions,
pagebreak: {
...defaultOptions.pagebreak,
...(customOptions.pagebreak || {})
},
jsPDF: {
...defaultOptions.jsPDF,
...(customOptions.jsPDF || {})
},
html2canvas: {
...defaultOptions.html2canvas,
...(customOptions.html2canvas || {})
}
};
if (printElement) {
switch (action) {
case 'savePdf':
// Save as PDF
html2pdf()
.from(printElement)
.set(options)
.save();
break;
case 'print':
// Print action
html2pdf()
.from(printElement)
.set(options)
.toPdf()
.get('pdf')
.then(function (pdf) {
const blob = pdf.output('blob');
const url = URL.createObjectURL(blob);
const iframe = document.getElementById(`print-smart-iframe-${element}`);
iframe.src = url;
iframe.onload = function () {
iframe.contentWindow.focus();
iframe.contentWindow.print();
iframe.contentWindow.onafterprint = function () {
URL.revokeObjectURL(url);
};
};
});
break;
default:
console.error('Unsupported action:', action);
}
} else {
console.error(`Element with ID "print-smart-content-${element}" not found.`);
}
}
function replaceSpacesInTextNodes(element) {
element.childNodes.forEach(node => {
if (node.nodeType === Node.TEXT_NODE && node.textContent.trim() !== '') {
node.textContent = node.textContent.replace(/\s/g, "\u00a0");
} else if (node.nodeType === Node.ELEMENT_NODE) {
replaceSpacesInTextNodes(node);
}
});
}