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:
Ejemplos
Aquí puedes encontrar algunos repositorios de ejemplo que demuestran el uso de estos módulos en proyectos similares: