Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
En el desarrollo web contemporáneo, el manejo de intrincados procesos asíncronos y la producción de contenidos dinámicos sobre la marcha suelen ser necesarios para crear sistemas eficaces y con capacidad de respuesta. Node-IronPDF y RxJS(Extensiones reactivas para JavaScript) son dos potentes bibliotecas que pueden ayudar a los desarrolladores a alcanzar fácilmente estos objetivos. Juntas, ofrecen una potente solución para gestionar flujos de datos en tiempo real y producir documentos PDF pulidos en un entorno Node.js.
Se creó una biblioteca de extensiones reactivas para JavaScript llamada RxJS para facilitar la programación reactiva conObservablesel objetivo es simplificar la creación de aplicaciones asíncronas o basadas en retrollamadas con pilas de llamadas más depurables. Con sus amplios operadores para crear, combinar, filtrar y transformar flujos de datos, permite a los desarrolladores trabajar de forma declarativa con los datos. Esto mejora la manejabilidad y la intuitividad de la gestión de eventos, peticiones asíncronas y otras fuentes de datos en tiempo real. En las aplicaciones web altamente interactivas de hoy en día, la capacidad de RxJS para manejar tareas asíncronas complicadas con elegancia es importante.
En este artículo veremos cómo incluir Node IronPDF y la biblioteca de extensiones reactivas RxJS para JavaScript en una aplicación Node.js. Comenzaremos repasando los fundamentos de la instalación de las bibliotecas necesarias y la configuración de un proyecto Node.js. A continuación, nos adentraremos en la creación y gestión de métodos de creación de Observables con RxJS y le mostraremos cómo utilizar Node-IronPDF para utilizar estos Observables para iniciar la creación de PDFs. Cuando termines de leer este artículo, sabrás exactamente cómo utilizar la sofisticada generación de PDF con programación reactiva para crear aplicaciones Node.js dinámicas y con capacidad de respuesta.
Una biblioteca para la programación reactiva con Observables -un componente crucial de las aplicaciones reactivas- se llamaRxJS. Tiene una estructura de archivos más modular que hace que trabajar con flujos de datos asíncronos, eventos y operaciones en aplicaciones JavaScript sea más fácil de manejar y más declarativo para los desarrolladores. Una estructura de archivos modular no solo mejora la legibilidad y la capacidad de mantenimiento, sino que también favorece la reutilización del código y facilita las pruebas. A continuación te explicamos cómo puedes estructurar tu proyecto basado en RxJS de forma modular.
Observables que emiten varios valores a lo largo del tiempo, operadores que manipulan, filtran y combinan estos flujos de datos y herramientas sólidas para gestionar la concurrencia y las operaciones asíncronas son algunos de los componentes clave de RxJS. RxJS fomenta el uso de la programación funcional, que permite a los programadores representar intrincados procesos asíncronos en código claro y comprensible. Lograr pilas de llamadas mejores y más depurables en RxJS es totalmente posible con los enfoques y herramientas adecuados.
El procesamiento de datos en tiempo real, la programación basada en eventos, el control de intrincados procesos asíncronos como las peticiones HTTP y el manejo reactivo de las interacciones de la interfaz de usuario son algunos de los casos de uso más comunes de RxJS. Es una opción muy apreciada para desarrollar aplicaciones reactivas y escalables tanto en el frontend como en el backend de JavaScript debido a su adaptabilidad y a su amplia superficie de API.
Para crear y configurar RxJS en un proyecto Node.js utilizando npm, siga estos pasos:
A continuación, utilice npm para añadir la última versión de la biblioteca RxJS como dependencia de su proyecto mediante npm get. También podemos comprobar explícitamente la versión de npm para la versión de biblioteca compatible:
npm install rxjs
npm install rxjs
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install rxjs
RxJS puede utilizarse en su aplicación Node.js una vez instalado. Se puede crear un Observable y suscribirse a él mediante el siguiente ejemplo sencillo:
El siguiente código debe añadirse a un archivo:
// Import necessary RxJS modules
const { Observable } = require('rxjs');
// Create an Observable that emits three values
const observable = new Observable(observer => {
observer.next('Hello');
observer.next('RxJS');
observer.next('World');
observer.complete();
});
// Subscribe to the Observable
observable.subscribe({
next: value => console.log(value),
complete: () => console.log('Observable completed'),
});
// Import necessary RxJS modules
const { Observable } = require('rxjs');
// Create an Observable that emits three values
const observable = new Observable(observer => {
observer.next('Hello');
observer.next('RxJS');
observer.next('World');
observer.complete();
});
// Subscribe to the Observable
observable.subscribe({
next: value => console.log(value),
complete: () => console.log('Observable completed'),
});
' Import necessary RxJS modules
'INSTANT VB TODO TASK: The following line could not be converted:
const
If True Then
Observable } = require( 'rxjs');
' Create an Observable that emits three values
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
const observable = New Observable(observer =>
If True Then
observer.next( 'Hello');
observer.next( 'RxJS');
observer.next( 'World');
observer.complete()
End If
)
' Subscribe to the Observable
observable.subscribe({ [next]:= Function(value) console.log(value), complete:= Function() console.log( 'Observable completed')});
Creación de un observable: Usando el constructor Observable, creamos un observable que emite los valores "Hello", "RxJS" y "World" en ese orden.
Suscripción: Utilizamos el método subscribe para suscribirnos al observable. La llamada de retorno completa registra un mensaje cuando el Observable se completa, y la llamada de retorno posterior registra cada valor que se emite al terminal.
RxJS dispone de una amplia gama de operadores para combinar, filtrar y modificar observables. Estos operadores están disponibles para importarlos a su aplicación según sea necesario:
const { Observable } = require('rxjs');
const { map, filter } = require('rxjs/operators');
// Example: Using operators with Observables
const observable = new Observable(observer => {
observer.next(1);
observer.next(2);
observer.next(3);
observer.complete();
});
observable.pipe(
filter(value => value > 1),
map(value => value * 10)
).subscribe({
next: value => console.log(value),
complete: () => console.log('Observable completed'),
});
const { Observable } = require('rxjs');
const { map, filter } = require('rxjs/operators');
// Example: Using operators with Observables
const observable = new Observable(observer => {
observer.next(1);
observer.next(2);
observer.next(3);
observer.complete();
});
observable.pipe(
filter(value => value > 1),
map(value => value * 10)
).subscribe({
next: value => console.log(value),
complete: () => console.log('Observable completed'),
});
'INSTANT VB TODO TASK: The following line could not be converted:
const
If True Then
Observable } = require( 'rxjs');
'INSTANT VB TODO TASK: The following line could not be converted:
const
If True Then
map, filter } = require( 'rxjs/operators');
' Example: Using operators with Observables
const observable = New Observable(Sub(observer)
observer.next(1)
observer.next(2)
observer.next(3)
observer.complete()
End Sub)
observable.pipe(filter(Function(value) value > 1), map(Function(value) value * 10)).subscribe({ [next]:= Function(value) console.log(value), complete:= Function() console.log( 'Observable completed')});
Este ejemplo muestra cómo construir y trabajar con Observables utilizando operadores de la biblioteca RxJS. En primer lugar, los operadores map y filter se importan del módulo rxjs/operators, y la clase Observable se carga del módulo rxjs. El siguiente paso es crear un Observable, que emite consecutivamente los valores 1, 2 y 3 antes de terminar. La técnica de la tubería convierte este Observable, permitiendo el encadenamiento de varios operadores. El operador de mapa multiplica cada uno de estos valores por 10 después de que el operador de filtro limite los valores que pueden pasar a aquellos mayores que uno.
A continuación, se suscribe al Observable alterado, y cada uno de los valores resultantes se registra en la consola mediante la devolución de llamada posterior, que también registra un mensaje que indica que el Observable se ha completado cuando finaliza. En consecuencia, 20 y 30 aparecerán en la salida de la consola, seguidos de "Observable completed".
Para utilizar RxJS(Extensiones reactivas para JavaScript) y Node-IronPDF en una aplicación Node.js, combinaremos las características de programación reactiva de RxJS con las funcionalidades de creación de PDF de Node-IronPDF. Con esta combinación, podemos gestionar flujos de datos asíncronos y producir documentos PDF sobre la marcha en respuesta a eventos o modificaciones en los datos.
UnIronPDF library es una potente biblioteca Node.js que pretende convertir contenido HTML en páginas PDF de increíble calidad. Acelera el proceso de convertir archivos HTML, CSS y otros de JavaScript en PDFs correctamente formateados sin comprometer el contenido original en línea. Esta es una herramienta altamente útil para aplicaciones web que necesitan producir documentos dinámicos e imprimibles, como facturas, certificaciones e informes.
IronPDF cuenta con varias funciones, como la posibilidad de personalizar la configuración de la página, los encabezados, los pies de página y la opción de añadir fuentes e imágenes. Puede gestionar estilos y diseños complejos para garantizar que cada salida PDF de prueba siga las especificaciones. Además, IronPDF controla la ejecución de JavaScript dentro de HTML, lo que permite una representación precisa del contenido dinámico e interactivo.
Generación de PDF a partir de HTML
Convierte HTML, CSS y JavaScript a PDF. Admite dos estándares web modernos: media queries y diseño responsivo. Práctico para utilizar HTML y CSS para decorar dinámicamente documentos PDF, facturas e informes.
Edición de PDF
Es posible añadir texto, imágenes y otros materiales a PDF ya existentes. Extrae texto e imágenes de archivos PDF. Fusionar varios PDF en un solo archivo. Dividir archivos PDF en varios documentos distintos. Añade encabezados, pies de página, anotaciones y marcas de agua.
**Rendimiento y fiabilidad
En contextos industriales, el alto rendimiento y la fiabilidad son atributos de diseño deseables. Maneja fácilmente conjuntos de documentos grandes.
Para obtener las herramientas que necesitas para trabajar con PDF en proyectos de Node.js, instala el paquete de IronPDF.
npm install @ironsoftware/ironpdf
npm install @ironsoftware/ironpdf
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'npm install @ironsoftware/ironpdf
Cree un archivo y configure Node-IronPDF para integrar RxJS:
// Import necessary modules
const { Observable } = require('rxjs');
const { IronPdf } = require('node-ironpdf');
// Create an instance of Node-IronPDF
const ironPdf = new IronPdf();
// Example Observable that emits data periodically
const observable = new Observable(observer => {
let counter = 0;
const intervalId = setInterval(() => {
counter++;
observer.next({ eventNumber: counter });
if (counter === 3) {
observer.complete();
clearInterval(intervalId);
}
}, 1000); // Emit every second
});
// Subscribe to the Observable and generate PDFs with Node-IronPDF
observable.subscribe({
next: async data => {
try {
const htmlContent = `<h1>Event Report</h1><p>Event Number: ${data.eventNumber}</p>`;
const pdf = await ironPdf.createFromHtml(htmlContent);
const filePath = `./reports/event_report_${data.eventNumber}.pdf`;
await pdf.saveAs(filePath);
console.log(`PDF report generated: ${filePath}`);
} catch (error) {
console.error('Error generating PDF:', error);
}
},
complete: () => console.log('Observable completed'),
});
// Import necessary modules
const { Observable } = require('rxjs');
const { IronPdf } = require('node-ironpdf');
// Create an instance of Node-IronPDF
const ironPdf = new IronPdf();
// Example Observable that emits data periodically
const observable = new Observable(observer => {
let counter = 0;
const intervalId = setInterval(() => {
counter++;
observer.next({ eventNumber: counter });
if (counter === 3) {
observer.complete();
clearInterval(intervalId);
}
}, 1000); // Emit every second
});
// Subscribe to the Observable and generate PDFs with Node-IronPDF
observable.subscribe({
next: async data => {
try {
const htmlContent = `<h1>Event Report</h1><p>Event Number: ${data.eventNumber}</p>`;
const pdf = await ironPdf.createFromHtml(htmlContent);
const filePath = `./reports/event_report_${data.eventNumber}.pdf`;
await pdf.saveAs(filePath);
console.log(`PDF report generated: ${filePath}`);
} catch (error) {
console.error('Error generating PDF:', error);
}
},
complete: () => console.log('Observable completed'),
});
' Import necessary modules
'INSTANT VB TODO TASK: The following line could not be converted:
const
If True Then
Observable } = require( 'rxjs');
'INSTANT VB TODO TASK: The following line could not be converted:
const
If True Then
IronPdf } = require( 'node-ironpdf');
' Create an instance of Node-IronPDF
const ironPdf = New IronPdf()
' Example Observable that emits data periodically
const observable = New Observable(Sub(observer)
Dim counter As let = 0
const intervalId = setInterval(Sub()
counter += 1
observer.next({ eventNumber:= counter })
If counter == 3 Then
observer.complete()
clearInterval(intervalId)
End If
End Sub, 1000)
End Sub)
' Subscribe to the Observable and generate PDFs with Node-IronPDF
'INSTANT VB TODO TASK: Lambda expressions and anonymous methods are not converted by Instant VB if local variables of the outer method are referenced within the anonymous method:
observable.subscribe({ [next]:= async data =>
If True Then
Try
const htmlContent = `(Of h1) [Event] Report</h1>(Of p) [Event] Number: $
If True Then
data.eventNumber
End If
</p>`
const pdf = Await ironPdf.createFromHtml(htmlContent)
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
' const filePath = `./reports/event_report_$
' {
' data.eventNumber
' }
.pdf`
Await pdf.saveAs(filePath)
console.log(`PDF report generated:= ${filePath}`)
Catch e1 As [error]
console.error( '@Error generating PDF:', @error);
End Try
End If
, complete: Function() console.log( 'Observable completed'),
End If
)
En primer lugar, se importan los módulos necesarios: IronPDF de Node-IronPDF y Observable de RxJS. IronPDF ofrece funciones para producir y modificar documentos PDF dentro de Node.js, mientras que Observable se utiliza para construir un flujo de datos que emite información a lo largo del tiempo. Para facilitar las operaciones de creación y gestión de PDF más adelante en el código, se crea una instancia de IronPDF.
La definición de un Observable con el nombre observable constituye la base de la aplicación. Este Observable está hecho para utilizar setInterval para liberar objetos de datos{ eventNumber} regularmente. En este caso, emite tres valores a intervalos de un segundo(1000 milisegundos): { eventoNúmero: 1}, { eventoNúmero: 2}y{ eventoNúmero: 3}.
La devolución de llamada posterior en la suscripción al observable Observable se ocupa de cada valor emitido(datos) tal y como viene. Basándose en el eventNumber de los datos transmitidos, una cadena de contenido HTML(htmlContenido) se crea dentro de esta devolución de llamada. El documento PDF se crea posteriormente utilizando document.fromHtml(htmlContenido) con estecontenido HTML. En el directorio./reports, cada archivo PDF se guarda con un nombre de archivo distinto(event_report_1.pdf, event_report_2.pdf, etc.).
Utilizando un bloque try...catch, se incluye la gestión de errores en la llamada de retorno posterior para gestionar cualquier posible error que pueda surgir durante el proceso de creación del PDF. Cuando se produce un error, se utiliza una consola para registrarlo en console.error.
Por último, durante la devolución de llamada completa de la suscripción, se registra en la consola un mensaje titulado "Observable completed", que significa que el Observable ha concluido su emisión de valores.
La programación reactiva y la producción dinámica de PDF funcionan bien juntas, como demuestra la integración de RxJS con Node IronPDF en una aplicación Node.js. En respuesta a eventos o cambios de datos en tiempo real, esta combinación proporciona una solución fiable para gestionar flujos de datos asíncronos y producir documentos PDF de calidad experta.
Mediante el uso de RxJS Observables, los desarrolladores pueden supervisar y modificar eficazmente los flujos de datos asíncronos, simplificando la gestión de flujos de trabajo complejos y permitiendo respuestas declarativas y reactivas a las interacciones del usuario o a eventos externos. Aplicaciones como cuadros de mando analíticos, herramientas interactivas de elaboración de informes y sistemas de supervisión que necesitan manejar datos en tiempo real deben tener esta capacidad.
Por último, RxJS combinado con Node IronPDF permite a los desarrolladores crear aplicaciones escalables y con capacidad de respuesta que gestionan datos en tiempo real de forma eficaz y ofrecen una creación de PDF sin problemas. Esta combinación hace posible el desarrollo de aplicaciones complejas, basadas en eventos y con capacidad de generación de informes dinámicos que mejoran la eficacia operativa y la experiencia del usuario. Juntos, RxJS y Node IronPDF proporcionan un potente conjunto de herramientas para la programación contemporánea en Node.js, con tareas como la creación de documentos dinámicos, la interconexión con fuentes de datos en tiempo real y la elaboración de informes periódicos.
Los desarrolladores pueden elegir el mejor modelo con facilidad cuando existen opciones de licencia específicas para cada proyecto que están bien definidas. Estas características permiten a los desarrolladores abordar diversos problemas de forma rápida, eficaz y satisfactoria.
9 productos API .NET para sus documentos de oficina