Cómo migrar de Apryse PDF a IronPDF en C#
Migrar de Apryse PDFa IronPDF: Guía completa de migración a C
Apryse PDF (anteriormente PDFTron) es un SDK de PDF empresarial de primera calidad conocido por sus completas funciones de procesamiento de documentos. Sin embargo, su modelo de precios premium (más de 1.500 dólares anuales por desarrollador), los complejos requisitos de integración y la herencia de C++ crean barreras para los equipos de desarrollo que buscan una funcionalidad PDF sencilla. Esta completa guía proporciona una ruta de migración paso a paso de Apryse PDFa IronPDF, una biblioteca PDF nativa de .NET con modernas convenciones de C#, una integración más sencilla y una licencia perpetua única.
¿Por qué migrar de Apryse PDF?
Aunque Apryse PDFofrece una funcionalidad sólida, hay varios factores que llevan a los equipos de desarrollo a buscar alternativas para sus necesidades de generación de PDF.
Precios premium y modelo de suscripción
Apryse PDF se dirige a clientes empresariales con un precio que puede resultar prohibitivo para proyectos pequeños o medianos:
| Aspecto | Apryse PDF(PDFTron) | IronPDF |
|---|---|---|
| Precio Inicial | más de 1.500 $/desarrollador/año (según informes) | 749 $ por única vez (Lite) |
| Modelo de licencia | Suscripción anual | Licencia perpetua |
| Licencia de visualización | Coste adicional aparte | N/A (utilice visores estándar) |
| Licencia de servidor | Se requiere un precio de empresa | Incluido en los niveles de licencia |
| Coste total de 3 años | más de 4.500 dólares por desarrollador | 749 $ una sola vez |
Complejidad de la integración
La herencia C++ de Apryse PDFintroduce una complejidad que afecta a la velocidad de desarrollo:
| Característica | Apryse PDF | IronPDF |
|---|---|---|
| Configuración | Rutas de módulos, binarios externos | Paquete NuGet único |
| Inicialización | <código>PDFNet.Initialize()</códigocon licencia | Asignación sencilla de propiedades |
| Representación HTML | Se requiere un módulo html2pdf externo | Motor Chromium integrado |
| Estilo API | C++ herencia, complejo | Convenciones modernas de C# |
| Dependencias | Múltiples DLL, específicas de cada plataforma | Paquete autónomo |
Cuándo considerar la migración
Migre aIronPDFsi:
- Principalmente necesita conversión de HTML/URL a PDF
- Desea una API más sencilla con menos repeticiones
- El precio premium no está justificado para su caso de uso
- No necesita los controles del visor PDFViewCtrl
- Prefiere un licenciamiento de una sola vez sobre suscripciones
Quédese con Apryse PDFsi:
- Necesitas sus controles de visor nativos (PDFViewCtrl)
- Utiliza ampliamente XOD o formatos propietarios
- Se requieren funciones empresariales específicas (redacción avanzada, etc.)
- Su organización ya dispone de licencias empresariales
Preparación de la migración
Prerrequisitos
Asegúrese de que su entorno cumple estos requisitos:
- .NET Framework 4.6.2+ o .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ o VS Code con extensión de C#
- Acceso al gestor de paquetes NuGet
- Clave de licencia deIronPDF(prueba gratuita disponible en ironpdf.com)
Uso de Apryse PDF
Ejecute estos comandos en su directorio de soluciones para identificar todas las referencias a Apryse:
# Find all pdftron using statements
grep -r "using pdftron" --include="*.cs" .
# Find PDFNet initialization
grep -r "PDFNet.Initialize\|PDFNet.SetResourcesPath" --include="*.cs" .
# Find PDFDoc usage
grep -r "new PDFDoc\|PDFDoc\." --include="*.cs" .
# Find HTML2PDF usage
grep -r "HTML2PDF\|InsertFromURL\|InsertFromHtmlString" --include="*.cs" .
# Find ElementReader/Writer usage
grep -r "ElementReader\|ElementWriter\|ElementBuilder" --include="*.cs" .# Find all pdftron using statements
grep -r "using pdftron" --include="*.cs" .
# Find PDFNet initialization
grep -r "PDFNet.Initialize\|PDFNet.SetResourcesPath" --include="*.cs" .
# Find PDFDoc usage
grep -r "new PDFDoc\|PDFDoc\." --include="*.cs" .
# Find HTML2PDF usage
grep -r "HTML2PDF\|InsertFromURL\|InsertFromHtmlString" --include="*.cs" .
# Find ElementReader/Writer usage
grep -r "ElementReader\|ElementWriter\|ElementBuilder" --include="*.cs" .Cambios importantes que hay que anticipar
| Apryse PDFPatrón | Cambio requerido |
|---|---|
| <código>PDFNet.Initialize()</código | Sustituir por IronPdf.License.LicenseKey |
módulo HTML2PDF | <código>ChromePdfRenderer</códigointegrado |
ElementReader/ElementWriter | IronPDFgestiona el contenido internamente |
| <código>SDFDoc.SaveOptions</código | Método simple SaveAs() |
| <código>PDFViewCtrl</código | Uso de visores de PDF externos |
| Formato XOD | Convertir a PDF o imágenes |
| Configuración de la ruta del módulo | No es necesario |
Proceso de migración paso a paso
Paso 1: Actualizar paquetes NuGet
Elimine los paquetes Apryse/PDFTron e instale IronPDF:
# Remove Apryse/PDFTron packages
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NET.x86
dotnet remove package pdftron
# Install IronPDF
dotnet add package IronPdf# Remove Apryse/PDFTron packages
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NET.x86
dotnet remove package pdftron
# Install IronPDF
dotnet add package IronPdfO a través de Package Manager Console:
Uninstall-Package PDFTron.NET.x64
Install-Package IronPdfPaso 2: Actualizar referencias de espacios de nombres
Sustituya los espacios de nombres de Apryse por IronPDF:
// Remove these
using pdftron;
using pdftron.PDF;
using pdftron.PDF.Convert;
using pdftron.SDF;
using pdftron.Filters;
// Add these
using IronPdf;
using IronPdf.Rendering;// Remove these
using pdftron;
using pdftron.PDF;
using pdftron.PDF.Convert;
using pdftron.SDF;
using pdftron.Filters;
// Add these
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.comPaso 3: Eliminar la plantilla de inicialización
Apryse PDF requiere una inicialización compleja.IronPDFelimina esto por completo.
Implementación de Apryse PDF:
// Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
// Plus module path for HTML2PDF...// Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
// Plus module path for HTML2PDF...IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de IronPDF:
// Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";// Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";IRON VB CONVERTER ERROR developers@ironsoftware.comConIronPDFno es necesario llamar a PDFNet.Terminate(): los recursos se gestionan automáticamente.
Referencia completa de migración de API
Mapeo de clases principales
| Clase PDF de Apryse | Equivalente de IronPDF | Notas |
|---|---|---|
| <código>PDFDoc</código | Documento PDF | Clase de documento principal |
| <código>HTML2PDF</código | <código>ChromePdfRenderer</código | Conversión de HTML a PDF |
Extractor de texto | <código>PdfDocument.ExtractAllText()</código | Extracción de texto |
Stamper | <código>PdfDocument.ApplyWatermark()</código | Marcas de agua y sellos |
| <código>PDFDraw</código | <código>PdfDocument.ToBitmap()</código | Rasterización |
| <código>SecurityHandler</código | <código>PdfDocument.SecuritySettings</código | Encriptación/contraseñas |
| <código>PDFNet</código | <código>Licencia.IronPdf</código | Licencias y configuración |
Operaciones de documentos
| Método Apryse PDF | Método IronPDF | Notas |
|---|---|---|
nuevo PDFDoc() | nuevo PdfDocument() | Documento vacío |
nuevo PDFDoc(ruta) | <código>PdfDocument.FromFile(path)</código | Cargar desde archivo |
nuevo PDFDoc(buffer) | <código>PdfDocument.FromBinaryData(bytes)</código | Cargar desde bytes |
doc.Guardar(ruta, opciones) | <código>pdf.SaveAs(ruta)</código | Guardar en archivo |
| <código>doc.Save(buffer)</código | <código>pdf.BinaryData</código | Obtener como bytes |
doc.Close() | <código>pdf.Dispose()</código | Limpieza (o uso de uso) |
doc.GetPageCount() | <código>pdf.PageCount</código | Número de páginas |
| <código>doc.AppendPages(doc2, start, end)</código | <código>PdfDocument.Merge(pdfs)</código | Fusionar documentos |
Conversión de HTML a PDF
| Método Apryse PDF | Método IronPDF | Notas |
|---|---|---|
| <código>HTML2PDF.Convertir(doc)</código | renderer.RenderHtmlAsPdf(html) | Devuelve PdfDocument |
| <código>converter.InsertFromURL(url)</código | <código>renderer.RenderUrlAsPdf(url)</código | Conversión de URL |
converter.InsertFromHtmlString(html) | renderer.RenderHtmlAsPdf(html) | Cadena HTML |
| <código>converter.SetModulePath(path)</código | No es necesario | Motor incorporado |
| <código>converter.SetPaperSize(width, height)</código | <código>RenderingOptions.PaperSize</código | Tamaño del papel |
converter.SetLandscape(true) | <código>RenderingOptions.PaperOrientation</código | Orientación |
Ejemplos de migración de código
Cadena HTML a PDF
La operación más común demuestra la drástica reducción de código repetitivo.
Implementación de Apryse PDF:
using pdftron;
using pdftron.PDF;
class Program
{
static void Main()
{
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
string html = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>";
using (PDFDoc doc = new PDFDoc())
{
HTML2PDF converter = new HTML2PDF();
converter.SetModulePath("path/to/html2pdf");
converter.InsertFromHtmlString(html);
HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
settings.SetPrintBackground(true);
settings.SetLoadImages(true);
if (converter.Convert(doc))
{
doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized);
Console.WriteLine("PDF created successfully");
}
else
{
Console.WriteLine($"Conversion failed: {converter.GetLog()}");
}
}
PDFNet.Terminate();
}
}using pdftron;
using pdftron.PDF;
class Program
{
static void Main()
{
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
string html = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>";
using (PDFDoc doc = new PDFDoc())
{
HTML2PDF converter = new HTML2PDF();
converter.SetModulePath("path/to/html2pdf");
converter.InsertFromHtmlString(html);
HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
settings.SetPrintBackground(true);
settings.SetLoadImages(true);
if (converter.Convert(doc))
{
doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized);
Console.WriteLine("PDF created successfully");
}
else
{
Console.WriteLine($"Conversion failed: {converter.GetLog()}");
}
}
PDFNet.Terminate();
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
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;
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.comIronPDF elimina la inicialización, las rutas de los módulos y el código de limpieza, reduciendo más de 35 líneas a 5 líneas.
Conversión de URL a PDF
Implementación de Apryse PDF:
using pdftron;
using pdftron.PDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc doc = new PDFDoc())
{
HTML2PDF converter = new HTML2PDF();
converter.SetModulePath("path/to/html2pdf");
HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
settings.SetLoadImages(true);
settings.SetAllowJavaScript(true);
settings.SetPrintBackground(true);
converter.InsertFromURL("https://example.com", settings);
if (converter.Convert(doc))
{
doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized);
}
}
PDFNet.Terminate();using pdftron;
using pdftron.PDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc doc = new PDFDoc())
{
HTML2PDF converter = new HTML2PDF();
converter.SetModulePath("path/to/html2pdf");
HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
settings.SetLoadImages(true);
settings.SetAllowJavaScript(true);
settings.SetPrintBackground(true);
converter.InsertFromURL("https://example.com", settings);
if (converter.Convert(doc))
{
doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized);
}
}
PDFNet.Terminate();IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("webpage.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("webpage.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comFusión de varios PDF
Implementación de Apryse PDF:
using pdftron;
using pdftron.PDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc mainDoc = new PDFDoc())
{
string[] files = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };
foreach (string file in files)
{
using (PDFDoc doc = new PDFDoc(file))
{
mainDoc.AppendPages(doc, 1, doc.GetPageCount());
}
}
mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized);
}
PDFNet.Terminate();using pdftron;
using pdftron.PDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc mainDoc = new PDFDoc())
{
string[] files = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };
foreach (string file in files)
{
using (PDFDoc doc = new PDFDoc(file))
{
mainDoc.AppendPages(doc, 1, doc.GetPageCount());
}
}
mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized);
}
PDFNet.Terminate();IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
merged.SaveAs("merged.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
merged.SaveAs("merged.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEl método estático Merge deIronPDFacepta varios documentos directamente, eliminando el patrón de iteración de páginas.
Extracción de texto
Implementación de Apryse PDF:
using pdftron;
using pdftron.PDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc doc = new PDFDoc("document.pdf"))
{
TextExtractor extractor = new TextExtractor();
for (int i = 1; i <= doc.GetPageCount(); i++)
{
Page page = doc.GetPage(i);
extractor.Begin(page);
string pageText = extractor.GetAsText();
Console.WriteLine($"Page {i}:");
Console.WriteLine(pageText);
}
}
PDFNet.Terminate();using pdftron;
using pdftron.PDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc doc = new PDFDoc("document.pdf"))
{
TextExtractor extractor = new TextExtractor();
for (int i = 1; i <= doc.GetPageCount(); i++)
{
Page page = doc.GetPage(i);
extractor.Begin(page);
string pageText = extractor.GetAsText();
Console.WriteLine($"Page {i}:");
Console.WriteLine(pageText);
}
}
PDFNet.Terminate();IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de IronPDF:
using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text at once
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);
// Extract from specific page
string page1Text = pdf.ExtractTextFromPage(0); // 0-indexed
Console.WriteLine($"Page 1: {page1Text}");using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text at once
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);
// Extract from specific page
string page1Text = pdf.ExtractTextFromPage(0); // 0-indexed
Console.WriteLine($"Page 1: {page1Text}");IRON VB CONVERTER ERROR developers@ironsoftware.comAñadir marcas de agua
Implementación de Apryse PDF:
using pdftron;
using pdftron.PDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc doc = new PDFDoc("document.pdf"))
{
Stamper stamper = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5);
stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center,
Stamper.VerticalAlignment.e_vertical_center);
stamper.SetOpacity(0.3);
stamper.SetRotation(45);
stamper.SetFontColor(new ColorPt(1, 0, 0));
stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center);
stamper.StampText(doc, "CONFIDENTIAL",
new PageSet(1, doc.GetPageCount()));
doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized);
}
PDFNet.Terminate();using pdftron;
using pdftron.PDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc doc = new PDFDoc("document.pdf"))
{
Stamper stamper = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5);
stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center,
Stamper.VerticalAlignment.e_vertical_center);
stamper.SetOpacity(0.3);
stamper.SetRotation(45);
stamper.SetFontColor(new ColorPt(1, 0, 0));
stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center);
stamper.StampText(doc, "CONFIDENTIAL",
new PageSet(1, doc.GetPageCount()));
doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized);
}
PDFNet.Terminate();IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de IronPDF:
using IronPdf;
using IronPdf.Editing;
var pdf = PdfDocument.FromFile("document.pdf");
// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
color: red;
opacity: 0.3;
font-size: 72px;
font-weight: bold;
text-align: center;
'>CONFIDENTIAL</div>";
pdf.ApplyWatermark(watermarkHtml,
rotation: 45,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");using IronPdf;
using IronPdf.Editing;
var pdf = PdfDocument.FromFile("document.pdf");
// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
color: red;
opacity: 0.3;
font-size: 72px;
font-weight: bold;
text-align: center;
'>CONFIDENTIAL</div>";
pdf.ApplyWatermark(watermarkHtml,
rotation: 45,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF utiliza marcas de agua basadas en HTML/CSS, lo que proporciona un control total del estilo mediante tecnologías web conocidas.
Protección con contraseña
Implementación de Apryse PDF:
using pdftron;
using pdftron.PDF;
using pdftron.SDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc doc = new PDFDoc("document.pdf"))
{
SecurityHandler handler = new SecurityHandler();
handler.ChangeUserPassword("user123");
handler.ChangeMasterPassword("owner456");
handler.SetPermission(SecurityHandler.Permission.e_print, false);
handler.SetPermission(SecurityHandler.Permission.e_extract_content, false);
doc.SetSecurityHandler(handler);
doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized);
}
PDFNet.Terminate();using pdftron;
using pdftron.PDF;
using pdftron.SDF;
PDFNet.Initialize("YOUR_LICENSE_KEY");
using (PDFDoc doc = new PDFDoc("document.pdf"))
{
SecurityHandler handler = new SecurityHandler();
handler.ChangeUserPassword("user123");
handler.ChangeMasterPassword("owner456");
handler.SetPermission(SecurityHandler.Permission.e_print, false);
handler.SetPermission(SecurityHandler.Permission.e_extract_content, false);
doc.SetSecurityHandler(handler);
doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized);
}
PDFNet.Terminate();IRON VB CONVERTER ERROR developers@ironsoftware.comImplementación de IronPDF:
using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
// Set passwords
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
// Set passwords
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";
// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comCabeceras y pies de página
Implementación de IronPDF:
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center; font-size:12px;'>Company Header</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:center; font-size:10px;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content</h1>");
pdf.SaveAs("with_headers.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comIronPDF admite marcadores de posición como {page} y {total-pages} para la numeración dinámica de páginas. Para más opciones, consulte la documentación sobre encabezados y pies de página.
Integración con .NET Core
Los requisitos de inicialización de Apryse PDFcomplican la integración de aplicaciones web.IronPDFsimplifica esta tarea.
Patrón IronPDF:
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.Stream, "application/pdf", "report.pdf");
}
}[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.Stream, "application/pdf", "report.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comConfiguración de la inyección de dependencias
// Program.cs
public void ConfigureServices(IServiceCollection services)
{
// Set license once
IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];
// Register renderer as scoped service
services.AddScoped<ChromePdfRenderer>();
// Or create a wrapper service
services.AddScoped<IPdfService, IronPdfService>();
}
// IronPdfService.cs
public class IronPdfService : IPdfService
{
private readonly ChromePdfRenderer _renderer;
public IronPdfService()
{
_renderer = new ChromePdfRenderer();
_renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
_renderer.RenderingOptions.PrintHtmlBackgrounds = true;
}
public PdfDocument GenerateFromHtml(string html) =>
_renderer.RenderHtmlAsPdf(html);
public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
_renderer.RenderHtmlAsPdfAsync(html);
}// Program.cs
public void ConfigureServices(IServiceCollection services)
{
// Set license once
IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];
// Register renderer as scoped service
services.AddScoped<ChromePdfRenderer>();
// Or create a wrapper service
services.AddScoped<IPdfService, IronPdfService>();
}
// IronPdfService.cs
public class IronPdfService : IPdfService
{
private readonly ChromePdfRenderer _renderer;
public IronPdfService()
{
_renderer = new ChromePdfRenderer();
_renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
_renderer.RenderingOptions.PrintHtmlBackgrounds = true;
}
public PdfDocument GenerateFromHtml(string html) =>
_renderer.RenderHtmlAsPdf(html);
public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
_renderer.RenderHtmlAsPdfAsync(html);
}IRON VB CONVERTER ERROR developers@ironsoftware.comComparación de prestaciones
| Métrica | Apryse PDF | IronPDF |
|---|---|---|
| Inicio en frío | Rápido (código nativo) | ~2s (Chromium init) |
| Realizaciones posteriores | Rápido | Rápido |
| HTML complejo | Variable (módulo html2pdf) | Excelente (Chromium) |
| Soporte CSS | Limitado | CSS3 completo |
| JavaScript | Limitado | Soporte completo |
Consejos para optimizar el rendimiento
// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();
// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay
renderer.RenderingOptions.Timeout = 30000; // 30s max
// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
}// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();
// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay
renderer.RenderingOptions.Timeout = 30000; // 30s max
// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
}IRON VB CONVERTER ERROR developers@ironsoftware.comSolución de problemas comunes de migración
Asunto: Errores de ruta de módulo
Elimine toda configuración de rutas de módulos: el motor Chromium deIronPDFestá incorporado:
// Remove this
converter.SetModulePath("path/to/html2pdf");
// Just use the renderer
var renderer = new ChromePdfRenderer();// Remove this
converter.SetModulePath("path/to/html2pdf");
// Just use the renderer
var renderer = new ChromePdfRenderer();IRON VB CONVERTER ERROR developers@ironsoftware.comProblema: PDFNet.Initialize() No encontrado
Sustituir por la configuración de licencia de IronPDF:
// Remove this
PDFNet.Initialize("KEY");
PDFNet.SetResourcesPath("path");
// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";// Remove this
PDFNet.Initialize("KEY");
PDFNet.SetResourcesPath("path");
// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.comEdición: Sustitución de PDFViewCtrl
IronPDF no incluye controles de visualización. Opciones:
- Utilizar PDF.js para visores web
- Utilizar visores de PDF del sistema
- Tenga en cuenta los componentes de visualización de terceros
Lista de comprobación posterior a la migración
Después de completar la migración del código, verifique lo siguiente:
- [ ] Comprobar que la calidad del PDF final cumple las expectativas
- [ ] Probar todos los casos extremos (documentos grandes, CSS complejo)
- [ ] Comparar métricas de rendimiento
- [Actualizar las configuraciones de Docker, si procede
- [ ] Eliminar la licencia de Apryse y las configuraciones relacionadas
- [ ] Documentar cualquier configuración específica de IronPDF
- [ ] Formar al equipo en nuevos patrones de API
- [Actualizar los procesos CI/CD si es necesario
Proteja su infraestructura PDF
Con .NET 10 en el horizonte y C# 14 introduciendo nuevas características del lenguaje, elegir una biblioteca PDF nativa de .NET con convenciones modernas garantiza la compatibilidad con las capacidades de tiempo de ejecución en evolución. El compromiso deIronPDFde admitir las últimas versiones de .NET significa que su inversión en migración le reportará beneficios a medida que los proyectos se extiendan hasta 2025 y 2026, sin renovaciones anuales de la suscripción.
Recursos adicionales
La migración de Apryse PDFaIronPDFtransforma su código PDF de complejos patrones C++ a C# idiomático. La eliminación de la repetición de la inicialización, la configuración de la ruta del módulo y las licencias basadas en suscripciones ofrece un aumento inmediato de la productividad al tiempo que reduce los costes a largo plazo.






