Cómo migrar de pdforge a IronPDF en C#
Por qué migrar de pdforgea IronPDF
Entendiendo pdforge
pdforge es una API de generación de PDF basada en la nube, que ofrece una forma sencilla de producir archivos PDF mediante la integración con su aplicación a través de llamadas a la API. Al descargar la tarea de creación de PDF a una API externa, los desarrolladores pueden simplificar el proceso de desarrollo. Sin embargo, pdforgepresenta inconvenientes como dependencias externas, opciones de personalización limitadas y costes de suscripción continuos que los desarrolladores deben tener en cuenta.
El problema de la dependencia de la API de la nube
pdforge procesa todos los documentos en servidores externos en la nube. Esta arquitectura plantea problemas importantes para las aplicaciones de producción:
Procesamiento de servidor externo: cada PDF que genera requiere enviar su HTML/datos a los servidores de pdforge; sus documentos salen de su infraestructura.
Riesgos de privacidad y cumplimiento: los datos confidenciales viajan a través de Internet a servidores de terceros. Al utilizar pdforge, los desarrolladores deben tener en cuenta las cuestiones de seguridad relacionadas con el envío de datos a una API externa. Si el contenido del PDF incluye información sensible, esto podría ser una consideración crítica.
Costos de suscripción continuos: las tarifas mensuales se acumulan indefinidamente sin propiedad de activos. El modelo SaaS de pdforgeintroduce gastos operativos continuos que pueden acumularse con el tiempo.
Dependencia de Internet: no se genera PDF cuando la red no está disponible.
Límites de velocidad: los límites de uso de la API pueden limitar las aplicaciones de gran volumen.
- Latencia de la red: el tiempo de ida y vuelta agrega segundos a cada generación de PDF.
Comparación entre PDForge e IronPDF
| Característica | pdforge | IronPDF |
|---|---|---|
| Tipo de implementación | API en la nube | Biblioteca local |
| Dependencias | Requiere internet y autenticación API | Sin dependencias externas |
| Personalización | Control limitado sobre la generación de PDF | Control total sobre la personalización |
| Estructura de costes | Suscripción continua | Opción de compra única |
| Seguridad | Posibles problemas con los datos enviados a través de la web | Mantiene el procesamiento de datos totalmente dentro del entorno local |
| Complejidad de configuración | Configuración inicial más sencilla gracias a la manipulación externa | Requiere más configuración inicial |
IronPDF se distingue por ofrecer una biblioteca totalmente local, que otorga a los desarrolladores un control total sobre el proceso de creación de PDF. Esto es especialmente ventajoso para aplicaciones en las que se prefiere el manejo interno de archivos, o en las que las llamadas a API externas introducen problemas de seguridad.IronPDFprocesa todo localmente, minimizando estos riesgos.
Para los equipos que planean la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una base de procesamiento local que elimina la dependencia de la nube a la vez que añade funciones completas de manipulación de 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 de IronPDF: Obtenga su clave de licencia en ironpdf.com
Cambios en el paquete NuGet
# Remove pdforgepackages
dotnet remove package pdforge
dotnet remove package PdfForge
# Install IronPDF
dotnet add package IronPdf# Remove pdforgepackages
dotnet remove package pdforge
dotnet remove package PdfForge
# Install IronPDF
dotnet add package IronPdfConfiguración de licencias
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";Identificar el uso de pdforge
# Find pdforgeusage
grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" .
# Find placeholder patterns to migrate
grep -r "{totalPages}" --include="*.cs" .# Find pdforgeusage
grep -r "PdForge\|PdfClient\|HtmlToPdfRequest\|HtmlToPdfConverter" --include="*.cs" .
# Find placeholder patterns to migrate
grep -r "{totalPages}" --include="*.cs" .Referencia completa de la API
Cambios en el espacio de nombres
// Before: pdforge
using PdfForge;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;// Before: pdforge
using PdfForge;
using System.IO;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;Asignaciones de clases principales
| pdforge | IronPDF | Notas |
|---|---|---|
| <código>HtmlToPdfConverter</código | <código>ChromePdfRenderer</código | Generador principal de PDF |
PdfClient | <código>ChromePdfRenderer</código | Equivalente de cliente API |
| <código>TamañoPágina.A4</código | <código>TamañoPapelPdf.A4</código | Enumeración del tamaño del papel |
| <código>PageOrientation.Landscape</código | <código>PdfPaperOrientation.Landscape</código | Enum de orientación |
Tipo de retorno: byte[] | Documento PDF | Objeto resultante |
Métodos
| pdforge | IronPDF | Notas |
|---|---|---|
converter.ConvertHtmlString(html) | renderer.RenderHtmlAsPdf(html) | Cadena HTML a PDF |
| <código>converter.ConvertUrl(url)</código | <código>renderer.RenderUrlAsPdf(url)</código | URL a PDF |
| <código>File.WriteAllBytes(ruta, bytes)</código | <código>pdf.SaveAs(ruta)</código | Guardar en disco |
Tipo de retorno: byte[] | <código>pdf.BinaryData</código | Obtener bytes en bruto |
Mapas de configuración
| pdforge | IronPDF(RenderingOptions) | Notas |
|---|---|---|
converter.PageSize = PageSize.A4 | renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 | Tamaño del papel |
converter.Orientation = PageOrientation.Landscape | renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape | Orientación |
Pie de página = "Página {page} de {totalPages}" | TextFooter = new TextHeaderFooter { CenterText = "Página {page} de {total-páginas}" } | Pie de página (observe el cambio de marcador de posición) |
Nuevas funciones no disponibles en pdforge
| Características de IronPDF | Descripción |
|---|---|
PdfDocument.Merge() | Combinar varios PDF |
| <código>pdf.ExtractAllText()</código | Extraer texto de PDF |
| <código>pdf.ApplyWatermark()</código | Añadir marcas de agua |
| <código>pdf.SecuritySettings</código | Protección mediante contraseña |
| <código>pdf.Form</código | Relleno de formularios |
| <código>pdf.SignWithDigitalSignature()</código | Firmas digitales |
Ejemplos de migración de código
Ejemplo 1: Conversión de cadenas HTML a PDF
Antes (pdforge):
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);
}
}// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);
}
}Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}La diferencia fundamental en este caso es el modelo de procesamiento y el tipo de retorno. pdforgeutiliza <código>HtmlToPdfConverter</códigocon ConvertHtmlString(), que devuelve una matriz byte[]; a continuación, debe utilizar File.WriteAllBytes() para guardar el resultado.
IronPDF utiliza <código>ChromePdfRenderer</códigocon RenderHtmlAsPdf() que devuelve un objeto PdfDocument. Este objeto se puede guardar directamente con SaveAs(), o puede acceder a <código>pdf.BinaryData</códigosi necesita los bytes sin procesar. El Documento PDFtambién permite la manipulación (añadir marcas de agua, fusionar con otros PDF, añadir seguridad) antes de guardarlo. Consulte la documentación HTML a PDF para ver ejemplos completos.
Ejemplo 2: Conversión de URL a PDF
Antes (pdforge):
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var pdf = converter.ConvertUrl("https://example.com");
File.WriteAllBytes("webpage.pdf", pdf);
}
}// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
var pdf = converter.ConvertUrl("https://example.com");
File.WriteAllBytes("webpage.pdf", pdf);
}
}Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}pdforge utiliza ConvertUrl() en la clase HtmlToPdfConverter, devolviendo bytes que se escriben con File.WriteAllBytes().IronPDFutiliza RenderUrlAsPdf() en ChromePdfRenderer, devolviendo un Documento PDFcon el método incorporado SaveAs().
La principal ventaja deIronPDFes que la URL se obtiene y se renderiza localmente mediante un motor Chromium, sin necesidad de enviar datos a servidores externos. IronPDF, al ser una biblioteca local, puede ofrecer un mejor rendimiento, ya que no hay tiempo de ida y vuelta en las solicitudes web. Más información sobre Conversión de URL a PDF.
Ejemplo 3: Archivo HTML a PDF con configuración personalizada
Antes (pdforge):
// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
var htmlContent = File.ReadAllText("input.html");
var pdf = converter.ConvertHtmlString(htmlContent);
File.WriteAllBytes("output.pdf", pdf);
}
}// NuGet: Install-Package PdfForge
using PdfForge;
using System.IO;
class Program
{
static void Main()
{
var converter = new HtmlToPdfConverter();
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
var htmlContent = File.ReadAllText("input.html");
var pdf = converter.ConvertHtmlString(htmlContent);
File.WriteAllBytes("output.pdf", pdf);
}
}Después (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
var htmlContent = System.IO.File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
var htmlContent = System.IO.File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}Este ejemplo muestra la diferencia de patrón de configuración. pdforgeestablece propiedades directamente en el objeto conversor (converter.PageSize = PageSize.A4, converter.Orientation = PageOrientation.Landscape).
IronPDF utiliza la propiedad RenderingOptions con enums fuertemente tipados: renderer.RenderingOptions.PaperSize = PdfPaperSize.A4y renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape. Esto proporciona compatibilidad con IntelliSense y seguridad de tipos en tiempo de compilación. Tenga en cuenta queIronPDFrequiere la importación del espacio de nombres IronPdf.Rendering para los enums de tamaño y orientación del papel. Consulte los tutoriales para ver más ejemplos de configuración.
Notas de migración críticas
Cambio de tipo de retorno
pdforge devuelve byte[];IronPDFdevuelve PdfDocument:
// pdforge: Returns byte[]
byte[] pdfBytes = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Direct save
byte[] bytes = pdf.BinaryData; // Get bytes if needed// pdforge: Returns byte[]
byte[] pdfBytes = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Direct save
byte[] bytes = pdf.BinaryData; // Get bytes if neededCambio de clase de conversor
// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();// pdforge: HtmlToPdfConverter
var converter = new HtmlToPdfConverter();
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();Cambios en los nombres de los métodos
// pdforgemethods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)
//IronPDFmethods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)// pdforgemethods
converter.ConvertHtmlString(html)
converter.ConvertUrl(url)
//IronPDFmethods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)Cambio de método de guardado
// pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");// pdforge: Manual file write
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");Cambio de ubicación de la configuración
pdforge utiliza propiedades del conversor;IronPDFutiliza RenderingOptions:
// pdforge: Properties on converter
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// pdforge: Properties on converter
converter.PageSize = PageSize.A4;
converter.Orientation = PageOrientation.Landscape;
// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;Sintaxis del marcador de posición de encabezado/pie
Si utiliza números de página en encabezados o pies de página, la sintaxis del marcador de posición es diferente:
// pdforgeplaceholders
"Page {page} of {totalPages}"
//IronPDFplaceholders
"Page {page} of {total-pages}" // Note: hyphen in total-pages// pdforgeplaceholders
"Page {page} of {totalPages}"
//IronPDFplaceholders
"Page {page} of {total-pages}" // Note: hyphen in total-pagesNuevas capacidades tras la migración
Tras migrar a IronPDF, obtendrá funciones que pdforgeno puede ofrecerle:
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");Extracción de texto
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();Marcas de agua
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");Protección con contraseña
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";Resumen comparativo de características
| Característica | pdforge | IronPDF |
|---|---|---|
| HTML a PDF | ✓ | ✓ |
| URL a PDF | ✓ | ✓ |
| Configuración de la página | ✓ | ✓ |
| Capacidad offline | ✗ | ✓ |
| Procesamiento local | ✗ | ✓ |
| Fusionar PDF | ✗ | ✓ |
| Dividir PDF | ✗ | ✓ |
| Extraer texto | ✗ | ✓ |
| Marcas de agua | ✗ | ✓ |
| Relleno de formularios | ✗ | ✓ |
| Firmas digitales | ✗ | ✓ |
| Protección por contraseña | ✗ | ✓ |
| Sin límite de tarifa | ✗ | ✓ |
| Licencia única | ✗ | ✓ |
Lista de comprobación de la migración
Pre-Migración
- Inventariar todas las llamadas API de pdforgeen el código base
- Documente las opciones de configuración actuales utilizadas (tamaño de página, orientación)
- Identificar los marcadores de posición de encabezado/pie de página para actualizar (
{totalPages}→{total-pages}) - Planifique 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
pdforge - Eliminar el paquete NuGet
PdfForge - Instalar el paquete NuGet
IronPdf:dotnet add package IronPdf
Cambios de código
- Actualizar todas las importaciones de espacios de nombres (
using PdfForge;→using IronPdf;) - Agregar
using IronPdf.Rendering;para enumeraciones de tamaño y orientación del papel - Reemplace <código>HtmlToPdfConverter</códigocon
ChromePdfRenderer - Reemplace
ConvertHtmlString()conRenderHtmlAsPdf() - Reemplace
ConvertUrl()conRenderUrlAsPdf() - Reemplace
File.WriteAllBytes()conpdf.SaveAs() - Mueva la propiedad
PageSizeaRenderingOptions.PaperSize - Mueva la propiedad
OrientationaRenderingOptions.PaperOrientation - Actualizar los nombres de enumeración ( <código>TamañoPágina.A4</código→ <código>TamañoPapelPdf.A4</código)
- Actualizar los nombres de enumeración ( <código>PageOrientation.Landscape</código→ <código>PdfPaperOrientation.Landscape</código)
- Actualizar la sintaxis de los marcadores de posición en encabezados y pies de página
Posmigración
- Comprobar que la calidad del PDF se ajusta a las expectativas
- Verificar que la operación fuera de línea funcione
- Eliminar las credenciales de API de la configuración
- Agregue nuevas capacidades (fusión, marcas de agua, seguridad) según sea necesario






