async function mergePDFs(pdfBytes1, pdfBytes2) { const pdfDoc1 = await PDFLib.PDFDocument.load(pdfBytes1); const pdfDoc2 = await PDFLib.PDFDocument.load(pdfBytes2); const [pdf1Page] = await pdfDoc1.copyPages(pdfDoc2, [0]); pdfDoc1.addPage(pdf1Page); return pdfDoc1; } document.getElementById('mergeButtonQR').addEventListener('click', async () => { const pdfInputQR = document.getElementById('pdfInputQR'); const pdfListQR = document.getElementById('pdfListQR'); const resultFrameQR = document.getElementById('resultFrameQR'); const selectedPdfQR = pdfListQR.value; const uploadedPdfQR = pdfInputQR.files[0]; if (selectedPdfQR && uploadedPdfQR) { const uploadedPdfDataQR = new Uint8Array(await uploadedPdfQR.arrayBuffer()); const responseQR = await fetch(selectedPdfQR); const selectedPdfDataQR = new Uint8Array(await responseQR.arrayBuffer()); const mergedPdfQR = await mergePDFs(uploadedPdfDataQR, selectedPdfDataQR); // Agregar un código QR a la segunda página const uploadedPdfQRName = uploadedPdfQR.name.replace('.pdf', ''); const qrText = uploadedPdfQRName.toUpperCase().substring(0, 18); const qrCanvas = document.createElement('canvas'); new QRious({ element: qrCanvas, value: qrText, size: 100, backgroundAlpha: 0, // Establecer el fondo como transparente }); const qrImage = await mergedPdfQR.embedPng(qrCanvas.toDataURL('image/png')); const secondPageQR = mergedPdfQR.getPages()[1]; // Obtener la segunda página secondPageQR.drawImage(qrImage, { x: 30, y: secondPageQR.getHeight() - 90, width: 62, height: 62, }); // Agregar el mismo texto debajo del código QR const textSizeQR = 5; // Tamaño del texto const textQR = qrText.toUpperCase(); // Usar el mismo texto del código QR // Verificar si el texto cumple con el patrón deseado const pattern = /^[A-Z]{4}\d{6}[A-Z]{6}[A-Z0-9]\d$/; if (pattern.test(textQR)) { secondPageQR.drawText(textQR, { x: 31, y: secondPageQR.getHeight() - 97, // Ajusta la posición vertical según sea necesario size: textSizeQR, font: await mergedPdfQR.embedFont(PDFLib.StandardFonts.Helvetica), color: PDFLib.rgb(0, 0, 0), }); } else { console.warn('El texto no cumple con el patrón deseado y no se agregará al PDF.'); } const mergedPdfBytesQR = await mergedPdfQR.save(); // Crear enlace para descargar el PDF con código QR const blobQR = new Blob([mergedPdfBytesQR], { type: 'application/pdf' }); const urlQR = URL.createObjectURL(blobQR); const nombreArchivoQR = qrText + '.pdf'; const descargarQR = document.createElement('a'); descargarQR.href = urlQR; descargarQR.download = nombreArchivoQR; descargarQR.textContent = 'Descargar PDF con Código QR'; descargarQR.style.display = 'none'; // Ocultar el enlace document.body.appendChild(descargarQR); // Simular el clic en el enlace para iniciar la descarga automáticamente descargarQR.click(); // Mostrar la previsualización del archivo descargado en el iframe const previewFrame = document.getElementById('previewFrame'); previewFrame.src = urlQR; previewFrame.style.display = 'block'; // Eliminar el enlace después de la descarga URL.revokeObjectURL(urlQR); document.body.removeChild(descargarQR); } else { console.error('Seleccione un PDF y suba otro para unir.'); } });