Como migrar do Telerik Reporting para o IronPDF em C#
O Relatórios da Telerik é uma plataforma poderosa de relatórios corporativos que tem sido muito útil para desenvolvedores .NET na criação de relatórios interativos com recursos de design visual e detalhamento (drill-down). No entanto, para equipes cuja principal necessidade é a geração de PDFs em vez de uma infraestrutura de relatórios abrangente, o Relatórios da Telerik geralmente representa uma sobrecarga significativa em custos de licenciamento, complexidade de implantação e espaço ocupado em tempo de execução.
Este guia fornece um caminho completo de migração do Relatórios da Telerik para o IronPDF, com instruções passo a passo, comparações de código e exemplos práticos para desenvolvedores .NET profissionais que estejam avaliando essa transição.
Por que migrar do Telerik Reporting?
A decisão de migrar do Relatórios da Telerik geralmente se concentra em adequar suas ferramentas às suas necessidades reais. Os principais motivos pelos quais as equipes de desenvolvimento consideram a migração incluem:
Licenciamento por desenvolvedor: O Relatórios da Telerik independente começa em ~$685 por desenvolvedor, e o pacote completo do DevCraft começa em ~$1,763 (Q1 2026, ComponentSource). Ambos são vendidos como perpétuos + 1 ano de manutenção ou como assinatura anual. Para equipes que precisam apenas da geração de PDFs, isso representa uma capacidade significativa não utilizada.
Dependência do Designer de Relatórios: O Relatórios da Telerik requer o designer Standalone, Web, ou integrado ao Visual Studio, além de assemblies de runtime obtidos do feed privado do Telerik NuGet (https://nuget.telerik.com/v3/index.json, chave de licença requerida). Isso aumenta a complexidade dos ambientes de desenvolvimento e dos pipelines de CI/CD.
Infraestrutura Complexa: Para cenários de visualização em HTML5, você também hospeda um Serviço REST de Relatórios (Telerik.Reporting.Services.AspNetCore) com configuração de armazenamento, resolvedor e script de visualização — infraestrutura que adiciona encargos de manutenção para tarefas simples de geração de PDF.
Formato Proprietário: As definições de relatório XML .trdp e .trdx (formato próprio da Telerik — não RDL/RDLC, que explicitamente não é suportado) prendem você ao ecossistema Telerik. Migrar ou modificar modelos requer ferramentas da Telerik.
Runtime Pesado: Grande espaço de implantação para o que pode ser uma simples conversão HTML-para-PDF, além de DLLs de renderização opcionais para DOCX/XLSX/PPTX/XPS.
Manutenção Renovável: Mesmo com uma licença perpétua, atualizações contínuas, correções e suporte requerem renovação da assinatura de manutenção.
Quando o Relatórios da Telerik é um exagero
Se você usa o Relatórios da Telerik principalmente para gerar PDFs a partir de dados, provavelmente está pagando por recursos que não utiliza:
| Você precisa | A Telerik fornece (não utilizado) |
|---|---|
| PDF a partir de HTML | Designer visual, detalhamento |
| Relatórios simples | Visualizador interativo, exportações |
| PDFs do lado do servidor | Controles de desktop, mecanismo de gráficos |
O IronPDF oferece geração de PDFs focada, sem a sobrecarga de relatórios corporativos.
IronPDF vs Telerik Reporting: Comparação de Recursos
Compreender as diferenças arquitetônicas ajuda os responsáveis pelas decisões técnicas a avaliar o investimento em migração:
| Recurso | Relatórios da Telerik | IronPDF |
|---|---|---|
| Foco | Criação de relatórios com opção de exportação para PDF | Geração completa de PDFs a partir de HTML |
| Integração | Integração perfeita com aplicações ASP.NET Core | Pode ser integrado a qualquer aplicação .NET. |
| Complexidade de configuração | Requer a instalação de um editor de relatórios. | Instalação simples do NuGet |
| Preços | Parte do pacote comercial DevCraft | Licenciamento separado, mais econômico para geração independente de PDFs. |
| Geração de PDF | Limitado a relatar exportações | Completo com recursos avançados de manipulação de PDF. |
| Público-alvo | Desenvolvedores que precisam de soluções centradas em relatórios | Desenvolvedores que precisam de soluções flexíveis para geração de PDFs |
| Formato do modelo | .trdp / .trdx (XML; não RDL/RDLC) |
HTML/CSS/Razor |
| Curva de Aprendizagem | Específico da Telerik (linguagem de expressão, seções) | Tecnologias web padrão |
| HTML para PDF | Lado do servidor via HtmlTextBox (HTML/CSS limitado) |
Renderização completa do Chromium |
| URL para PDF | Não embutido (busque HTML por si mesmo) | Sim |
| Suporte a CSS | Limitado (seletores semelhantes a CSS no designer) | CSS3 completo |
| JavaScript no tempo de renderização | Não (o motor do servidor não executa JS) | ES2024 completo |
| Assinaturas digitais | Sim (X.509 / .PFX via informações do dispositivo PDF) | Sim |
| PDF/A | PDF/A-1b, PDF/A-2b, PDF/A-3b | PDF/A-3 |
| Tamanho de tempo de execução | Grande (motor + DLLs de renderização por formato) | Menor |
Guia Rápido: Migração de Relatórios Telerik para IronPDF
A migração pode começar imediatamente com esses passos fundamentais.
Passo 1: Substituir pacotes NuGet
Remova todos os pacotes de relatórios da Telerik:
# Remove Relatórios da Telerik packages (hosted on the private Telerik NuGet feed)
dotnet remove package Telerik.Reporting
dotnet remove package Telerik.Reporting.Services.AspNetCore
dotnet remove package Telerik.ReportViewer.Mvc
# Remove Relatórios da Telerik packages (hosted on the private Telerik NuGet feed)
dotnet remove package Telerik.Reporting
dotnet remove package Telerik.Reporting.Services.AspNetCore
dotnet remove package Telerik.ReportViewer.Mvc
Instale o IronPDF:
# Install IronPDF(hosted on nuget.org)
dotnet add package IronPdf
# Install IronPDF(hosted on nuget.org)
dotnet add package IronPdf
Etapa 2: Atualizar Namespaces
Substitua namespaces da Telerik pelo namespace IronPDF:
// Before (Telerik Reporting)
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using Telerik.Reporting.Drawing;
// After (IronPDF)
using IronPdf;
// Before (Telerik Reporting)
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using Telerik.Reporting.Drawing;
// After (IronPDF)
using IronPdf;
Imports Telerik.Reporting
Imports Telerik.Reporting.Processing
Imports Telerik.Reporting.Drawing
' After (IronPDF)
Imports IronPdf
Etapa 3: Inicializar a licença
Adicionar inicialização de licença na inicialização do aplicativo:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Exemplos de migração de código
Converter HTML para PDF
O caso de uso mais comum demonstra a diferença arquitetônica entre essas bibliotecas PDF for .NET .
Abordagem de Relatórios da Telerik:
// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using System.Collections.Specialized;
class TelerikExample
{
static void Main()
{
var reportSource = new Telerik.Reporting.TypeReportSource();
var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
instanceReportSource.ReportDocument = new Telerik.Reporting.Report()
{
Items = { new Telerik.Reporting.HtmlTextBox() { Value = "<h1>Hello World</h1><p>Sample HTML content</p>" } }
};
var reportProcessor = new ReportProcessor();
var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);
using (var fs = new System.IO.FileStream("output.pdf", System.IO.FileMode.Create))
{
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
}
}
}
// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using System.Collections.Specialized;
class TelerikExample
{
static void Main()
{
var reportSource = new Telerik.Reporting.TypeReportSource();
var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
instanceReportSource.ReportDocument = new Telerik.Reporting.Report()
{
Items = { new Telerik.Reporting.HtmlTextBox() { Value = "<h1>Hello World</h1><p>Sample HTML content</p>" } }
};
var reportProcessor = new ReportProcessor();
var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);
using (var fs = new System.IO.FileStream("output.pdf", System.IO.FileMode.Create))
{
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
}
}
}
Imports Telerik.Reporting
Imports Telerik.Reporting.Processing
Imports System.Collections.Specialized
Imports System.IO
Class TelerikExample
Shared Sub Main()
Dim reportSource As New Telerik.Reporting.TypeReportSource()
Dim instanceReportSource As New Telerik.Reporting.InstanceReportSource()
instanceReportSource.ReportDocument = New Telerik.Reporting.Report() With {
.Items = {New Telerik.Reporting.HtmlTextBox() With {.Value = "<h1>Hello World</h1><p>Sample HTML content</p>"}}
}
Dim reportProcessor As New ReportProcessor()
Dim result = reportProcessor.RenderReport("PDF", instanceReportSource, Nothing)
Using fs As New FileStream("output.pdf", FileMode.Create)
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length)
End Using
End Sub
End Class
Abordagem IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfExample
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>Sample HTML content</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfExample
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>Sample HTML content</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class IronPdfExample
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>Sample HTML content</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
A versão Telerik exige criar um TypeReportSource, um InstanceReportSource, um objeto Report com um HtmlTextBox, um ReportProcessor e gerenciamento manual de fluxo de arquivos. O ChromePdfRenderer do IronPDF lida com todo o processo em três linhas de código.
Para cenários avançados de conversão de HTML para PDF, consulte o guia de conversão de HTML para PDF .
Converter URLs em PDF
A conversão de URL para PDF revela uma lacuna significativa de funcionalidade no Telerik Reporting.
Abordagem de Relatórios da Telerik:
// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using System.Net;
class TelerikExample
{
static void Main()
{
string htmlContent;
using (var client = new WebClient())
{
htmlContent = client.DownloadString("https://example.com");
}
var report = new Telerik.Reporting.Report();
var htmlTextBox = new Telerik.Reporting.HtmlTextBox()
{
Value = htmlContent
};
report.Items.Add(htmlTextBox);
var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
instanceReportSource.ReportDocument = report;
var reportProcessor = new ReportProcessor();
var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);
using (var fs = new System.IO.FileStream("webpage.pdf", System.IO.FileMode.Create))
{
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
}
}
}
// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using System.Net;
class TelerikExample
{
static void Main()
{
string htmlContent;
using (var client = new WebClient())
{
htmlContent = client.DownloadString("https://example.com");
}
var report = new Telerik.Reporting.Report();
var htmlTextBox = new Telerik.Reporting.HtmlTextBox()
{
Value = htmlContent
};
report.Items.Add(htmlTextBox);
var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
instanceReportSource.ReportDocument = report;
var reportProcessor = new ReportProcessor();
var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);
using (var fs = new System.IO.FileStream("webpage.pdf", System.IO.FileMode.Create))
{
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
}
}
}
Imports Telerik.Reporting
Imports Telerik.Reporting.Processing
Imports System.Net
Imports System.IO
Class TelerikExample
Shared Sub Main()
Dim htmlContent As String
Using client As New WebClient()
htmlContent = client.DownloadString("https://example.com")
End Using
Dim report As New Telerik.Reporting.Report()
Dim htmlTextBox As New Telerik.Reporting.HtmlTextBox() With {
.Value = htmlContent
}
report.Items.Add(htmlTextBox)
Dim instanceReportSource As New Telerik.Reporting.InstanceReportSource()
instanceReportSource.ReportDocument = report
Dim reportProcessor As New ReportProcessor()
Dim result = reportProcessor.RenderReport("PDF", instanceReportSource, Nothing)
Using fs As New FileStream("webpage.pdf", FileMode.Create)
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length)
End Using
End Sub
End Class
Abordagem IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfExample
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class IronPdfExample
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class IronPdfExample
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
O Relatórios da Telerik não possui um método integrado de URL para PDF — você busca o HTML por conta própria (aqui via WebClient), e o motor do lado do servidor não executa JavaScript, portanto scripts externos e conteúdo dinâmico não são renderizados. O método RenderUrlAsPdf do IronPDF captura a página renderizada completa exatamente como aparece em um navegador.
Consulte a documentação sobre URLs para PDF para obter informações sobre autenticação e opções de cabeçalho personalizadas.
Implementando cabeçalhos e rodapés com números de página
Cabeçalhos e rodapés com numeração de páginas dinâmica é essencial para documentos profissionais. As abordagens de implementação diferem significativamente.
Abordagem de Relatórios da Telerik:
// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using Telerik.Reporting.Drawing;
class TelerikExample
{
static void Main()
{
var report = new Telerik.Reporting.Report();
// Add page header
var pageHeader = new Telerik.Reporting.PageHeaderSection();
pageHeader.Height = new Unit(0.5, UnitType.Inch);
pageHeader.Items.Add(new Telerik.Reporting.TextBox()
{
Value = "Document Header",
Location = new PointU(0, 0),
Size = new SizeU(new Unit(6, UnitType.Inch), new Unit(0.3, UnitType.Inch))
});
report.PageHeaderSection = pageHeader;
// Add page footer
var pageFooter = new Telerik.Reporting.PageFooterSection();
pageFooter.Height = new Unit(0.5, UnitType.Inch);
pageFooter.Items.Add(new Telerik.Reporting.TextBox()
{
Value = "Page {PageNumber} of {PageCount}",
Location = new PointU(0, 0),
Size = new SizeU(new Unit(6, UnitType.Inch), new Unit(0.3, UnitType.Inch))
});
report.PageFooterSection = pageFooter;
// Add content
var htmlTextBox = new Telerik.Reporting.HtmlTextBox()
{
Value = "<h1>Report Content</h1><p>This is the main content.</p>"
};
report.Items.Add(htmlTextBox);
var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
instanceReportSource.ReportDocument = report;
var reportProcessor = new ReportProcessor();
var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);
using (var fs = new System.IO.FileStream("report_with_headers.pdf", System.IO.FileMode.Create))
{
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
}
}
}
// NuGet: Install-Package Telerik.Reporting
using Telerik.Reporting;
using Telerik.Reporting.Processing;
using Telerik.Reporting.Drawing;
class TelerikExample
{
static void Main()
{
var report = new Telerik.Reporting.Report();
// Add page header
var pageHeader = new Telerik.Reporting.PageHeaderSection();
pageHeader.Height = new Unit(0.5, UnitType.Inch);
pageHeader.Items.Add(new Telerik.Reporting.TextBox()
{
Value = "Document Header",
Location = new PointU(0, 0),
Size = new SizeU(new Unit(6, UnitType.Inch), new Unit(0.3, UnitType.Inch))
});
report.PageHeaderSection = pageHeader;
// Add page footer
var pageFooter = new Telerik.Reporting.PageFooterSection();
pageFooter.Height = new Unit(0.5, UnitType.Inch);
pageFooter.Items.Add(new Telerik.Reporting.TextBox()
{
Value = "Page {PageNumber} of {PageCount}",
Location = new PointU(0, 0),
Size = new SizeU(new Unit(6, UnitType.Inch), new Unit(0.3, UnitType.Inch))
});
report.PageFooterSection = pageFooter;
// Add content
var htmlTextBox = new Telerik.Reporting.HtmlTextBox()
{
Value = "<h1>Report Content</h1><p>This is the main content.</p>"
};
report.Items.Add(htmlTextBox);
var instanceReportSource = new Telerik.Reporting.InstanceReportSource();
instanceReportSource.ReportDocument = report;
var reportProcessor = new ReportProcessor();
var result = reportProcessor.RenderReport("PDF", instanceReportSource, null);
using (var fs = new System.IO.FileStream("report_with_headers.pdf", System.IO.FileMode.Create))
{
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
}
}
}
Imports Telerik.Reporting
Imports Telerik.Reporting.Processing
Imports Telerik.Reporting.Drawing
Imports System.IO
Class TelerikExample
Shared Sub Main()
Dim report As New Telerik.Reporting.Report()
' Add page header
Dim pageHeader As New Telerik.Reporting.PageHeaderSection()
pageHeader.Height = New Unit(0.5, UnitType.Inch)
pageHeader.Items.Add(New Telerik.Reporting.TextBox() With {
.Value = "Document Header",
.Location = New PointU(0, 0),
.Size = New SizeU(New Unit(6, UnitType.Inch), New Unit(0.3, UnitType.Inch))
})
report.PageHeaderSection = pageHeader
' Add page footer
Dim pageFooter As New Telerik.Reporting.PageFooterSection()
pageFooter.Height = New Unit(0.5, UnitType.Inch)
pageFooter.Items.Add(New Telerik.Reporting.TextBox() With {
.Value = "Page {PageNumber} of {PageCount}",
.Location = New PointU(0, 0),
.Size = New SizeU(New Unit(6, UnitType.Inch), New Unit(0.3, UnitType.Inch))
})
report.PageFooterSection = pageFooter
' Add content
Dim htmlTextBox As New Telerik.Reporting.HtmlTextBox() With {
.Value = "<h1>Report Content</h1><p>This is the main content.</p>"
}
report.Items.Add(htmlTextBox)
Dim instanceReportSource As New Telerik.Reporting.InstanceReportSource()
instanceReportSource.ReportDocument = report
Dim reportProcessor As New ReportProcessor()
Dim result = reportProcessor.RenderReport("PDF", instanceReportSource, Nothing)
Using fs As New FileStream("report_with_headers.pdf", FileMode.Create)
fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length)
End Using
End Sub
End Class
Abordagem IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class IronPdfExample
{
static void Main()
{
var renderer = new ChromePdfRenderer();
// Configure header and footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Document Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages}</div>"
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>This is the main content.</p>");
pdf.SaveAs("report_with_headers.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class IronPdfExample
{
static void Main()
{
var renderer = new ChromePdfRenderer();
// Configure header and footer
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Document Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages}</div>"
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>This is the main content.</p>");
pdf.SaveAs("report_with_headers.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Class IronPdfExample
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
' Configure header and footer
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center'>Document Header</div>"
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
.HtmlFragment = "<div style='text-align:center'>Page {page} of {total-pages}</div>"
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report Content</h1><p>This is the main content.</p>")
pdf.SaveAs("report_with_headers.pdf")
End Sub
End Class
O Relatórios da Telerik requer a criação de objetos PageHeaderSection e PageFooterSection, configuração de medições Unit, definição de propriedades Location e Size, e gerenciamento de itens TextBox com coordenadas específicas. A abordagem baseada em HTML do IronPDF usa estilização CSS familiar e placeholders simples como {page} e {total-pages}.
Saiba mais sobre as opções de cabeçalho e rodapé na documentação de cabeçalhos e rodapés .
Referência de mapeamento da API de relatórios da Telerik para o IronPDF
Este mapeamento acelera a migração ao mostrar equivalentes diretos da API:
| Relatórios da Telerik | IronPDF | ||||
|---|---|---|---|---|---|
Report classe |
ChromePdfRenderer |
||||
ReportProcessor |
renderer.RenderHtmlAsPdf() |
||||
ReportSource |
String ou arquivo HTML | ||||
.trdp / .trdx arquivos |
Modelos HTML/CSS | ||||
ReportParameter |
Interpolação de strings / Razor | ||||
ReportDataSource |
vinculação de dados em C# | ||||
RenderReport("PDF") |
RenderHtmlAsPdf() |
||||
Export() |
pdf.SaveAs() |
||||
TextBox item de relatório |
HTML , , |
||||
Table item de relatório |
HTML |

