<p align="center"> <img src="https://genarogg.github.io/media/react-pdf-levelup/logo-de-react-pdf-levelup.png" alt="react-pdf-levelup logo" width="160" /> </p>
npm install react-pdf-levelup
bash
npm install react-pdf-levelup
`
馃殌 Caracter铆sticas
- 馃П Construye PDFs con componentes de React usando los componentes de react-pdf-levelup (LayoutPDF, texto, listas, QR, tablas, columnas, etc.)
- 馃柤 Vista previa en tiempo real de los documentos generados
- 馃帹 Editor en vivo con Monaco Editor para personalizar c贸digo JSX
- 馃摝 Plantillas predefinidas listas para usar
- 馃搫 Soporte para c贸digos QR, tablas, im谩genes, listas, layout din谩mico, etc.
- 馃攧 Generaci贸n de PDFs desde templates de React
- 馃摜 Descarga autom谩tica y vista previa de PDFs generados
馃搵 Funciones Principales
$3
Genera un PDF en formato base64 a partir de un componente de React.
`typescript
import { generatePDF } from "react-pdf-levelup";
const pdfBase64 = await generatePDF({
template: MyPDFTemplate,
data: {
title: "Mi Documento",
items: ["Item 1", "Item 2", "Item 3"],
},
});
`
Par谩metros:
- template: Componente de React que define la estructura del PDF
- data: Datos opcionales que se pasar谩n al template
Retorna: Promise que resuelve a un string en base64 del PDF generado
$3
Decodifica un PDF en base64 y permite descargarlo o abrirlo en una nueva pesta帽a.
`typescript
import { decodeBase64Pdf } from "react-pdf-levelup";
// Despu茅s de generar el PDF
const pdfBase64 = await generatePDF({ template: MyTemplate });
// Descargar y abrir el PDF
decodeBase64Pdf(pdfBase64, "mi-documento.pdf");
`
Par谩metros:
- base64: String del PDF en formato base64
- fileName: Nombre del archivo para la descarga
Funcionalidad:
- Descarga autom谩tica del archivo PDF
- Abre el PDF en una nueva pesta帽a del navegador
- Limpia autom谩ticamente los recursos de memoria
馃挕 Ejemplo de Uso con componentes levelup
`typescript
import React from 'react';
import { generatePDF, decodeBase64Pdf, LayoutPDF, H1, P, Strong, Em, HR, Container, Row, Col6, UL, LI, QR, Table, Thead, Tbody, Tr, Th, Td } from 'react-pdf-levelup';
const MyPDFTemplate = ({ data }) => (
Documento de Presentaci贸n
Bienvenido a react-pdf-levelup. Construye PDFs con componentes de React de forma r谩pida y tipada.
- Plantillas listas
- Componentes composables
- TypeScript
- Integraci贸n moderna
Producto
Cantidad
Precio
Total
Etiqueta T茅rmica 50x30
2
$5.00
$10.00
);
// Funci贸n para generar y descargar PDF
const handleGeneratePDF = async () => {
try {
const pdfBase64 = await generatePDF({
template: MyPDFTemplate,
data: {
title: 'Mi Lista de Tareas',
items: [
'Revisar documentaci贸n',
'Implementar nuevas funciones',
'Realizar pruebas',
'Desplegar a producci贸n'
]
}
});
// Descargar y abrir el PDF
decodeBase64Pdf(pdfBase64, 'lista-tareas.pdf');
} catch (error) {
console.error('Error generando PDF:', error);
}
};
// Componente React
const App = () => {
return (
Generador de PDF
);
};
export default App;
`
馃帹 Templates Avanzados
`typescript
import { StyleSheet, Font } from '@react-pdf/renderer';
// Ejemplo de template para factura
const InvoiceTemplate = ({ data }) => (
{data.company}
Factura #{data.invoiceNumber}
Cliente: {data.customer.name}
Email: {data.customer.email}
{data.items.map((item, index) => (
{item.name}
{item.quantity}
${item.price}
))}
Total: ${data.total}
);
`
馃敡 Configuraci贸n Avanzada
$3
`typescript
const handlePDFGeneration = async () => {
try {
const pdfBase64 = await generatePDF({
template: MyTemplate,
data: myData,
});
decodeBase64Pdf(pdfBase64, "documento.pdf");
} catch (error) {
if (error.message.includes("Template not provided")) {
console.error("Error: No se proporcion贸 un template v谩lido");
} else {
console.error("Error inesperado:", error.message);
}
}
};
`
$3
`typescript
const generatePDFOnly = async () => {
const pdfBase64 = await generatePDF({
template: MyTemplate,
data: myData,
});
// Usar el base64 para otros prop贸sitos (env铆o por API, almacenamiento, etc.)
console.log("PDF generado:", pdfBase64);
return pdfBase64;
};
`
馃洜 Dependencias
Esta librer铆a utiliza internamente:
- @react-pdf/renderer - Para la generaci贸n de PDFs
- react - Para los componentes JSX
馃摑 Notas Importantes
- La funci贸n decodeBase64Pdf solo funciona en contexto de navegador (requiere document)
- Los templates deben usar los componentes de react-pdf-levelup y retornar JSX v谩lido
- El PDF se genera de forma as铆ncrona, aseg煤rate de usar await o .then()
- Los recursos de memoria se limpian autom谩ticamente despu茅s de la descarga
馃寪 API REST para generar PDFs
- Genera PDFs v铆a HTTP desde cualquier lenguaje usando un template TSX en base64 y un objeto de datos.
- Devuelve un JSON con data.pdf que es el PDF en base64.
$3
- Cloud: https://react-pdf-levelup.nimbux.cloud/api
- Auto鈥慼ospedado ZIP: https://genarogg.github.io/react-pdf-levelup/public/api.zip
`text
https://react-pdf-levelup.nimbux.cloud/api
`
`text
https://genarogg.github.io/react-pdf-levelup/public/api.zip
`
$3
POST con Content-Type: application/json:
`json
{
"template": "",
"data": { "campo": "valor" }
}
`
$3
`json
{
"data": {
"pdf": ""
}
}
`
$3
`ts
import fs from "fs";
import path from "path";
type ApiResponse = { data?: { pdf?: string } };
const ENDPOINT_API = "https://react-pdf-levelup.nimbux.cloud/api";
const petition = async ({
template,
data,
}: {
template: string;
data: any;
}): Promise => {
const templatePath = path.join(process.cwd(), "src", "useExample", template);
const tsxCode = fs.readFileSync(templatePath, "utf-8");
const templateBase64 = Buffer.from(tsxCode, "utf-8").toString("base64");
const res = await fetch(ENDPOINT_API, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ template: templateBase64, data }),
});
if (!res.ok)
throw new Error( API error (${res.status}): ${await res.text()});
const json = (await res.json()) as ApiResponse;
return json?.data?.pdf ?? "";
};
const savePDF = (base64: string) => {
const buffer = Buffer.from(base64, "base64");
const outputPath = path.join(process.cwd(), "example.pdf");
fs.writeFileSync(outputPath, buffer);
console.log("PDF guardado:", outputPath);
};
`
$3
- Descarga el paquete ZIP y despliega en tu infraestructura (Node/Docker/PaaS).
- Exp贸n el endpoint /api/pdf` con el mismo contrato JSON.