PDFView4NET에서 IronPDF로의 마이그레이션 방법 (C#)
PDFView4NET에서 IronPDF로 마이그레이션하면 PDF 워크플로가 WinForms/WPF 뷰 컴포넌트에서 서버에 최적화된 PDF 생성 및 조작 라이브러리로 전환됩니다. 이 가이드는 PDFView4NET의 보기/렌더/인쇄 범위를 넘어 서버 쪽 처리, 웹 애플리케이션 지원 및 보다 넓은 PDF 라이프사이클 관리가 가능하도록 단계별 마이그레이션 경로를 제공합니다.
왜 PDFView4NET에서 IronPDF로 마이그레이션해야 하는지
PDFView4NET이해하기
PDFView4NET (O2 솔루션, o2sol.com)은WinForms및WPF애플리케이션을 위한 보기 / 렌더링 / 인쇄 도구 키트입니다. 두 개의 NuGet 패키지인 O2S.Components.PDFView4NET.Win 및 O2S.Components.PDFView4NET.WPF로 제공되며, 자체 PDF 렌더링 엔진을 포함합니다. O2 Solutions는 프로그래밍에 의한 생성/조작을 위한 별도의 라이브러리인 PDF4NET을 판매합니다; 이 가이드는 PDFView4NET에만 해당됩니다.
PDF 생성, HTML-to-PDF 렌더링, 또는 서버측 워크플로가 필요한 팀은 종종 PDFView4NET을 다른 라이브러리와 조합하여 사용하거나 IronPDF와 같은 툴킷으로 전환하여 생성과 조작, 헤드리스 배포 시나리오를 모두 지원합니다.
보기 / 렌더 / 인쇄 범위
PDFView4NET는 PDF 표시, 렌더링 및 인쇄에 중점을 두며 주석 및 양식 채우기를 포함합니다. 마이그레이션을 고려하는 일반적인 이유:
-
보기 / 렌더 / 인쇄의 중점: PDFView4NET은 기존 PDF를 로드하여 표시, 인쇄 또는 이미지 렌더링합니다. HTML 또는 URL로부터 PDF를 생성하지 않습니다.
-
UI 프레임워크 종속성:WinForms및WPF에디션으로 배포됩니다; 둘 다 Windows 데스크톱을 타겟으로 하므로 콘솔 작업자 또는 서버측 호스트에서의 사용에 제한적입니다.
-
HTML을 PDF로 변환할 수 없음:
HtmlToPdfConverter또는O2S.Components.PDFView4NET에 HTML 렌더링 API가 없습니다. -
제한된 조작: 조작은 전체 콘텐츠 저작보다는 주석 및 양식 필드에 중점을 둡니다.
-
Linux / Docker/ 서버 경로 없음: 도구 키트는 WinForms/WPF를 통해 Windows 전용이며, Linux 또는 컨테이너 작업에 대한 ASP.NET 호스트에 대해 설계되지 않았습니다.
- 활성화되었지만 범위가 좁음: O2 솔루션은 아직 릴리스를 제공합니다; 제품이 유지 관리되지만 의도적으로 범위가 좁습니다.
PDFView4NET대IronPDF비교
| 기능 | PDFView4NET | IronPDF |
|---|---|---|
| 주요 초점 | PDF 보기 | 완전한 PDF 솔루션 (생성, 보기, 편집) |
| 필요한 UI 프레임워크 | WinForms, WPF | None |
| PDF 생성 | 아니요 | 예 |
| PDF 조작 | 제한적 지원 (주석) | 예 |
| 서버-사이드 | 지원되지 않음 | 풀 서포트 |
| 웹 애플리케이션 | 아니요 | 예 |
| 콘솔 앱 | 제한적 | 풀 서포트 |
| Azure/Docker | 아니요 | 예 |
| HTML to PDF | 아니요 | 예 |
| 크로스-플랫폼 컨텍스트 | 아니요 | 예 |
| 통합 용이성 | 중간 | 높음 |
IronPDF는 보기와 관련된 워크플로 위에 PDF 생성, 조작 및 렌더링을 포함하여 PDFView4NET의 보기/렌더/인쇄 범위를 넘어서는 사용 사례에 대응합니다.
IronPDF는 또한 컨텍스트에 독립적이며 — Windows, Linux, macOS, Docker및 Azure에서 웹 애플리케이션, 서비스 및 콘솔 애플리케이션을 실행하여 크로스 플랫폼 지원이나 서버 호스팅이 필요한 프로젝트에 중요할 수 있습니다.
시작하기 전에
필수 조건
- .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
- IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요
NuGet 패키지 변경 사항
<PackageReference Include="O2S.Components.PDFView4NET.Win" Version="*" Remove />
<PackageReference Include="IronPdf" Version="*" />
<PackageReference Include="O2S.Components.PDFView4NET.Win" Version="*" Remove />
<PackageReference Include="IronPdf" Version="*" />
또는 CLI를 통해:
dotnet remove package O2S.Components.PDFView4NET.Win
# (use O2S.Components.PDFView4NET.WPF for theWPFedition)
dotnet add package IronPdf
dotnet remove package O2S.Components.PDFView4NET.Win
# (use O2S.Components.PDFView4NET.WPF for theWPFedition)
dotnet add package IronPdf
라이선스 구성
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
완전한 API 참조
네임스페이스 변경
// Before: PDFView4NET
using O2S.Components.PDFView4NET;
// After: IronPDF
using IronPdf;
// Before: PDFView4NET
using O2S.Components.PDFView4NET;
// After: IronPDF
using IronPdf;
Imports IronPdf
핵심 API 매핑
| PDFView4NET | IronPDF |
|---|---|
new PDFDocument(); doc.Load(path) |
PdfDocument.FromFile(path) |
new PDFDocument(); doc.Load(stream) |
PdfDocument.FromStream(stream) |
document.Pages[index] |
pdf.Pages[index] |
document.PageCount |
pdf.PageCount |
document.Print(...) |
pdf.Print() |
document.Close() |
pdf.Dispose() |
| PDFView4NET에서 사용하지 않음 | ChromePdfRenderer (HTML을 PDF로) |
| PDFView4NET에서 사용하지 않음 | PdfDocument.Merge() |
| PDFView4NET에서 사용하지 않음 | pdf.ApplyWatermark() |
document.SecurityManager |
pdf.SecuritySettings |
코드 마이그레이션 예제
예제 1:URL을 PDF로 변환변환
이전 (PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
//PDFView4NETcannot fetch a URL and emit a PDF; it can only consume one.
PDFDocument document = new PDFDocument();
document.Load("input.pdf");
Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.");
document.Close();
}
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
//PDFView4NETcannot fetch a URL and emit a PDF; it can only consume one.
PDFDocument document = new PDFDocument();
document.Load("input.pdf");
Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.");
document.Close();
}
}
Imports O2S.Components.PDFView4NET
Imports System
Class Program
Shared Sub Main()
' PDFView4NET cannot fetch a URL and emit a PDF; it can only consume one.
Dim document As New PDFDocument()
document.Load("input.pdf")
Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.")
document.Close()
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("output.pdf")
End Sub
End Class
PDFView4NET에는 HTML/URL 렌더링 표면이 없으므로, O2S.Components.PDFView4NET에 HtmlToPdfConverter가 없으므로 URL을 다른 도구로 먼저 PDF로 렌더링한 다음 보거나 인쇄하기 위해 로드해야 합니다. IronPDF는 ChromePdfRenderer.RenderUrlAsPdf() 호출 하나로 전체 변환을 처리하고, SaveAs()로 저장할 수 있는 PdfDocument을 반환합니다. HTML에서 PDF로의 문서에서 포괄적인 예제를 참조하세요.
예제 2: HTML 문자열을 PDF로 변환
이전 (PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
// The HTML string cannot be rendered by PDFView4NET. Assume an upstream
// tool produced "document.pdf";PDFView4NETcan then display or print it.
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).");
document.Close();
}
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
// The HTML string cannot be rendered by PDFView4NET. Assume an upstream
// tool produced "document.pdf";PDFView4NETcan then display or print it.
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).");
document.Close();
}
}
Imports O2S.Components.PDFView4NET
Imports System
Class Program
Shared Sub Main()
' The HTML string cannot be rendered by PDFView4NET. Assume an upstream
' tool produced "document.pdf"; PDFView4NET can then display or print it.
Dim document As New PDFDocument()
document.Load("document.pdf")
Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).")
document.Close()
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("document.pdf")
End Sub
End Class
HtmlContent 속성이나 HTML 렌더링 API가 O2S.Components.PDFView4NET에 없으므로 HTML 문자열은 다른 곳에서 PDF로 생성된 다음 뷰어에 로드해야 합니다. IronPDF는 HTML 문자열을 RenderHtmlAsPdf()로 직접 수용하고 PdfDocument을 반환합니다. 더 많은 정보를 보려면 튜토리얼을 참조하세요.
예제 3: PDF에서 텍스트 추출
이전 (PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
using System.IO;
class Program
{
static void Main()
{
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument();
document.Load(fs);
string text = "";
for (int i = 0; i < document.PageCount; i++)
{
text += document.Pages[i].ExtractText();
}
Console.WriteLine(text);
document.Close();
}
}
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
using System.IO;
class Program
{
static void Main()
{
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument();
document.Load(fs);
string text = "";
for (int i = 0; i < document.PageCount; i++)
{
text += document.Pages[i].ExtractText();
}
Console.WriteLine(text);
document.Close();
}
}
}
Imports O2S.Components.PDFView4NET
Imports System
Imports System.IO
Class Program
Shared Sub Main()
Using fs As FileStream = File.OpenRead("document.pdf")
Dim document As New PDFDocument()
document.Load(fs)
Dim text As String = ""
For i As Integer = 0 To document.PageCount - 1
text &= document.Pages(i).ExtractText()
Next
Console.WriteLine(text)
document.Close()
End Using
End Sub
End Class
이후 (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim text As String = pdf.ExtractAllText()
Console.WriteLine(text)
End Sub
End Class
이 예제는 중요한 API 차이를 강조합니다. PDFView4NET는 FileStream을 생성하고 PDFDocument을 인스턴스화하며 Load(fs)을 호출한 후, document.PageCount을 반복하여 페이지마다 Pages[i].ExtractText()을 연결해야 합니다.
IronPDF는 이를 극적으로 단순화합니다: PdfDocument.FromFile()은 경로에서 PDF를 직접 로드하고, ExtractAllText()은 모든 페이지에서 텍스트를 추출합니다. 수동 스트림 관리, 루프, 문자열 연결 없음 - 단 두 줄의 코드.
중요한 마이그레이션 노트
HTML 렌더링 표면
PDFView4NET은 HTML-to-PDF API가 없습니다. IronPDF는 HTML/URL 입력을 위한 ChromePdfRenderer을 도입합니다:
// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// or: renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");
// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// or: renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' or: renderer.RenderUrlAsPdf(url)
pdf.SaveAs("output.pdf")
문서 로딩 변경
// PDFView4NET: instantiate then Load(path) or Load(stream)
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");
// PDFView4NET: instantiate then Load(path) or Load(stream)
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");
' PDFView4NET: instantiate then Load(path) or Load(stream)
Dim document As New PDFDocument()
document.Load("document.pdf")
' IronPDF: Direct file path
Dim pdf = PdfDocument.FromFile("document.pdf")
페이지 접근 방식 변경
// PDFView4NET: document.PageCount and document.Pages[i]
for (int i = 0; i < document.PageCount; i++)
{
document.Pages[i].ExtractText();
}
// IronPDF: pdf.PageCount and Pages[i] or ExtractAllText()
string text = pdf.ExtractAllText();
// Or per-page: pdf.ExtractTextFromPage(0);
// PDFView4NET: document.PageCount and document.Pages[i]
for (int i = 0; i < document.PageCount; i++)
{
document.Pages[i].ExtractText();
}
// IronPDF: pdf.PageCount and Pages[i] or ExtractAllText()
string text = pdf.ExtractAllText();
// Or per-page: pdf.ExtractTextFromPage(0);
Imports PDFView4NET
Imports IronPDF
' PDFView4NET: document.PageCount and document.Pages(i)
For i As Integer = 0 To document.PageCount - 1
document.Pages(i).ExtractText()
Next
' IronPDF: pdf.PageCount and Pages(i) or ExtractAllText()
Dim text As String = pdf.ExtractAllText()
' Or per-page: pdf.ExtractTextFromPage(0)
저장 방법 변경
//PDFView4NEThas no save-from-HTML path; saving applies after edits on a loaded document.
// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");
//PDFView4NEThas no save-from-HTML path; saving applies after edits on a loaded document.
// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");
'PDFView4NEThas no save-from-HTML path; saving applies after edits on a loaded document.
' IronPDF: SaveAs()
pdf.SaveAs("output.pdf")
이동 후 새로운 기능
IronPDF로 마이그레이션 한 후 PDFView4NET가 제공할 수 없는 기능을 사용할 수 있습니다.
PDF 병합
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("complete_book.pdf")
HTML을 사용한 워터마크
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>")
pdf.SaveAs("watermarked.pdf")
비밀번호 보호
var pdf = PdfDocument.FromFile("document.pdf");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
var pdf = PdfDocument.FromFile("document.pdf");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user456"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SaveAs("protected.pdf")
양식 채우기
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.FindFormField("FirstName").Value = "John";
pdf.Form.FindFormField("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.FindFormField("FirstName").Value = "John";
pdf.Form.FindFormField("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");
Dim pdf = PdfDocument.FromFile("form.pdf")
pdf.Form.FindFormField("FirstName").Value = "John"
pdf.Form.FindFormField("LastName").Value = "Doe"
pdf.SaveAs("filled_form.pdf")
서버 측 처리
PDFView4NET은 서버 환경에서 실행할 수 없습니다. IronPDF는 여기에서 뛰어납니다:
// ASP.NET Core
[HttpGet]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(GetReportHtml());
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
// ASP.NET Core
[HttpGet]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(GetReportHtml());
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
<HttpGet>
Public Function GeneratePdf() As IActionResult
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(GetReportHtml())
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
기능 비교 요약
| 기능 | PDFView4NET | IronPDF |
|---|---|---|
| PDF 보기 | 예 (UI) | 아니오 (뷰어 사용) |
| PDF 불러오기 | 예 | 예 |
| PDF 저장 | 제한적 | 예 |
| HTML to PDF | 아니요 | 예 |
| URL을 PDF로 변환 | 아니요 | 예 |
| PDF 병합 | 아니요 | 예 |
| PDF 분할 | 제한적 | 예 |
| 워터마크 | 아니요 | 예 |
| 헤더/푸터 | 아니요 | 예 |
| 비밀번호 보호 | 아니요 | 예 |
| 디지털 서명 | 아니요 | 예 |
| 텍스트 추출 | 제한적 | 예 |
| 양식 채우기 | 제한적 | 예 |
| WinForms | 예 | 예 |
| WPF | 예 | 예 |
| 콘솔 | 제한적 | 예 |
| ASP.NET | 아니요 | 예 |
| Azure | 아니요 | 예 |
| Docker | 아니요 | 예 |
마이그레이션 체크리스트
사전 마이그레이션
- 보기 요구 사항 식별 (IronPDF의 기능으로 UI 기반 PDF 보기를 대체할 수 있는지 확인)
- 문서 인쇄 워크플로우
- PDF 조작 필요 목록
- 필요한 경우 뷰어 대체 계획 (IronPDF는 생성/조작에 중점을 둠)
- ironpdf.com에서IronPDF라이선스 키 획득
패키지 변경 사항
O2S.Components.PDFView4NET.Win(또는.WPF) NuGet 패키지를 제거합니다dotnet add package IronPdf라는IronPdfNuGet 패키지를 설치합니다:
코드 변경 사항
- 네임스페이스 가져오기를 업데이트합니다 (
using O2S.Components.PDFView4NET;→using IronPdf;) - HTML 또는 URL 입력을 위한
ChromePdfRenderer을 도입합니다 (PDFView4NET에 해당 없음) -new PDFDocument(); document.Load(path)withPdfDocument.FromFile(path)-new PDFDocument(); document.Load(stream)withPdfDocument.FromStream(stream) - 수동
for (int i = 0; i < document.PageCount; i++)(orpdf.ExtractTextFromPage(i)) document.Close()을pdf.Dispose()(또는using블록)으로 대체합니다- 애플리케이션 시작 시 라이선스 초기화 추가
마이그레이션 이후
- PDF 로딩 및 저장 테스트
- 텍스트 추출 기능 확인
- HTML을 PDF로 변환 테스트
- 서버 배포 작동 확인 (새로운 기능)
- 필요 시 교차 플랫폼 테스트 (새로운 기능)
- 서버 전용인 경우 UI 특정 PDF 코드 제거

