98 lines
3.0 KiB
JavaScript
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);
|
|
}
|
|
});
|
|
}
|