C#에서 FastReport에서 IronPDF로 마이그레이션하는 방법
FastReport.NET은 .NET 생태계를 위해 만들어진 강력한 보고 솔루션으로, 복잡한 데이터 기반 보고서를 생성하기 위한 시각적 보고서 디자이너와 밴드 기반 아키텍처를 특징으로 합니다. 그러나 FastReport는 현대 PDF 생성 워크플로우에 상당한 도전을 제시합니다: 보고서 디자이너 의존도는 코드 우선 개발을 제한하고, DataBand, PageHeaderBand와 같은 밴드 기반 개념에 대한 급격한 학습 곡선을 유발하며, RegisterData() 보일러플레이트를 사용하는 복잡한 데이터 바인딩과 제한된 CSS 지원을 사용하고, 여러 설치가 필요한 분산된 NuGet 패키지를 필요로 합니다. 이 포괄적인 가이드는 FastReport에서 IronPDF로의 단계별 마이그레이션 경로를 제공합니다. IronPDF는 HTML/CSS 웹 기술을 활용하여 유연하고 프로그래밍 방식으로 문서를 생성할 수 있는 범용 PDF 라이브러리입니다.
FastReport에서 IronPDF로 마이그레이션 해야 하는 이유?
FastReport.NET의 보고서 전문화는 다양한 PDF 생성을 필요로 하는 개발 팀에게 마찰을 일으킵니다. 이러한 아키텍처 차이를 이해하는 것은 마이그레이션을 계획하는 데 필수적입니다.
FastReport의 도전 과제
-
보고서 디자이너 의존성: 복잡한 레이아웃을 생성하려면 시각적 디자이너나 .frx 파일 구조에 대한 깊은 지식이 필요합니다. 이는 코드 우선 개발 접근 방식에 적합하지 않습니다.
-
가파른 학습 곡선: FastReport의 밴드 기반 아키텍처(DataBand, PageHeaderBand, PageFooterBand)는 다른 기술로 전환되지 않는 보고서 전용 개념을 이해해야 합니다.
-
제한된 CSS 지원: 웹 표준 스타일링은 기본적으로 지원되지 않으며, 스타일링은 익숙한 CSS 대신 FastReport의 독점 형식을 통해 이루어집니다.
-
복잡한 데이터 바인딩: RegisterData() 및 DataSource 연결은 간단한 PDF 생성 시나리오에도 상용구를 추가합니다.
-
단편화된 패키지: 전체 기능을 위해 여러 NuGet 패키지가 필요합니다(FastReport.OpenSource, FastReport.OpenSource.Export.PdfSimple 등).
- 라이선스 복잡성: 오픈 소스 버전은 기능이 제한되어 있으며, PDF 암호화, 디지털 서명 및 폰트 임베딩을 위해 상용 버전이 필요합니다.
아키텍처 비교
| 측면 | FastReport | IronPDF |
|---|---|---|
| 설계 접근 방식 | 시각적 디자이너 + .frx 파일 | HTML/CSS (웹 기술) |
| 학습 곡선 | 가파름 (밴드 기반 개념) | 부드러움 (HTML/CSS 지식) |
| 데이터 바인딩 | RegisterData(), DataBand | 문자열 보간, Razor, 템플릿 |
| CSS 지원 | 제한적 | 전체 CSS3와 Flexbox/Grid 제공 |
| 패키지 모델 | 다중 패키지 | 단일 패키지 (모든 기능 포함) |
| 렌더링 엔진 | 사용자 정의 | 최신 Chromium |
| PDF 조작 | 내보내기 중심 | 전체(병합, 분할, 보안, 양식) |
| 최신 .NET | .NET Standard 2.0 | .NET 6/7/8/9+ 네이티브 |
주요 마이그레이션 혜택
- 웹 기술: 독점적인 밴드 기반 레이아웃 대신 익숙한 HTML/CSS를 사용하세요.
- 코드 우선 개발: 시각적 디자이너에 의존하지 않고 프로그래밍 방식으로 PDF를 생성하세요.
- 단일 패키지: 하나의 NuGet 패키지에 모든 PDF 기능이 포함되어 있습니다.
- 최신 렌더링: 픽셀 완벽한 CSS3 출력을 위한 최신 Chromium 엔진
- 전체 PDF 조작: 병합, 분할, 보안, 양식—단순한 내보내기에 그치지 않습니다.
이전 준비
필수 조건
환경이 다음 요구 사항을 충족하는지 확인하세요:
- .NET Framework 4.6.2+ 또는 .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ 또는 VS Code와 C# 확장
- NuGet 패키지 관리자 접근 -IronPDF라이선스 키 (ironpdf.com에서 무료 체험판 제공)
FastReport사용 감사
FastReport 참조 전체를 식별하기 위해 솔루션 디렉터리에서 이러한 명령어를 실행하세요:
# Find allFastReportreferences
grep -r "FastReport\|\.frx\|PDFExport\|PDFSimpleExport\|DataBand\|RegisterData" --include="*.cs" --include="*.csproj" .
# Check NuGet packages
dotnet list package | grep FastReport
# Find allFastReportreferences
grep -r "FastReport\|\.frx\|PDFExport\|PDFSimpleExport\|DataBand\|RegisterData" --include="*.cs" --include="*.csproj" .
# Check NuGet packages
dotnet list package | grep FastReport
보고서 템플릿 문서화
마이그레이션 전에, 모든 .frx 파일과 그 목적을 카탈로그하십시오:
- 보고서 이름 및 목적
- 사용된 데이터 소스
- 헤더/푸터 구성
- 페이지 번호 요구사항
- 특별한 포맷팅 또는 스타일링
패러다임 변화 이해
FastReport에서 IronPDF로 마이그레이션할 때 가장 중요한 변화는 근본적인 설계 접근 방식입니다. FastReport는 .frx 템플릿 파일과 DataBand, PageHeaderBand, RegisterData()와 같은 고유 개념을 사용하는 밴드 기반 시각적 디자인을 사용합니다. IronPDF는 대부분의 개발자가 이미 알고 있는 웹 기술인 HTML/CSS를 사용합니다.
이는FastReport밴드 구성을 HTML 템플릿으로 변환하고, RegisterData()를 문자열 보간 또는 Razor 템플릿을 통한 직접 데이터 바인딩으로 대체하며, PageHeaderBand/PageFooterBand를 HTML 기반의 헤더와 푸터로 변환한다는 의미입니다.
단계별 마이그레이션 프로세스
1단계: NuGet 패키지 업데이트
모든FastReport패키지를 제거하고 IronPDF를 설치하세요:
# Remove allFastReportpackages
dotnet remove package FastReport.OpenSource
dotnet remove package FastReport.OpenSource.Export.PdfSimple
dotnet remove package FastReport.OpenSource.Web
dotnet remove package FastReport.OpenSource.Data.MsSql
# InstallIronPDF(includes all features)
dotnet add package IronPdf
# Remove allFastReportpackages
dotnet remove package FastReport.OpenSource
dotnet remove package FastReport.OpenSource.Export.PdfSimple
dotnet remove package FastReport.OpenSource.Web
dotnet remove package FastReport.OpenSource.Data.MsSql
# InstallIronPDF(includes all features)
dotnet add package IronPdf
2단계: 네임스페이스 참조 업데이트
FastReport 네임스페이스를 IronPDF로 대체하세요:
// Remove these
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
// Add this
using IronPdf;
// Remove these
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
// Add this
using IronPdf;
Imports IronPdf
3단계: 라이선스 구성
// 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";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
완전한 API 마이그레이션 참조
핵심 클래스 매핑
| FastReport 클래스 | IronPDF 동등 |
|---|---|
Report |
ChromePdfRenderer |
PDFExport |
ChromePdfRenderer + SecuritySettings |
PDFSimpleExport |
ChromePdfRenderer |
ReportPage |
HTML <body> 또는 <div> |
TextObject |
HTML <p>, <span>, <div> |
HTMLObject |
직접 HTML 렌더링 |
PageHeaderBand |
HtmlHeaderFooter |
PageFooterBand |
HtmlHeaderFooter |
메서드 매핑
| FastReport 메서드 | IronPDF 동등 |
|---|---|
report.Load("template.frx") |
HTML 템플릿 파일 또는 문자열 |
report.RegisterData(data, "name") |
문자열 보간 또는 Razor |
report.Prepare() |
해당 없음 |
report.Export(export, stream) |
pdf.SaveAs(path) |
페이지 번호 자리 표시자 변환
FastReport와 IronPDF는 페이지 번호를 위한 다른 자리 표시자 구문을 사용합니다:
| FastReport | IronPDF |
|---|---|
[Page] |
{page} |
[TotalPages] |
{total-pages} |
코드 마이그레이션 예제
HTML을 PDF로 변환
이 예시는 FastReport의 HTMLObject 접근 방식과 IronPDF의 직접 렌더링 간의 근본적인 차이를 설명합니다.
FastReport 구현:
// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
class Program
{
static void Main()
{
using (Report report = new Report())
{
// Create HTML object
FastReport.HTMLObject htmlObject = new FastReport.HTMLObject();
htmlObject.Width = 500;
htmlObject.Height = 300;
htmlObject.Text = "<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>";
// Prepare report
report.Prepare();
// Export to PDF
PDFSimpleExport pdfExport = new PDFSimpleExport();
using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
{
report.Export(pdfExport, fs);
}
}
}
}
// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
class Program
{
static void Main()
{
using (Report report = new Report())
{
// Create HTML object
FastReport.HTMLObject htmlObject = new FastReport.HTMLObject();
htmlObject.Width = 500;
htmlObject.Height = 300;
htmlObject.Text = "<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>";
// Prepare report
report.Prepare();
// Export to PDF
PDFSimpleExport pdfExport = new PDFSimpleExport();
using (FileStream fs = new FileStream("output.pdf", FileMode.Create))
{
report.Export(pdfExport, fs);
}
}
}
}
Imports FastReport
Imports FastReport.Export.PdfSimple
Imports System.IO
Class Program
Shared Sub Main()
Using report As New Report()
' Create HTML object
Dim htmlObject As New FastReport.HTMLObject()
htmlObject.Width = 500
htmlObject.Height = 300
htmlObject.Text = "<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>"
' Prepare report
report.Prepare()
' Export to PDF
Dim pdfExport As New PDFSimpleExport()
Using fs As New FileStream("output.pdf", FileMode.Create)
report.Export(pdfExport, fs)
End Using
End Using
End Sub
End Class
IronPDF 구현:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body><h1>Hello World</h1><p>This is a test PDF</p></body></html>")
pdf.SaveAs("output.pdf")
End Sub
End Class
FastReport는 보고서 개체를 생성하고, 고정 크기의 HTMLObject를 생성하며, 보고서를 준비하고, 스트림을 통해 내보내는 작업이 필요합니다—사용 구문을 포함하여 7줄의 코드입니다. IronPDF는 직접 HTML 렌더링을 통해 세 줄로 동일한 결과를 달성합니다. 더 많은 옵션을 보려면 HTML to PDF 문서를 참조하세요.
URL을 PDF로 변환
이 예시는 FastReport가 수동 HTML 다운로드를 요구하는 반면 IronPDF는 URL 렌더링을 기본적으로 처리하는 방식을 강조합니다.
FastReport 구현:
// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
using System.Net;
class Program
{
static void Main()
{
// Download HTML content from URL
string htmlContent;
using (WebClient client = new WebClient())
{
htmlContent = client.DownloadString("https://example.com");
}
using (Report report = new Report())
{
FastReport.HTMLObject htmlObject = new FastReport.HTMLObject();
htmlObject.Width = 800;
htmlObject.Height = 600;
htmlObject.Text = htmlContent;
report.Prepare();
PDFSimpleExport pdfExport = new PDFSimpleExport();
using (FileStream fs = new FileStream("webpage.pdf", FileMode.Create))
{
report.Export(pdfExport, fs);
}
}
}
}
// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
using System.Net;
class Program
{
static void Main()
{
// Download HTML content from URL
string htmlContent;
using (WebClient client = new WebClient())
{
htmlContent = client.DownloadString("https://example.com");
}
using (Report report = new Report())
{
FastReport.HTMLObject htmlObject = new FastReport.HTMLObject();
htmlObject.Width = 800;
htmlObject.Height = 600;
htmlObject.Text = htmlContent;
report.Prepare();
PDFSimpleExport pdfExport = new PDFSimpleExport();
using (FileStream fs = new FileStream("webpage.pdf", FileMode.Create))
{
report.Export(pdfExport, fs);
}
}
}
}
Imports FastReport
Imports FastReport.Export.PdfSimple
Imports System.IO
Imports System.Net
Class Program
Shared Sub Main()
' Download HTML content from URL
Dim htmlContent As String
Using client As New WebClient()
htmlContent = client.DownloadString("https://example.com")
End Using
Using report As New Report()
Dim htmlObject As New FastReport.HTMLObject()
htmlObject.Width = 800
htmlObject.Height = 600
htmlObject.Text = htmlContent
report.Prepare()
Dim pdfExport As New PDFSimpleExport()
Using fs As New FileStream("webpage.pdf", FileMode.Create)
report.Export(pdfExport, fs)
End Using
End Using
End Sub
End Class
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");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
FastReport는 WebClient로 HTML 콘텐츠를 수동으로 다운로드한 후, 고정 크기의 HTMLObject에 포함해야 하며, 이는 JavaScript 실행이나 상대 리소스 URL을 제대로 처리하지 못하는 해결책입니다. IronPDF의 RenderUrlAsPdf는 Chromium 엔진을 사용하여 전체 JavaScript 실행으로 라이브 웹페이지를 직접 렌더링합니다. 더 많은 옵션은 URL to PDF documentation를 참조하세요.
페이지 번호가 있는 헤더 및 푸터
이 예시는 FastReport의 밴드 기반 시스템과 IronPDF의 HTML 기반 접근 방식 간의 복잡성 차이를 설명합니다.
FastReport 구현:
// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
class Program
{
static void Main()
{
using (Report report = new Report())
{
report.Load("template.frx");
// Set report page properties
FastReport.ReportPage page = report.Pages[0] as FastReport.ReportPage;
// Add page header
FastReport.PageHeaderBand header = new FastReport.PageHeaderBand();
header.Height = 50;
FastReport.TextObject headerText = new FastReport.TextObject();
headerText.Text = "Document Header";
header.Objects.Add(headerText);
page.Bands.Add(header);
// Add page footer
FastReport.PageFooterBand footer = new FastReport.PageFooterBand();
footer.Height = 50;
FastReport.TextObject footerText = new FastReport.TextObject();
footerText.Text = "Page [Page]";
footer.Objects.Add(footerText);
page.Bands.Add(footer);
report.Prepare();
PDFSimpleExport pdfExport = new PDFSimpleExport();
using (FileStream fs = new FileStream("report.pdf", FileMode.Create))
{
report.Export(pdfExport, fs);
}
}
}
}
// NuGet: Install-Package FastReport.OpenSource
using FastReport;
using FastReport.Export.PdfSimple;
using System.IO;
class Program
{
static void Main()
{
using (Report report = new Report())
{
report.Load("template.frx");
// Set report page properties
FastReport.ReportPage page = report.Pages[0] as FastReport.ReportPage;
// Add page header
FastReport.PageHeaderBand header = new FastReport.PageHeaderBand();
header.Height = 50;
FastReport.TextObject headerText = new FastReport.TextObject();
headerText.Text = "Document Header";
header.Objects.Add(headerText);
page.Bands.Add(header);
// Add page footer
FastReport.PageFooterBand footer = new FastReport.PageFooterBand();
footer.Height = 50;
FastReport.TextObject footerText = new FastReport.TextObject();
footerText.Text = "Page [Page]";
footer.Objects.Add(footerText);
page.Bands.Add(footer);
report.Prepare();
PDFSimpleExport pdfExport = new PDFSimpleExport();
using (FileStream fs = new FileStream("report.pdf", FileMode.Create))
{
report.Export(pdfExport, fs);
}
}
}
}
Imports FastReport
Imports FastReport.Export.PdfSimple
Imports System.IO
Class Program
Shared Sub Main()
Using report As New Report()
report.Load("template.frx")
' Set report page properties
Dim page As FastReport.ReportPage = TryCast(report.Pages(0), FastReport.ReportPage)
' Add page header
Dim header As New FastReport.PageHeaderBand()
header.Height = 50
Dim headerText As New FastReport.TextObject()
headerText.Text = "Document Header"
header.Objects.Add(headerText)
page.Bands.Add(header)
' Add page footer
Dim footer As New FastReport.PageFooterBand()
footer.Height = 50
Dim footerText As New FastReport.TextObject()
footerText.Text = "Page [Page]"
footer.Objects.Add(footerText)
page.Bands.Add(footer)
report.Prepare()
Dim pdfExport As New PDFSimpleExport()
Using fs As New FileStream("report.pdf", FileMode.Create)
report.Export(pdfExport, fs)
End Using
End Using
End Sub
End Class
IronPDF 구현:
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
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("<html><body><h1>Report Content</h1><p>This is the main content.</p></body></html>");
pdf.SaveAs("report.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
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("<html><body><h1>Report Content</h1><p>This is the main content.</p></body></html>");
pdf.SaveAs("report.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = 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("<html><body><h1>Report Content</h1><p>This is the main content.</p></body></html>")
pdf.SaveAs("report.pdf")
End Sub
End Class
FastReport는 템플릿 파일을 로드하고, 페이지 개체를 캐스팅하며, 밴드 개체를 생성하고, 높이를 설정하고, 텍스트 객체를 생성하고, 밴드 컬렉션에 추가하며, 밴드를 페이지에 추가해야 합니다. IronPDF는 간단한 HTML 조각으로 HtmlHeaderFooter 를 사용합니다—헤더와 푸터를 전체 CSS로 스타일링할 수 있습니다. 페이지 번호 구문 변경 사항에 유의하십시오: [Page] 가 {page} 로, [TotalPages] 는 {total-pages} 로 변경됩니다. 더 많은 옵션은 헤더 및 푸터 문서를 참조하세요.
중요한 마이그레이션 노트
프레임워크(.frx) 템플릿 파일 없음
.frxFastReport템플릿은 IronPDF와 작동하지 않습니다. 레이아웃을 HTML/CSS 템플릿으로 변환하십시오:
//FastReport- loads .frx template
report.Load("report.frx");
//IronPDF- use HTML template
var html = File.ReadAllText("template.html");
var pdf = renderer.RenderHtmlAsPdf(html);
//FastReport- loads .frx template
report.Load("report.frx");
//IronPDF- use HTML template
var html = File.ReadAllText("template.html");
var pdf = renderer.RenderHtmlAsPdf(html);
' FastReport - loads .frx template
report.Load("report.frx")
' IronPDF - use HTML template
Dim html As String = File.ReadAllText("template.html")
Dim pdf = renderer.RenderHtmlAsPdf(html)
데이터 바인딩 변환
RegisterData()를 직접 HTML 생성으로 교체하십시오:
// FastReport
report.RegisterData(dataSet, "Data");
report.GetDataSource("Data").Enabled = true;
//IronPDF- use string interpolation or StringBuilder
var html = new StringBuilder();
foreach (var item in data)
{
html.Append($"<tr><td>{item.Name}</td><td>{item.Value}</td></tr>");
}
var pdf = renderer.RenderHtmlAsPdf(html.ToString());
// FastReport
report.RegisterData(dataSet, "Data");
report.GetDataSource("Data").Enabled = true;
//IronPDF- use string interpolation or StringBuilder
var html = new StringBuilder();
foreach (var item in data)
{
html.Append($"<tr><td>{item.Name}</td><td>{item.Value}</td></tr>");
}
var pdf = renderer.RenderHtmlAsPdf(html.ToString());
Imports System.Text
' FastReport
report.RegisterData(dataSet, "Data")
report.GetDataSource("Data").Enabled = True
' IronPDF - use string interpolation or StringBuilder
Dim html As New StringBuilder()
For Each item In data
html.Append($"<tr><td>{item.Name}</td><td>{item.Value}</td></tr>")
Next
Dim pdf = renderer.RenderHtmlAsPdf(html.ToString())
보안 설정
//IronPDFsecurity
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "password";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
//IronPDFsecurity
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SecuritySettings.UserPassword = "password";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
'IronPDFsecurity
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SecuritySettings.UserPassword = "password"
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
포괄적인 보안 옵션은 암호화 문서를 참조하십시오.
마이그레이션 후 점검 목록
코드 마이그레이션을 완료한 후, 다음을 확인하십시오:
- 생성된 PDF의 시각적 비교
- 헤더/푸터 및 페이지 번호 확인
- 프로덕션 데이터 볼륨으로 테스트하십시오
- 보안/암호화 기능을 검증하십시오
- 성능 벤치마킹
- 사용하지 않는 .frx 템플릿 파일 제거 -FastReport관련 코드를 삭제하십시오
- 문서 업데이트
PDF 인프라의 미래 대비
.NET 10의 도래와 C# 14의 새로운 언어 기능 도입으로 현대 웹 기술을 수용하는 PDF 라이브러리를 선택하면 장기적으로 유지 관리가 가능합니다. IronPDF의 HTML/CSS 접근 방식은 웹 개발 전체에서 사용되는 동일한 기술을 활용한다는 것을 의미하며, 다른 기술로 전달되지 않는 독점적인 밴드 기반 개념이 없습니다. 프로젝트가 2025년 및 2026년까지 확장됨에 따라 Flexbox 및 Grid와 같은 CSS3 기능을 사용한 표준 HTML 템플릿의 사용 가능성은 FastReport의 독점 형식이 따라갈 수 없는 설계 유연성을 제공합니다.
추가 리소스
FastReport에서 IronPDF로의 마이그레이션은 시각적 디자이너 의존성, 밴드 기반 학습 곡선 및 분열된 패키지 모델을 제거합니다. HTML/CSS 기반의 PDF 생성으로의 전환은 친숙한 웹 기술을 활용하면서 단일 패키지 내에서 병합, 분할, 보안 및 양식을 포함한 완벽한 PDF 조작 기능을 제공합니다.

