-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.js
117 lines (104 loc) · 3.21 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
require("dotenv").config();
const express = require("express");
const QRCode = require("qrcode");
const bwipjs = require("bwip-js");
const bodyParser = require("body-parser");
const PdfPrinter = require("pdfmake");
const ExcelJS = require("exceljs");
const generatePdfContent = require("./utils/pdfTemplate");
const generateExcelContent = require("./utils/excelTemplate");
const app = express();
const port = process.env.PORT || 3000;
app.use(bodyParser.json());
const fonts = {
Helvetica: {
normal: "Helvetica",
bold: "Helvetica-Bold",
italics: "Helvetica-Oblique",
bolditalics: "Helvetica-BoldOblique",
},
};
const printer = new PdfPrinter(fonts);
// 🔹 Endpoint para generar el PDF
app.post("/generate-pdf", async (req, res) => {
try {
const docDefinition = await generatePdfContent(req.body);
const pdfDoc = printer.createPdfKitDocument(docDefinition);
let chunks = [];
pdfDoc.on("data", (chunk) => chunks.push(chunk));
pdfDoc.on("end", () => {
const pdfBuffer = Buffer.concat(chunks);
res.setHeader("Content-Type", "application/pdf");
res.setHeader(
"Content-Disposition",
'attachment; filename="documento.pdf"'
);
res.send(pdfBuffer);
});
pdfDoc.end();
} catch (error) {
console.error("⚠️ Error generando PDF:", error.message);
res.status(500).send("Error interno del servidor");
}
});
// 🔹 Endpoint para generar archivo Excel
app.post("/generate-excel", async (req, res) => {
try {
const { columns, data } = req.body;
// Validación básica
if (!columns || !data) {
return res.status(400).send("Faltan columnas o datos en el JSON.");
}
const workbook = await generateExcelContent({ columns, data });
res.setHeader(
"Content-Type",
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
);
res.setHeader("Content-Disposition", 'attachment; filename="datos.xlsx"');
await workbook.xlsx.write(res);
res.end();
} catch (error) {
console.error("⚠️ Error generando Excel:", error.message);
res.status(500).send("Error interno del servidor");
}
});
// 🔹 Endpoint para generar código QR
app.get("/generate-qr", async (req, res) => {
const url = req.query.url;
if (!url) {
return res.status(400).send("URL is required");
}
try {
const qrCodeData = await QRCode.toDataURL(url);
const imgBuffer = Buffer.from(
qrCodeData.replace(/^data:image\/png;base64,/, ""),
"base64"
);
res.setHeader("Content-Type", "image/png");
res.send(imgBuffer);
} catch (err) {
res.status(500).send("Error generating QR code");
}
});
// 🔹 Endpoint para generar código de barras
app.get("/generate-barcode", async (req, res) => {
const text = req.query.text || "123456789012";
try {
const png = await bwipjs.toBuffer({
bcid: "code128",
text: text,
scale: 2,
height: 100,
includetext: true,
textxalign: "center",
});
res.setHeader("Content-Type", "image/png");
res.send(png);
} catch (err) {
res.status(500).send("Error generating barcode");
}
});
// 🔹 Iniciar servidor
app.listen(port, () => {
console.log(`✅ Servidor corriendo en http://localhost:${port}`);
});