🔄 Última actualización del motor de herramientas: hace 39 min
🚀 Ein lokaler Hochgeschwindigkeitsserver wurde für Besucher aus بلدك aktiviert.

La mejor herramienta gratuita para Fusionador de PDF en línea

Fusionador de PDF | Herramienta avanzada 100% local

Fusionador de PDF

Herramienta 100% local • Fusión ilimitada • Privacidad total

Todo el proceso ocurre en tu navegador – nunca se suben archivos a ningún servidor

Arrastra y suelta archivos PDF aquí

O haz clic para seleccionar archivos desde tu dispositivo (múltiples archivos permitidos)

Archivos para fusionar

  • Aún no hay archivos. Añade archivos PDF para comenzar a fusionar.
Desarrollado con pdf-lib • Fusión rápida y segura • Maneja documentos grandes
(function(){ // ———- Almacenamiento de archivos ———- let pdfFilesQueue = []; // cada elemento: { id, file, name, size } let nextId = 1; // Referencias DOM const dropZone = document.getElementById(‘dropZone’); const fileInput = document.getElementById(‘fileInput’); const selectBtn = document.getElementById(‘selectFilesBtn’); const fileListContainer = document.getElementById(‘fileListContainer’); const mergeBtn = document.getElementById(‘mergeBtn’); const resetBtn = document.getElementById(‘resetBtn’); const clearAllBtn = document.getElementById(‘clearAllBtn’); const statusContainer = document.getElementById(‘statusContainer’); // Renderizar lista de archivos function renderFileList() { if (!fileListContainer) return; if (pdfFilesQueue.length === 0) { fileListContainer.innerHTML = ‘
  • No hay archivos. Añade archivos PDF para fusionar.
  • ‘; return; } let html = »; pdfFilesQueue.forEach((item, idx) => { const sizeMB = (item.size / 1024 / 1024).toFixed(2); const sizeDisplay = sizeMB >= 1 ? `${sizeMB} MB` : `${(item.size / 1024).toFixed(0)} KB`; html += `
  • ${escapeHtml(item.name)} ${sizeDisplay}
  • `; }); fileListContainer.innerHTML = html; // eventos para botones dinámicos document.querySelectorAll(‘.btn-move-up’).forEach(btn => { btn.addEventListener(‘click’, (e) => { e.stopPropagation(); const id = parseInt(btn.getAttribute(‘data-id’)); moveFileUp(id); }); }); document.querySelectorAll(‘.btn-move-down’).forEach(btn => { btn.addEventListener(‘click’, (e) => { e.stopPropagation(); const id = parseInt(btn.getAttribute(‘data-id’)); moveFileDown(id); }); }); document.querySelectorAll(‘.btn-remove’).forEach(btn => { btn.addEventListener(‘click’, (e) => { e.stopPropagation(); const id = parseInt(btn.getAttribute(‘data-id’)); removeFileById(id); }); }); } // funciones auxiliares function escapeHtml(str) { if(!str) return »; return str.replace(/[&]/g, function(m) { if(m === ‘&’) return ‘&’; if(m === ») return ‘>’; return m; }); } function moveFileUp(id) { const index = pdfFilesQueue.findIndex(f => f.id === id); if(index > 0) { [pdfFilesQueue[index-1], pdfFilesQueue[index]] = [pdfFilesQueue[index], pdfFilesQueue[index-1]]; renderFileList(); } } function moveFileDown(id) { const index = pdfFilesQueue.findIndex(f => f.id === id); if(index !== -1 && index f.id !== id); renderFileList(); clearStatus(); } function clearAllFiles() { pdfFilesQueue = []; renderFileList(); clearStatus(); } function clearStatus() { if(statusContainer) statusContainer.innerHTML = »; } // añadir archivos (evitar duplicados exactos) function addFiles(files) { if(!files || files.length === 0) return; let addedCount = 0; for(let file of files) { if(file.type !== ‘application/pdf’) { showTemporaryError(`El archivo «${file.name}» no es PDF, se ha omitido.`); continue; } const isDuplicate = pdfFilesQueue.some(f => f.name === file.name && f.size === file.size); if(isDuplicate) { showTemporaryError(`⚠️ El archivo «${file.name}» ya existe en la lista, duplicado ignorado.`); continue; } pdfFilesQueue.push({ id: nextId++, file: file, name: file.name, size: file.size }); addedCount++; } if(addedCount > 0) { renderFileList(); clearStatus(); } } function showTemporaryError(msg) { const existing = statusContainer.querySelector(‘.temp-error’); if(existing) existing.remove(); const errDiv = document.createElement(‘div’); errDiv.className = ‘error-card temp-error’; errDiv.style.padding = ’15px’; errDiv.style.marginTop = ’10px’; errDiv.innerHTML = ` ${msg}`; statusContainer.prepend(errDiv); setTimeout(() => { if(errDiv && errDiv.remove) errDiv.remove(); }, 3000); } // —– Proceso de fusión usando pdf-lib (100% cliente) —– async function startMerge() { if(pdfFilesQueue.length === 0) { showTemporaryError(‘No hay archivos para fusionar. Agrega archivos PDF primero.’); return; } if(pdfFilesQueue.length === 1) { showTemporaryError(‘Necesitas al menos dos archivos PDF para fusionar. Añade más archivos.’); return; } // deshabilitar botones durante el proceso mergeBtn.disabled = true; resetBtn.disabled = true; clearAllBtn.disabled = true; // mostrar UI de progreso statusContainer.innerHTML = `

    Fusionando archivos…

    Cargando archivos y combinando páginas. Puede tomar un momento según el tamaño.

    ⚡ Procesamiento local rápido – tus datos nunca salen del dispositivo
    `; const progressText = document.getElementById(‘mergeProgressText’); try { const mergedPdf = await PDFLib.PDFDocument.create(); let totalFiles = pdfFilesQueue.length; for(let i = 0; i mergedPdf.addPage(page)); } if(progressText) progressText.innerText = ‘Generando el archivo PDF final…’; const mergedPdfBytes = await mergedPdf.save(); const blob = new Blob([mergedPdfBytes], { type: ‘application/pdf’ }); const downloadUrl = URL.createObjectURL(blob); const timestamp = new Date().toISOString().slice(0,19).replace(/:/g, ‘-‘); const fileName = `fusion_${timestamp}.pdf`; statusContainer.innerHTML = `

    ✅ ¡Fusión exitosa!

    Se fusionaron correctamente ${pdfFilesQueue.length} archivo(s) con todas sus páginas.

    Descargar PDF fusionado
    `; const downloadLinkEl = document.getElementById(‘finalDownloadLink’); if(downloadLinkEl) { downloadLinkEl.addEventListener(‘click’, (e) => { // permitir la descarga normalmente }); } const newMergeBtn = document.getElementById(‘newMergeReset’); if(newMergeBtn) { newMergeBtn.addEventListener(‘click’, () => { URL.revokeObjectURL(downloadUrl); resetAllState(); }); } } catch (err) { console.error(err); statusContainer.innerHTML = `

    Error en la fusión

    ${escapeHtml(err.message || ‘Error técnico inesperado. Por favor verifica tus archivos PDF.’)}

    `; const tryAgain = document.getElementById(‘tryAgainReset’); if(tryAgain) tryAgain.addEventListener(‘click’, () => resetAllState()); } finally { mergeBtn.disabled = false; resetBtn.disabled = false; clearAllBtn.disabled = false; } } // leer archivo como ArrayBuffer function readFileAsArrayBuffer(file) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result); reader.onerror = () => reject(new Error(`Error al leer el archivo: ${file.name}`)); reader.readAsArrayBuffer(file); }); } function resetAllState() { pdfFilesQueue = []; nextId = 1; renderFileList(); clearStatus(); mergeBtn.disabled = false; resetBtn.disabled = false; clearAllBtn.disabled = false; } // configuración drag & drop function setupDragAndDrop() { dropZone.addEventListener(‘dragover’, (e) => { e.preventDefault(); dropZone.classList.add(‘drag-over’); }); dropZone.addEventListener(‘dragleave’, () => { dropZone.classList.remove(‘drag-over’); }); dropZone.addEventListener(‘drop’, (e) => { e.preventDefault(); dropZone.classList.remove(‘drag-over’); const items = e.dataTransfer.files; if(items && items.length) { addFiles(Array.from(items)); } }); dropZone.addEventListener(‘click’, (e) => { if(e.target === dropZone || e.target.closest(‘.drop-area’) && !e.target.closest(‘#selectFilesBtn’)) { fileInput.click(); } }); } // inicialización de eventos function init() { setupDragAndDrop(); selectBtn.addEventListener(‘click’, (e) => { e.stopPropagation(); fileInput.click(); }); fileInput.addEventListener(‘change’, (e) => { if(e.target.files && e.target.files.length) { addFiles(Array.from(e.target.files)); } fileInput.value = »; }); mergeBtn.addEventListener(‘click’, startMerge); resetBtn.addEventListener(‘click’, resetAllState); clearAllBtn.addEventListener(‘click’, clearAllFiles); renderFileList(); } init(); })();

    Preguntas frecuentes sobre Fusionador de PDF

    ¿Es segura la herramienta Fusionador de PDF para mis documentos?
    Sí, absolutamente. PDF Nets procesa todos los archivos localmente en su navegador (Client-Side). Sus datos nunca se suben a ningún servidor.

    ¿Necesito instalar software para usar Fusionador de PDF?
    No, funciona completamente en línea desde cualquier dispositivo y navegador de forma gratuita.

    Das beste kostenlose Online-Tool für Fusionador de PDF

    Mit der Webanwendung PDF Nets können Sie Dokumente über das integrierte Fusionador de PDF Tool sicher und schnell bearbeiten. Keine Softwareinstallation erforderlich – absolute Privatsphäre und DSGVO-konforme clientseitige Datenverarbeitung.

    💡 Technische Details und Dokumentensicherheit
    Alle Ihre Dateien werden lokal in Ihrem Browser über erweitertes JavaScript und WebAssembly verarbeitet. Es werden keine Dokumente auf unsere Server hochgeladen, was 100% Privatsphäre und DSGVO-Konformität garantiert.

    Technical Specifications (PDF Nets Docs)

    • ⚙️ Processing Engine: 100% Secure Client-Side Scripting.
    • 🛡️ Data Compliance: Safe for corporate, financial, and legal files.
    🇬🇧 English Version - Enterprise PDF Engine
    Need to process your documents internationally? Access our high-performance English workspace for Fusionador de PDF. 100% secure, browser-based, client-side WebAssembly rendering. No installation required.
    🇩🇪 Deutsche Version - DSGVO-Konforme PDF-Bearbeitung
    Sichere und schnelle Bearbeitung Ihrer PDF-Dokumente direkt im Browser. 100% Datenschutz durch lokale Client-Side Verarbeitung für Fusionador de PDF.

    🛠️ PDF Nets Tipp: Sehen Sie sich unseren Leitfaden für die besten kostenlosen PDF-Tools 2026 an.

    Scroll al inicio

    ⚡ ...

    Tag Cloud Core: online tool, free net app, PDF Nets utilities 2026.