Saltar al contenido principal

Descarga de archivos PDF

¿Qué hace este código?​

Este script en Node.js está diseñado para descargar archivos en formato PDF. Utiliza varias tecnologías, incluyendo Express.js para el servidor, Axios para las peticiones HTTP y PDFKit para la creación de los documentos PDF. Su funcionalidad principal es obtener datos de un servidor remoto, generar un PDF con esos datos y luego proporcionar este PDF al usuario final.

Configuración del Proyecto​

Para ejecutar este proyecto, necesitas instalar algunas dependencias cruciales que permitirán manejar las peticiones, generar PDFs y servir archivos estáticos. Estas dependencias son:

  • Express
  • Axios
  • PDFKit
  • fs (incluido en Node.js)

Ejecuta el siguiente comando para instalar las bibliotecas necesarias:

npm install express axios pdfkit

Código del Servidor​

Inicialización y Configuración de Express​

Primero, se configura un servidor web básico utilizando Express. Este servidor también servirá archivos estáticos desde una carpeta pública.

const express = require('express');
const app = express();
const path = require('path');

app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
Ruta para Generar y Descargar PDF
Esta ruta maneja la creación y descarga de un archivo PDF. Primero, obtiene datos a través de una petición HTTP utilizando Axios. Luego, pasa estos datos a la función generatePDF que crea el documento PDF.

javascript
Copy code
const axios = require('axios');
const PDFDocument = require('pdfkit');
const fs = require('fs');

app.get('/get-data-and-pdf', async (req, res) => {
try {
const response = await axios.get('http://localhost:3000/get-data');
const data = response.data;
const pdfPath = await generatePDF(data);
res.sendFile(pdfPath);
} catch (error) {
console.error('Error al obtener datos del servidor principal:', error);
res.status(500).json({ error: 'Error al obtener datos del servidor principal' });
}
});

Función para Crear el PDF​

Esta función utiliza PDFKit para generar el documento PDF. Guarda el archivo en el sistema local y luego lo retorna para su descarga.

function generatePDF(data) {
return new Promise((resolve, reject) => {
const doc = new PDFDocument();
const pdfPath = path.join(__dirname, 'file.pdf');
const writeStream = fs.createWriteStream(pdfPath);
doc.pipe(writeStream);
doc.text(`Datos recibidos del servidor: ${JSON.stringify(data)}`);
doc.end();
writeStream.on('finish', () => {
resolve(pdfPath);
});
writeStream.on('error', (error) => {
reject(error);
});
});
}

Iniciar Servidor​

Finalmente, el servidor se inicia en un puerto específico. En este caso, el puerto 4000.

const PORT = 4000;
app.listen(PORT, () => {
console.log(`Client listening at port: ${PORT}.`);
});

Resumen

Este servidor en Node.js permite a los usuarios descargar documentos PDF generados dinámicamente, que contienen datos obtenidos desde un servidor externo. La combinación de Express, Axios y PDFKit facilita el manejo eficiente de archivos y la interacción con APIs externas.

Documentación

Para una comprensión más profunda y detalles adicionales, se recomienda consultar las documentaciones oficiales:

Express.js

Axios

PDFKit

Ejemplos

Aquí puedes encontrar algunos repositorios de ejemplo que demuestran el uso de estos módulos en proyectos similares:

Node.js PDF Generation Example

Advanced Node.js Server Examples