javascript

Exportar PDF de html2pdf.js (jsPDF) como Blob

En el tutorial de hoy vamos a trabajar con JavaScript y la librería html2pdf.js que a su vez usa jsPDF. Estas librerías sirven para generar un PDF y descargarlo, como ya te he mostrado en otro tutorial.

Lo que vamos a ver hoy es cómo obtener el PDF generado como un BLOB, es decir, como un montón de bytes que representan al archivo, ya sea para descargarlo, almacenarlo en otro lugar o enviarlo a algún servidor.

Creando PDF

Ya sea que estés usando html2pdf.js o jsPDF, este tutorial no cubre la generación del PDF; sino su exportación. Revisa el otro tutorial para saber cómo crear un PDF a partir de HTML en el lado del cliente.

Obtener PDF como archivo

Ahora veamos lo interesante: cómo obtener los bytes del PDF, obteniendo la representación BLOB del PDF. Se puede generar un PDF con:

html2pdf()
.set({
    margin: 1,
    filename: 'documento.pdf',
    image: {
        type: 'jpeg',
        quality: 0.98
    },
    html2canvas: {
        scale: 3, // A mayor escala, mejores gráficos, pero más peso
        letterRendering: true,
    },
    jsPDF: {
        unit: "in",
        format: "a3",
        orientation: 'portrait' // landscape o portrait
    }
})

Y después, al invocar a save, el documento PDF se va a guardar. Pero para obtenerlo como BLOB, hay que invocar a output pasándole una cadena como primer argumento indicando el formato, que según la documentación de jsPDF puede ser arraybuffer, blob, bloburi, datauristring y otras más.

En este caso quiero el PDF como Blob así que indico blob en el argumento, y al hacerlo, se nos devolverá una promesa que al ser resuelta traerá consigo los bytes para armar el PDF.

const $elementoParaConvertir = document.body; // <-- Aquí puedes elegir cualquier elemento del DOM
const pdfComoBlob = await html2pdf()
.set({
    margin: 1,
    filename: 'documento.pdf',
    image: {
        type: 'jpeg',
        quality: 0.98
    },
    html2canvas: {
        scale: 3, // A mayor escala, mejores gráficos, pero más peso
        letterRendering: true,
    },
    jsPDF: {
        unit: "in",
        format: "a3",
        orientation: 'portrait' // landscape o portrait
    }
})
.from($elementoParaConvertir)
.output("blob");

La parte importante es al invocar output("blob"), que devolverá una promesa (por ello el uso de await) y al ser resuelta tendrá el PDF como bytes.

Alternativamente, si no quieres usar async y await para esperar la promesa, puedes usar then y especificar el callback:

html2pdf().set().from().output("blob").then((pdfComoBlob)=>{

// Aquí hacer algo con el PDF

});

Y así es como puedes exportar un PDF creado con html2pdf, jsPDF y obviamente JavaScript a su representación Blob. Cuando tengas el blob, puedes hacer varias cosas, entre ellas subirlo a un servidor con cualquier lenguaje de programación.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.