Magari è una cosa banalissima eh, eppure mi sto incartando per mettere le mani dentro PHP nel modo più indolore possibile.
Premetto che solitamente js mi basta e avanza per quel poco di interazione che devo fare. In questo caso specifico:
- un modal con un pulsante che ricorda all'utente di scaricarsi il file pdf
- in fondo alla pagina altro pulsante nel caso l'utente se ne fosse dimenticato
Il pdf in questione viene creato (pescando dei div il cui contenuto è generato dinamicamente) dopo che l'utente ha risposto a qualche domanda (e le risposte generano risultati diversi ovviamente).
Fin qui tutto ok se non fosse che mi è stato chiesto di implementare un salvataggio automatico del suddetto pdf anche nel server.
Suggerimenti? Di seguito il mio amabile e tranquillo js lato client:
document.addEventListener("DOMContentLoaded", function() {
function generateAndDownloadPDF() {
var intestazione = document.getElementById('intestazione').innerHTML;
var datiAzienda = document.getElementById('dati_azienda').innerHTML;
var ratingGenerale = document.getElementById('rating_generale').innerHTML;
var progressBar = document.getElementById('progress_bar').innerHTML;
var footer = document.getElementById('footer').innerHTML;
var content = `
<div>${intestazione}</div>
<div>${datiAzienda}</div>
<div>${footer}</div>
<div style="page-break-after: always;"></div>
<div>${ratingGenerale}</div>
<div>${progressBar}</div>
<div>${footer}</div>
`;
// pdf
html2pdf()
.from(content)
.set({
margin: 10,
filename: '<?php echo $row_azienda['piva'] . "_" . str_replace(" ", "_", $row_azienda['ragione_sociale']) . "_" . date("Ymd_His"); ?>.pdf',
html2canvas: { scale: 2 },
jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
})
.save();
}
// listener evento onclick
document.getElementById('save-pdf').addEventListener('click', generateAndDownloadPDF);
// listener pulsante modal
document.getElementById('download-pdf').addEventListener('click', function() {
generateAndDownloadPDF();
$('#pdfModal').modal('hide');
});
$('#pdfModal').modal('show');
});