Cómo migrar de PDFreactor a IronPDF en C#
Migrar de PDFreactora IronPDF: Guía completa de migración a C
La migración de PDFreactoraIronPDFelimina las dependencias de Java y la infraestructura de servidor, al tiempo que proporciona capacidades equivalentes de conversión de HTML a PDF a través de una biblioteca .NET nativa. Esta guía proporciona una ruta de migración completa, paso a paso, que sustituye su arquitectura de servidor basada en Java por una biblioteca en proceso que se integra perfectamente en las aplicaciones .NET.
Por qué migrar de PDFreactora IronPDF
Entendiendo PDFreactor
PDFreactor es un potente servidor de conversión de HTML a PDF que se integra en varias plataformas. Como solución comercial, PDFreactoraprovecha su tecnología patentada para convertir contenido HTML y CSS en documentos PDF de alta calidad. Entre sus notables atributos, PDFreactores compatible con una amplia gama de propiedades CSS, lo que lo convierte en un firme candidato para la representación de diseños complejos.
Sin embargo, la dependencia de PDFreactorde Java presenta ciertos retos en entornos .NET, donde su naturaleza no nativa puede complicar el despliegue y la integración. Su dependencia de Java crea una sobrecarga adicional en las aplicaciones .NET, lo que a menudo requiere un trabajo de integración adicional.
El problema de la dependencia de Java
La arquitectura de PDFreactorplantea varios retos en entornos .NET:
Java Runtime Required: Requiere la instalación de JRE/JDK en todos los servidores.
Arquitectura de servidor: Se ejecuta como un servicio independiente que requiere infraestructura adicional. Como solución basada en servidor, PDFreactorrequiere llamadas a la API REST para cada conversión.
Despliegue complejo: Gestionar las dependencias de Java en un ecosistema principalmente .NET puede complicar la configuración y aumentar los costes de mantenimiento. Dos tiempos de ejecución (Java + .NET) para gestionar en pipelines CI/CD.
Comunicación entre procesos: La API REST o la comunicación por socket añaden latencia. Cada conversión de PDF requiere un viaje de ida y vuelta HTTP al servidor.
Gestión de licencias independiente: Licencia vinculada a la instancia del servidor, no a la aplicación. Licencia por servidor vinculada a una instancia de servicio Java.
- Aislamiento de recursos: gestión separada de memoria de proceso y CPU. Servidor adicional para supervisar, escalar y mantener.
Comparación entre PDFreactore IronPDF
| Característica/Aspecto | PDFreactor | IronPDF |
|---|---|---|
| Librería .NET nativa | No (basado en Java) | Sí |
| Runtime | Java (servidor externo) | .NET nativo (en proceso) |
| Arquitectura | Servicio API REST | Biblioteca NuGet |
| Despliegue | Java + configuración del servidor | Paquete NuGet único |
| Dependencias | JRE + cliente HTTP | Autocontenido |
| Latencia | Red de ida y vuelta | Llamadas directas a métodos |
| Capacidad multiplataforma | Sí (depende de Java) | Sí (incluido Chromium) |
| Soporte CSS | Compatibilidad avanzada con CSS3, CSS Paged Media | Compatibilidad completa con HTML5/CSS3 |
| Complejidad de Implementación | Más complejo debido a Java | Sencillo, se integra directamente con .NET |
| Funciones de manipulación de PDF | Básico (sólo generación) | Extensa, incluyendo fusión, división, edición y anotación |
A diferencia de PDFreactor,IronPDFse presenta como una biblioteca .NET nativa, diseñada específicamente para integrarse a la perfección en proyectos .NET sin dependencias externas como Java.IronPDFutiliza un motor de renderizado Chromium integrado, lo que le permite convertir HTML a PDF con sólo unas pocas líneas de código.
Para los equipos que planifican la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una solución nativa .NET que elimina la complejidad del servidor Java a la vez que ofrece una gestión integral del ciclo de vida del PDF.
Antes de empezar
Prerrequisitos
- <Entorno .NET: .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acceso a NuGet: Capacidad para instalar paquetes NuGet
- Licencia IronPDF: Obtenga su clave de licencia en ironpdf.com
Cambios en el paquete NuGet
# Remove PDFreactorNuGet packages
dotnet remove package PDFreactor.NET
dotnet remove package PDFreactor.Native.Windows.x64
# Stop PDFreactorserver service (if running locally)
# Windows: net stop PDFreactor
# Linux: sudo systemctl stop pdfreactor
# Install IronPDF
dotnet add package IronPdf# Remove PDFreactorNuGet packages
dotnet remove package PDFreactor.NET
dotnet remove package PDFreactor.Native.Windows.x64
# Stop PDFreactorserver service (if running locally)
# Windows: net stop PDFreactor
# Linux: sudo systemctl stop pdfreactor
# Install IronPDF
dotnet add package IronPdfConfiguración de licencias
PDFreactor (basado en servidor):
// License configured on server via config file or command line
// Client connects to licensed server
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423");// License configured on server via config file or command line
// Client connects to licensed server
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423");IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF (nivel de aplicación):
// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.comIdentificar el uso de PDFreactor
# Find PDFreactorusage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .
# Find CSS Paged Mediarules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .# Find PDFreactorusage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .
# Find CSS Paged Mediarules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .Referencia completa de la API
Cambios en el espacio de nombres
// Before: PDFreactor
using RealObjects.PDFreactor;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;// Before: PDFreactor
using RealObjects.PDFreactor;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.comCore Class Mappings
| PDFreactor | IronPDF | Notas |
|---|---|---|
PDFreactor | <código>ChromePdfRenderer</código | Clase principal de conversión |
Configuración | <código>ChromePdfRenderOptions</código | Ajustes PDF |
Resultado | Documento PDF | Documento de salida |
config.Document = html | renderer.RenderHtmlAsPdf(html) | Entrada HTML |
resultado.Document (byte[]) | <código>pdf.BinaryData</código | Bytes en bruto |
Mapeo de propiedades de configuración
| Configuración de PDFreactor | Opciones de renderizado de IronPDF | Notas |
|---|---|---|
config.Document = html | renderer.RenderHtmlAsPdf(html) | Contenido HTML |
config.Document = url | <código>renderer.RenderUrlAsPdf(url)</código | Conversión de URL |
config.PageFormat = PageFormat.A4 | <código>RenderingOptions.PaperSize = PdfPaperSize.A4</código | Tamaño del papel |
| <código>config.PageOrientation</código | <código>RenderingOptions.PaperOrientation</código | Orientación |
| <código>config.PageMargins</código | <código>RenderingOptions.MarginTop/Bottom/Left/Right</código | Márgenes (mm) |
config.EnableJavaScript = true | <código>RenderingOptions.EnableJavaScript = true</código | Ejecución JS |
| <código>config.AddUserStyleSheet(css)</código | Insertar CSS en HTML | Inyección de CSS |
| <código>config.Title</código | <código>pdf.MetaData.Title</código | Metadatos |
| <código>config.Encryption</código | <código>pdf.SecuritySettings</código | Seguridad |
Nuevas funciones no disponibles en PDFreactor
| Características de IronPDF | Descripción |
|---|---|
PdfDocument.Merge() | Combinar varios PDF |
| <código>pdf.ApplyWatermark()</código | Añadir marcas de agua |
| <código>pdf.ExtractAllText()</código | Extracción de texto |
| <código>pdf.Form</código | Relleno de formularios |
| <código>pdf.Sign()</código | Firmas digitales |
Ejemplos de migración de código
Ejemplo 1: Conversión de cadenas HTML a PDF
Antes (PDFreactor):
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactorpdfReactor = new PDFreactor();
string html = "<html><body><h1>Hello World</h1></body></html>";
Configuration config = new Configuration();
config.Document = html;
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("output.pdf", result.Document);
}
}// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactorpdfReactor = new PDFreactor();
string html = "<html><body><h1>Hello World</h1></body></html>";
Configuration config = new Configuration();
config.Document = html;
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("output.pdf", result.Document);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comLa diferencia fundamental es el patrón arquitectónico. PDFreactorrequiere la creación de una instancia de PDFreactor(que se conecta al servidor Java), un objeto Configuraciónseparado para mantener la configuración y el contenido HTML, llamar a Convert() que devuelve un objeto Resultadoy, finalmente, escribir los bytes de result.Document en un archivo utilizando File.WriteAllBytes().
IronPDF simplifica esta tarea creando un ChromePdfRenderer, llamando a RenderHtmlAsPdf() directamente con la cadena HTML y utilizando el método incorporado SaveAs() en el Documento PDFdevuelto. Sin conexión al servidor, sin objeto de configuración, sin manejo manual de bytes. Consulte la documentación HTML a PDF para ver ejemplos completos.
Ejemplo 2: Conversión de URL a PDF
Antes (PDFreactor):
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactorpdfReactor = new PDFreactor();
Configuration config = new Configuration();
config.Document = "https://www.example.com";
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("webpage.pdf", result.Document);
}
}// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactorpdfReactor = new PDFreactor();
Configuration config = new Configuration();
config.Document = "https://www.example.com";
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("webpage.pdf", result.Document);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPDFreactor utiliza la misma propiedad config.Document tanto para cadenas HTML como para URLs, determinando el tipo automáticamente.IronPDFproporciona métodos explícitos: RenderHtmlAsPdf() para cadenas HTML y RenderUrlAsPdf() para URLs. Este enfoque explícito mejora la claridad del código y la compatibilidad con IntelliSense. Más información en nuestros tutoriales.
Ejemplo 3: Encabezados y pies de página con números de página
Antes (PDFreactor):
// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactorpdfReactor = new PDFreactor();
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
Configuration config = new Configuration();
config.Document = html;
config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }");
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("document.pdf", result.Document);
}
}// NuGet: Install-Package PDFreactor.Native.Windows.x64
using RealObjects.PDFreactor;
using System.IO;
class Program
{
static void Main()
{
PDFreactorpdfReactor = new PDFreactor();
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
Configuration config = new Configuration();
config.Document = html;
config.AddUserStyleSheet("@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }");
Result result = pdfReactor.Convert(config);
File.WriteAllBytes("document.pdf", result.Document);
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Header Text"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Header Text"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page}"
};
string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEste ejemplo muestra la diferencia sintáctica más significativa. PDFreactorutiliza la sintaxis CSS Paged Mediacon reglas @page, regiones @top-center/@bottom-center y counter(page) para los números de página inyectados mediante AddUserStyleSheet().
IronPDF utiliza una API .NET nativa con objetos TextHeaderFooter asignados a RenderingOptions.TextHeader y RenderingOptions.TextFooter. Los números de página utilizan el marcador de posición {page} en lugar de CSS counter(page). Tenga en cuenta queIronPDFtambién requiere la importación del espacio de nombres IronPdf.Rendering para las clases de encabezado/pie de página.
Notas de migración críticas
No requiere servidor
IronPDF se ejecuta en proceso, sin necesidad de configurar un servidor Java:
// PDFreactor: Requires server connection
var pdfReactor = new PDFreactor("http://localhost:9423");
// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();// PDFreactor: Requires server connection
var pdfReactor = new PDFreactor("http://localhost:9423");
// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();IRON VB CONVERTER ERROR developers@ironsoftware.comCSS Paged MediaaIronPDFAPI
Sustituir las reglas CSS @page por RenderingOptions:
// PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } }
//IronPDFequivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};// PDFreactorCSS: @page { @bottom-center { content: 'Page ' counter(page); } }
//IronPDFequivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page}"
};IRON VB CONVERTER ERROR developers@ironsoftware.comSintaxis del marcador de posición del número de página
// PDFreactorCSS: counter(page)
// IronPDF: {page}
// PDFreactorCSS: counter(pages)
// IronPDF: {total-pages}// PDFreactorCSS: counter(page)
// IronPDF: {page}
// PDFreactorCSS: counter(pages)
// IronPDF: {total-pages}IRON VB CONVERTER ERROR developers@ironsoftware.comCambio en la gestión de resultados
El patrón Configuración + Resultado se convierte directamente en PdfDocument:
// PDFreactor: Configuration → Convert → Result → bytes
Result result = pdfReactor.Convert(config);
byte[] bytes = result.Document;
File.WriteAllBytes("output.pdf", bytes);
// IronPDF: Direct PdfDocument with built-in methods
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or: byte[] bytes = pdf.BinaryData;// PDFreactor: Configuration → Convert → Result → bytes
Result result = pdfReactor.Convert(config);
byte[] bytes = result.Document;
File.WriteAllBytes("output.pdf", bytes);
// IronPDF: Direct PdfDocument with built-in methods
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or: byte[] bytes = pdf.BinaryData;IRON VB CONVERTER ERROR developers@ironsoftware.comCambio de unidades de margen
PDFreactor utiliza cadenas;IronPDFutiliza milímetros:
// PDFreactor: config.PageMargins.Top = "1in"
// IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mm// PDFreactor: config.PageMargins.Top = "1in"
// IronPDF: renderer.RenderingOptions.MarginTop = 25.4 // 1 inch in mmIRON VB CONVERTER ERROR developers@ironsoftware.comNuevas capacidades tras la migración
Después de migrar a IronPDF, obtendrá capacidades que PDFreactorno puede proporcionar:
Fusión de PDF
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comMarcas de agua
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");IRON VB CONVERTER ERROR developers@ironsoftware.comExtracción de texto
string text = pdf.ExtractAllText();string text = pdf.ExtractAllText();Dim text As String = pdf.ExtractAllText()Protección con contraseña
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";IRON VB CONVERTER ERROR developers@ironsoftware.comResumen comparativo de características
| Característica | PDFreactor | IronPDF |
|---|---|---|
| HTML a PDF | ✓ | ✓ |
| URL a PDF | ✓ | ✓ |
| Encabezados/pies de página | CSS Paged Media | API nativa |
| Configuración de la página | ✓ | ✓ |
| Soporte de JavaScript | ✓ | ✓ |
| .NET nativo | ✗ | ✓ |
| En proceso | ✗ | ✓ |
| Fusionar PDF | ✗ | ✓ |
| Dividir PDF | ✗ | ✓ |
| Marcas de agua | ✗ | ✓ |
| Extracción de Texto | ✗ | ✓ |
| Relleno de formularios | ✗ | ✓ |
| Firmas digitales | ✗ | ✓ |
Lista de comprobación de la migración
Pre-Migración
- [ ] Inventario del uso de PDFreactoren el código base
- [ ] Documentar todas las reglas CSS Paged Mediautilizadas
- [ ] Tenga en cuenta todos los ajustes de configuración (márgenes, tamaño de página, JavaScript)
- [ ] Planificar el almacenamiento de la clave de licencia deIronPDF(se recomiendan variables de entorno)
- [ ] Pruebe primero con la licencia de prueba de IronPDF
Cambios en el paquete
- [ ] Eliminar el paquete NuGet
PDFreactor.NET - [ ] Eliminar el paquete NuGet
PDFreactor.Native.Windows.x64 - [Instale el paquete NuGet
IronPdf:dotnet add package IronPdf
Cambios de código
- [ ] Actualizar las importaciones de espacios de nombres (
using RealObjects.PDFreactor;→using IronPDF;) - [ ] Añadir
usando IronPDF.Rendering;para las clases header/footer - [ ] Sustituir la clase
PDFreactorporChromePdfRenderer - [Convertir objetos
Configuraciónen propiedadesRenderingOptions - [ ] Sustituya
config.Document = htmlporrenderer.RenderHtmlAsPdf(html) - [Reemplace
config.Document = urlporrenderer.RenderUrlAsPdf(url) - [Reemplace
File.WriteAllBytes(path, result.Document)porpdf.SaveAs(path) - [Convertir reglas CSS
@pageen objetosTextHeader/TextFooter - [ ] Actualizar los marcadores de posición de número de página (
contador(página)→{página}) - [ ] Convertir unidades de margen de cadenas a milímetros
Migración de infraestructuras
- [ ] Eliminar el requisito de tiempo de ejecución de Java
- [ ] Dar de baja el servidor PDFreactor
- [ ] Actualizar configuraciones de Docker/despliegue
- [ ] Actualización de procesos CI/CD
Posmigración
- [ ] Comprobación de que la calidad del PDF se ajusta a las expectativas
- [ ] Verificar el renderizado de encabezado/pie de página
- [ ] Verificar la ejecución de JavaScript si se utiliza
- [ ] Añadir nuevas funciones (fusión, marcas de agua, seguridad) según sea necesario
Conclusión
La migración de PDFreactoraIronPDFelimina las dependencias de Java y la infraestructura de servidor, al tiempo que proporciona capacidades equivalentes de HTML a PDF. La selección de la herramienta adecuada entre PDFreactoreIronPDFdepende en gran medida de los requisitos específicos del proyecto y de la infraestructura existente. Si su proyecto requiere un renderizado de alta fidelidad con amplio soporte de CSS y puede manejar dependencias de Java, PDFreactores un buen candidato. Por el contrario, si está desarrollando en un entorno .NET y desea una integración perfecta y amplias funcionalidades de PDF,IronPDFes una opción más adecuada.
Los cambios clave en esta migración son:
- Arquitectura: Servicio Java basado en servidor → Biblioteca .NET en proceso
- Clase principal:
PDFreactor→ChromePdfRenderer - Configuración: objeto
Configuración→ propiedadesRenderingOptions - Conversión HTML:
config.Document+Convert()→RenderHtmlAsPdf() - Conversión de URL:
config.Document+Convert()→RenderUrlAsPdf() - Salida:
resultado.Document+File.WriteAllBytes()→pdf.SaveAs() - Cabeceras/Pies de página: Reglas CSS
@page→ objetosTextHeaderFooter - Números de página:
contador(página)→{página} - Nuevas funciones: Fusión de PDF, marcas de agua, extracción de texto, firmas digitales y mucho más
Entre las principales ventajas se incluyen la arquitectura simplificada sin necesidad de un proceso de servidor independiente, la integración nativa de .NET con llamadas directas a la API en lugar de REST/IPC, la complejidad reducida con un único paquete NuGet frente al tiempo de ejecución de Java más el servidor, y la compatibilidad completa con el ciclo de vida de PDF más allá de la conversión, incluidas la fusión, la división, la edición y la firma.
Explore la documentación completa de IronPDF, tutoriales, y API reference para acelerar su migración a PDFreactor.






