- Generazione PDF e per Stampa

This commit is contained in:
Surya Paolo
2025-05-12 16:33:58 +02:00
parent 6ed648f8b3
commit ef48d7e741
9 changed files with 142 additions and 79 deletions

View File

@@ -1747,66 +1747,85 @@ export default defineComponent({
const pages = document.querySelectorAll(pagesSelector);
const pdfs = [];
for (let i = 0; i < pages.length; i++) {
const page = pages[i];
try {
for (let i = 0; i < pages.length; i++) {
const page = pages[i];
// Nascondi altre pagine
pages.forEach((p) => p.classList.add('hidden'));
page.classList.remove('hidden');
// Nascondi altre pagine
pages.forEach((p) => p.classList.add('hidden'));
page.classList.remove('hidden');
await new Promise((resolve) => setTimeout(resolve, 100));
await new Promise((resolve) => setTimeout(resolve, 100));
// Genera singolo PDF
const pdfBlob = await new Promise<Blob | null>((resolve) => {
html2pdf()
.set(opt)
.from(page)
.toPdf()
.output('blob', { compress: true })
.then(resolve)
.catch(() => resolve(null));
});
// Genera singolo PDF
const pdfBlob = await new Promise<Blob | null>((resolve) => {
html2pdf()
.set(opt)
.from(page)
.toPdf()
.output('blob', { compress: true })
.then(resolve)
.catch(() => resolve(null));
});
if (pdfBlob) {
pdfs.push(pdfBlob);
if (pdfBlob) {
pdfs.push(pdfBlob);
}
}
// Unisci PDF
const finalPdf = await PDFDocument.create();
for (const blob of pdfs) {
const pdf = await PDFDocument.load(await blob.arrayBuffer());
const copiedPages = await finalPdf.copyPages(pdf, pdf.getPageIndices());
copiedPages.forEach((p) => finalPdf.addPage(p));
}
const finalPdfBytes = await finalPdf.save(); // Uint8Array
// ✅ Conversione in Blob
const blob = new Blob([finalPdfBytes], { type: 'application/pdf' });
// ✅ Download
if (salvasufiledascaricare) {
saveAs(blob, opt.filename);
} else {
// ✅ Crea un oggetto File da Blob
const pdfFile = new File([blob], 'report.pdf', { type: 'application/pdf' });
// Converti il file appena generato
const ris = await globalStore.convertPdf(
pdfFile,
widthpdf.value,
heightpdf.value,
compressionepdf.value,
dir_out,
file_out,
true,
optcatalogo.value,
salvasufiledascaricare
);
if (ris) {
const catalog = getCatalogoByMyPage.value;
if (ris.pdf_generato) {
catalog.pdf_generato = ris.pdf_generato;
catalog.data_generato = tools.getDateNow();
}
if (ris.pdf_generato_stampa) {
catalog.pdf_generato_stampa = ris.pdf_generato_stampa;
catalog.data_generato_stampa = tools.getDateNow();
}
await saveCatalog();
}
}
// Ripristina visibilità
pages.forEach((p) => p.classList.remove('hidden'));
} catch (e) {
console.error('Err', e.message);
}
// Unisci PDF
const finalPdf = await PDFDocument.create();
for (const blob of pdfs) {
const pdf = await PDFDocument.load(await blob.arrayBuffer());
const copiedPages = await finalPdf.copyPages(pdf, pdf.getPageIndices());
copiedPages.forEach((p) => finalPdf.addPage(p));
}
const finalPdfBytes = await finalPdf.save(); // Uint8Array
// ✅ Conversione in Blob
const blob = new Blob([finalPdfBytes], { type: 'application/pdf' });
// ✅ Download
if (salvasufiledascaricare) {
saveAs(blob, opt.filename);
} else {
// ✅ Crea un oggetto File da Blob
const pdfFile = new File([blob], 'report.pdf', { type: 'application/pdf' });
// Converti il file appena generato
await globalStore.convertPdf(
pdfFile,
widthpdf.value,
heightpdf.value,
compressionepdf.value,
dir_out,
file_out,
true,
optcatalogo.value,
);
}
// Ripristina visibilità
pages.forEach((p) => p.classList.remove('hidden'));
}
const generatePDF = async () => {
@@ -1860,12 +1879,7 @@ export default defineComponent({
const element = document.getElementById('pdf-content');
const opt = {
margin: [
defaultMargin,
defaultMargin,
defaultMargin,
defaultMargin,
],
margin: [defaultMargin, defaultMargin, defaultMargin, defaultMargin],
filename: myfile,
image: {
type: 'jpeg',
@@ -1890,7 +1904,7 @@ export default defineComponent({
// a4: [595.28, 841.89]
if (true) {
await generateLargePDF(opt, '.pdf-section', false, 'upload/', file_out);
await generateLargePDF(opt, '.pdf-section', false, 'upload/cataloghi/', file_out);
} else {
await html2pdf().set(opt).from(element).save();
}