Telerik Reporting에서 IronPDF로의 마이그레이션 방법 (C#)
Telerik Reporting은 시각적 디자이너와 드릴다운 기능을 갖춘 인터랙티브 보고서를 구축하는 데 .NET 개발자에게 잘 맞는 강력한 Enterprise 보고 플랫폼입니다. 그러나 주요 요구 사항이 포괄적인 보고 인프라보다는 PDF 생성인 팀에게는 Telerik Reporting이 라이선스 비용, 배포 복잡성, 런타임 풋프린트에서 상당한 오버헤드를 나타냅니다.
이 가이드는 Telerik Reporting에서 IronPDF로의 전체 마이그레이션 경로를 제공하며, 이 전환을 평가하는 전문 .NET 개발자를 위한 단계별 지침, 코드 비교 및 실용적인 예제를 포함합니다.
Telerik Reporting에서 마이그레이션해야 하는 이유
Telerik Reporting에서 마이그레이션하기로 한 결정은 일반적으로 도구를 실제 요구 사항에 맞추는 데 중점을 둡니다. 개발 팀이 마이그레이션을 고려하는 주요 이유는 다음과 같습니다:
개발자별 라이선싱: 독립형 Telerik Reporting은 개발자당 약 $685에서 시작하며, DevCraft Complete 번들은 ~$1,763에서 시작합니다 (2026 Q1, ComponentSource). 둘 다 영구 + 1년 유지 관리 또는 연간 구독으로 판매됩니다. PDF 생성만 필요한 팀에게는 이는 상당한 미사용 기능을 나타냅니다.
보고서 디자이너 종속성: Telerik Reporting은 독립 실행형, 웹 또는 Visual Studio 통합 디자이너와 개인 Telerik NuGet 피드(https://nuget.telerik.com/v3/index.json, 라이선스 키 필요)에서 가져온 런타임 어셈블리가 필요합니다. 이는 개발 환경 및 CI/CD 파이프라인에 복잡성을 더합니다.
복잡한 인프라: HTML5 뷰어 시나리오의 경우, 저장소, 리졸버 및 뷰어 스크립트 구성이 포함된 Reporting REST Service(Telerik.Reporting.Services.AspNetCore)도 호스팅하여 직관적인 PDF 생성 작업에 대한 유지 관리 부담을 추가합니다.
독점 형식: .trdp 및 .trdx XML 보고서 정의(Telerik의 자체 형식 — RDL/RDLC는 명시적으로 지원되지 않음)는 Telerik 생태계에 종속됩니다. 템플릿을 마이그레이션하거나 수정하려면 Telerik 도구가 필요합니다.
무거운 런타임: 단순한 HTML-to-PDF 변환을 위한 큰 배포 풋프린트, DOCX/XLSX/PPTX/XPS에 따른 선택적 렌더링 DLL.
갱신 가능한 유지 관리: 영구 라이선스일지라도, 지속적인 업데이트, 수정 및 지원은 유지 관리 구독 갱신이 필요합니다.
Telerik Reporting이 과도할 때
데이터를 기반으로 PDF를 생성하기 위해 주로 Telerik Reporting을 사용하는 경우, 사용되지 않는 기능에 비용을 지불하는 것입니다:
| 필요한 것 | Telerik이 제공하는 것 (사용되지 않음) |
|---|---|
| HTML에서 PDF | 시각적 디자이너, 드릴다운 |
| 단순한 보고서 | 인터랙티브 뷰어, 내보내기 |
| 서버 측 PDF | 데스크톱 컨트롤, 차트 엔진 |
IronPDF는 Enterprise 보고 오버헤드 없이 집중적인 PDF 생성을 제공합니다.
IronPDF와 Telerik Reporting: 기능 비교
구조적 차이를 이해하면 기술 결정을 내리는데 이주 투자를 평가하는데 도움이 됩니다:
| 기능 | Telerik 보고서 | IronPDF |
|---|---|---|
| 포커스 | PDF 내보내기 옵션을 통한 보고서 작성 | HTML에서의 포괄적인 PDF 생성 |
| 통합 | ASP.NET Core 애플리케이션과 원활하게 작동 | .NET 애플리케이션에 통합 가능 |
| 설치 복잡성 | 보고서 디자이너 설치 필요 | 간단한 NuGet 설치 |
| 가격 | DevCraft 상업용 Suite의 일부 | 별도 라이선스, 독립형 PDF 생성에 더 비용 효율적 |
| PDF 생성 | 보고서 내보내기로 제한됨 | 고급 PDF 조작 기능을 갖춘 전체 기능 |
| 대상 고객 | 보고서 중심 솔루션이 필요한 개발자 | 유연한 PDF 생성 솔루션이 필요한 개발자 |
| 템플릿 형식 | .trdp / .trdx (XML; (RDL/RDLC 아님) |
HTML/CSS/Razor |
| 학습 곡선 | Telerik-특화 (표현 언어, 섹션) | 표준 웹 기술 |
| HTML to PDF | 서버 측 HtmlTextBox(제한된 HTML/CSS) 통해 |
전체 Chromium 렌더링 |
| URL을 PDF로 | 내장되지 않음 (HTML 직접 가져오기) | 예 |
| CSS 지원 | 제한적 (디자이너의 CSS 유사 선택자) | 전체 CSS3 |
| 렌더링 시 JavaScript | 아님 (서버 엔진이 JS를 실행하지 않음) | 전체 ES2024 |
| 디지털 서명 | 예 (X.509 / .PFX via PDF 장치 정보) | 예 |
| PDF/A | PDF/A-1b, PDF/A-2b, PDF/A-3b | PDF/A-3 |
| 런타임 크기 | 대형 (엔진 + 형식별 렌더링 DLL) | 작음 |
빠른 시작: Telerik Reporting에서 IronPDF로의 마이그레이션
이러한 기본 단계를 통해 즉시 이주를 시작할 수 있습니다.
단계 1: NuGet 패키지 교체
모든Telerik 보고서패키지를 제거:
# RemoveTelerik 보고서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
# RemoveTelerik 보고서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
IronPDF 설치하세요:
# Install IronPDF(hosted on nuget.org)
dotnet add package IronPdf
# Install IronPDF(hosted on nuget.org)
dotnet add package IronPdf
단계 2: 네임스페이스 업데이트
Telerik 네임스페이스를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
단계 3: 라이선스 초기화
애플리케이션 시작 시 라이선스 초기화를 추가합니다:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
코드 마이그레이션 예제
HTML을 PDF로 변환
가장 일반적인 사용 사례는 이러한 .NET PDF 라이브러리 간의 아키텍처적 차이를 보여줍니다.
Telerik Reporting 접근법:
// 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
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
Telerik 버전은 TypeReportSource, InstanceReportSource, HtmlTextBox이 있는 Report 객체, ReportProcessor를 생성하고, 수동 파일 스트림 관리를 필요로 합니다. IronPDF의 ChromePdfRenderer는 세 줄의 코드로 전체 프로세스를 처리합니다.
고급 HTML에서 PDF로의 시나리오는 HTML to PDF 변환 가이드를 참조하십시오.
URL을 PDF로 변환
URL-to-PDF 변환은 Telerik Reporting의 의미 있는 기능 차이를 밝혀줍니다.
Telerik Reporting 접근법:
// 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
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
Telerik Reporting에는 URL을 PDF로 변환하는 내장된 메서드가 없습니다—HTML을 직접 가져오고(WebClient를 통해), 서버 측 엔진은 JavaScript를 실행하지 않기 때문에 외부 스크립트 및 동적 콘텐츠는 렌더링되지 않습니다. IronPDF의 RenderUrlAsPdf 메서드는 브라우저에서 보이는 것과 정확히 동일하게 완료된 렌더링 페이지를 캡처합니다.
URL to PDF 문서에서 인증 및 사용자 정의 헤더 옵션을 탐색하십시오.
페이지 번호가 있는 헤더와 푸터 구현
동적 페이지 번호가 있는 헤더와 푸터는 전문 문서에 필수적입니다. 구현 접근 방식은 크게 다릅니다.
Telerik Reporting 접근법:
// 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
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
Telerik Reporting은 PageHeaderSection 및 PageFooterSection 객체를 생성하고, Unit 측정을 구성하고, Location 및 Size 속성을 설정하며, 특정 좌표로 TextBox 항목을 관리해야 합니다. IronPDF의 HTML 기반 접근 방식은 익숙한 CSS 스타일링과 {page} 및 {total-pages}같은 간단한 플레이스홀더를 사용합니다.
더 많은 헤더와 푸터 옵션에 대해 알아보세요 헤더와 푸터 문서에서.
Telerik 보고서API와IronPDF매핑 참조
이 매핑은 직접적인 API 대응을 보여주어 마이그레이션을 가속화합니다:
| Telerik 보고서 | IronPDF | ||||
|---|---|---|---|---|---|
Report 클래스 |
ChromePdfRenderer |
||||
ReportProcessor |
renderer.RenderHtmlAsPdf() |
||||
ReportSource |
HTML 문자열 또는 파일 | ||||
.trdp / .trdx 파일 |
HTML/CSS 템플릿 | ||||
ReportParameter |
문자열 보간 / Razor | ||||
ReportDataSource |
C# 데이터 바인딩 | ||||
RenderReport("PDF") |
RenderHtmlAsPdf() |
||||
Export() |
pdf.SaveAs() |
||||
TextBox 보고서 항목 |
HTML , , |
||||
Table 보고서 항목 |
HTML |

