C#에서 BitMiracle Docotic PDF에서 IronPDF로 마이그레이션하는 방법
BitMiracle Docotic PDF는 100% 관리 코드 아키텍처와 광범위한 프로그래밍 가능한 PDF 조작 기능으로 유명한 평판이 좋은 .NET PDF 라이브러리입니다. 그러나 HTML-TO-PDF 변환, 레이아웃 기능 및 기타 기능에 대해 별도의 패키지를 요구하는 모듈형 애드온 구조는 프로젝트 관리와 라이선스를 복잡하게 만듭니다. 이 포괄적인 가이드는 BitMiracle Docotic PDF에서 IronPDF로의 단계별 마이그레이션 경로를 제공하며, Chromium 기반의 HTML 렌더링이 내장된 단일 NuGet 패키지의 모든 기능을 포함한 통합 .NET PDF 라이브러리입니다.
BitMiracle Docotic PDF에서 IronPDF로 마이그레이션해야 하는 이유
BitMiracle Docotic PDF는 강력한 PDF 조작 기능을 제공하지만 여러 요인이 개발 팀이 보다 간소화된 아키텍처를 제공하는 대안을 찾도록 유도합니다.
패키지 아키텍처 비교
BitMiracle Docotic PDF는 모든 기능에 대해 여러 패키지를 요구하는 모듈형 애드온 접근 방식을 사용합니다:
| 측면 | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| HTML-에서-PDF | 별도의 애드온(HtmlToPdf)이 필요 | 내장 핵심 기능 |
| 패키지 구조 | 핵심 + 다수의 애드온 | 단일 NuGet 패키지 |
| 라이센스 모델 | 애드온 별 라이선싱 | 모든 기능 포함 |
| API 복잡성 | 애드온 당 별도의 네임스페이스 | 통합된 API |
| HTML 엔진 | Chromium (애드온 통해) | Chromium (내장됨) |
| 커뮤니티 규모 | 작음 | 큼, 더 많은 리소스 |
| 문서화 | 기술적 레퍼런스 | 폭넓은 튜토리얼 |
기능 패리티
두 라이브러리 모두 포괄적인 PDF 기능을 지원합니다:
| 기능 | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| 처음부터 PDF 생성 | ✅ | ✅ |
| HTML to PDF | ✅ (add-on 필요) | ✅ (내장) |
| URL을 PDF로 변환 | ✅ (add-on 필요) | ✅ (내장) |
| PDF 조작 | ✅ | ✅ |
| 텍스트 추출 | ✅ | ✅ |
| 병합/분할 | ✅ | ✅ |
| 디지털 서명 | ✅ | ✅ |
| 암호화 | ✅ | ✅ |
| 양식 채우기 | ✅ | ✅ |
| PDF/A 준수 | ✅ | ✅ |
접근 방식의 주요 차이점
BitMiracle Docotic PDF는 좌표 위치(canvas.DrawString(x, y, text))를 기반으로 한 캔버스 기반 드로잉을 사용하고, IronPDF는 HTML/CSS를 활용하여 레이아웃과 위치를 조정합니다. 이는 웹 기술에 익숙한 개발자를 위한 콘텐츠 생성을 간소화하는 패러다임 전환을 나타냅니다.
이전 준비
필수 조건
환경이 다음 요구 사항을 충족하는지 확인하세요:
- .NET Framework 4.6.2+ 또는 .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ 또는 VS Code와 C# 확장
- NuGet 패키지 관리자 접근 -IronPDF라이선스 키 (ironpdf.com에서 무료 체험판 제공)
BitMiracle Docotic PDF사용 감사
다음 명령어를 솔루션 디렉토리에서 실행하여 모든 Docotic.Pdf 참조를 식별하십시오:
# Find all Docotic.Pdf usages in your codebase
grep -r "using BitMiracle.Docotic" --include="*.cs" .
grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" .
# Find NuGet package references
grep -r "Docotic.Pdf" --include="*.csproj" .
# Find all Docotic.Pdf usages in your codebase
grep -r "using BitMiracle.Docotic" --include="*.cs" .
grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" .
# Find NuGet package references
grep -r "Docotic.Pdf" --include="*.csproj" .
예상해야 할 주요 변경사항
| 변경 | BitMiracle Docotic PDF | IronPDF | 영향 |
|---|---|---|---|
| HTML 렌더링 | HtmlToPdf 애드온 필요 | 내장형 | 애드온 패키지 제거 |
| 페이지 인덱싱 | 0 기반 (Pages[0]) |
0 기반 (Pages[0]) |
변경 필요 없음 |
| 좌표계 | 하단-좌측 원점 | HTML/CSS 흐름 | 위치 지정을 위해 CSS 사용 |
| 캔버스 드로잉 | PdfCanvas.DrawText() |
HTML 마크업 | 패러다임 전환 |
| 텍스트 추출 | page.GetText() |
pdf.ExtractAllText() |
메소드명 변경 |
| 문서 로딩 | new PdfDocument(path) |
PdfDocument.FromFile(path) |
생성자 → 정적 메소드 |
| 저장 | document.Save(path) |
pdf.SaveAs(path) |
메소드명 변경 |
| 처분 | IDisposable 패턴 |
필요하지 않음 | 더 간단한 리소스 관리 |
단계별 마이그레이션 프로세스
1단계: NuGet 패키지 업데이트
BitMiracle Docotic PDF 패키지를 제거하고 IronPDF를 설치하십시오:
# Remove Docotic.Pdf packages
dotnet remove package BitMiracle.Docotic.Pdf
dotnet remove package BitMiracle.Docotic.Pdf.HtmlToPdf
dotnet remove package BitMiracle.Docotic.Pdf.Layout
# Install IronPDF
dotnet add package IronPdf
# Remove Docotic.Pdf packages
dotnet remove package BitMiracle.Docotic.Pdf
dotnet remove package BitMiracle.Docotic.Pdf.HtmlToPdf
dotnet remove package BitMiracle.Docotic.Pdf.Layout
# Install IronPDF
dotnet add package IronPdf
2단계: 네임스페이스 참조 업데이트
BitMiracle Docotic PDF 네임스페이스를 IronPDF로 교체하십시오:
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
using BitMiracle.Docotic.Pdf.HtmlToPdf;
// Add this
using IronPdf;
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
using BitMiracle.Docotic.Pdf.HtmlToPdf;
// Add this
using IronPdf;
Imports IronPdf
3단계: 라이선스 구성
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
완전한 API 마이그레이션 참조
문서 작업
| 작업 | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| 빈 문서 만들기 | new PdfDocument() |
new PdfDocument() |
| 파일에서 로드 | new PdfDocument(path) |
PdfDocument.FromFile(path) |
| 스트림에서 로드 | PdfDocument.Load(stream) |
PdfDocument.FromStream(stream) |
| 바이트에서 로드 | PdfDocument.Load(bytes) |
PdfDocument.FromBinaryData(bytes) |
| 파일에 저장 | document.Save(path) |
pdf.SaveAs(path) |
| 페이지 수 가져오기 | document.PageCount |
pdf.PageCount |
| 닫기/처리 | document.Dispose() |
필요하지 않음 |
HTML을 PDF로 변환
| 작업 | BitMiracle Docotic PDF (HtmlToPdf 애드온) | IronPDF |
|---|---|---|
| HTML 문자열을 PDF로 변환 | HtmlConverter.Create(html).ToPdf() |
renderer.RenderHtmlAsPdf(html) |
| HTML 파일을 PDF로 변환 | HtmlConverter.Create(new Uri(filePath)).ToPdf() |
renderer.RenderHtmlFileAsPdf(path) |
| URL을 PDF로 변환 | HtmlConverter.Create(new Uri(url)).ToPdf() |
renderer.RenderUrlAsPdf(url) |
| 페이지 크기 설정 | options.PageSize = PageSize.A4 |
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 |
| 여백 설정 | options.PageMargins = new Margins(20) |
renderer.RenderingOptions.MarginTop = 20 |
병합 및 분할 작업
| 작업 | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| 문서 병합 | doc1.Append(doc2) |
PdfDocument.Merge(pdf1, pdf2) |
| 문서 분할 | document.CopyPage(index) 새 문서로 |
pdf.CopyPages(start, end) |
코드 마이그레이션 예제
HTML을 PDF로 변환
가장 일반적인 작업은 IronPDF가 제공하는 중요한 단순화를 보여줍니다.
BitMiracle Docotic PDF 구현:
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument())
{
string html = "<html><body><h1>Hello World</h1><p>This isHTML to PDFconversion.</p></body></html>";
pdf.CreatePage(html);
pdf.Save("output.pdf");
}
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument())
{
string html = "<html><body><h1>Hello World</h1><p>This isHTML to PDFconversion.</p></body></html>";
pdf.CreatePage(html);
pdf.Save("output.pdf");
}
Console.WriteLine("PDF created successfully");
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Class Program
Shared Sub Main()
Using pdf As New PdfDocument()
Dim html As String = "<html><body><h1>Hello World</h1><p>This isHTML to PDFconversion.</p></body></html>"
pdf.CreatePage(html)
pdf.Save("output.pdf")
End Using
Console.WriteLine("PDF created successfully")
End Sub
End Class
IronPDF 구현:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This isHTML to PDFconversion.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This isHTML to PDFconversion.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer As New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1><p>This isHTML to PDFconversion.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
IronPDF는 using 문구 요구를 제거하고, Chromium 기반 렌더링 능력을 명확하게 나타내는 전용 ChromePdfRenderer 클래스를 제공합니다. 더 많은 HTML 변환 옵션은 HTML to PDF 문서를 참조하십시오.
여러 PDF 병합
BitMiracle Docotic PDF 구현:
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf1 = new PdfDocument("document1.pdf"))
using (var pdf2 = new PdfDocument("document2.pdf"))
{
pdf1.Append(pdf2);
pdf1.Save("merged.pdf");
}
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf1 = new PdfDocument("document1.pdf"))
using (var pdf2 = new PdfDocument("document2.pdf"))
{
pdf1.Append(pdf2);
pdf1.Save("merged.pdf");
}
Console.WriteLine("PDFs merged successfully");
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Class Program
Shared Sub Main()
Using pdf1 As New PdfDocument("document1.pdf"), pdf2 As New PdfDocument("document2.pdf")
pdf1.Append(pdf2)
pdf1.Save("merged.pdf")
End Using
Console.WriteLine("PDFs merged successfully")
End Sub
End Class
IronPDF 구현:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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");
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
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");
Console.WriteLine("PDFs merged successfully");
}
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
Dim pdf1 As PdfDocument = PdfDocument.FromFile("document1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("document2.pdf")
Dim merged As PdfDocument = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
merged.SaveAs("merged.pdf")
Console.WriteLine("PDFs merged successfully")
End Sub
End Module
IronPDF의 정적 Merge 메소드는 여러 문서를 직접 받아들이며, 반복적인 Append 패턴보다 더 간결한 API를 제공합니다. 더 많은 옵션은 PDF 병합 문서를 참조하십시오.
텍스트 추출
BitMiracle Docotic PDF 구현:
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument("document.pdf"))
{
string allText = "";
foreach (var page in pdf.Pages)
{
allText += page.GetText();
}
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument("document.pdf"))
{
string allText = "";
foreach (var page in pdf.Pages)
{
allText += page.GetText();
}
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Module Program
Sub Main()
Using pdf As New PdfDocument("document.pdf")
Dim allText As String = ""
For Each page In pdf.Pages
allText &= page.GetText()
Next
Console.WriteLine("Extracted text:")
Console.WriteLine(allText)
End Using
End Sub
End Module
IronPDF 구현:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim allText As String = pdf.ExtractAllText()
Console.WriteLine("Extracted text:")
Console.WriteLine(allText)
End Sub
End Class
IronPDF는 여러 줄 루프에서 텍스트 추출을 단일 메서드 호출로 축소합니다. 추출 옵션에 대한 자세한 내용은 텍스트 추출 문서를 참조하십시오.
암호 보호 및 암호화
IronPDF 구현:
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>")
' Set security
pdf.SecuritySettings.UserPassword = "userPassword"
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SaveAs("protected.pdf")
포괄적인 보안 옵션은 암호화 문서를 참조하십시오.
머리말과 바닥글
IronPDF 구현:
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:12px;'>
Company Header - Confidential
</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>Document 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 - Confidential
</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>Document Content</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:12px;'>
Company Header - Confidential
</div>",
.DrawDividerLine = True,
.MaxHeight = 30
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
.DrawDividerLine = True,
.MaxHeight = 25
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>")
pdf.SaveAs("with_headers.pdf")
IronPDF는 {page} 및 {total-pages}와 같은 플레이스홀더 토큰을 동적 페이지 번호 매기기에 지원합니다. 더 많은 옵션은 헤더 및 푸터 문서를 참조하세요.
중요한 마이그레이션 노트
캔버스에서 HTML 패러다임 변화
BitMiracle Docotic PDF의 캔버스 기반 드로잉 접근 방식은 CSS 배치로 HTML로 변환해야 합니다:
BitMiracle Docotic PDF 패턴:
var canvas = pdfPage.Canvas;
canvas.DrawString(50, 50, "Hello, World!");
var canvas = pdfPage.Canvas;
canvas.DrawString(50, 50, "Hello, World!");
Dim canvas = pdfPage.Canvas
canvas.DrawString(50, 50, "Hello, World!")
IronPDF 패턴:
var html = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
var html = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
Dim html As String = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
동일한 페이지 인덱싱
두 라이브러리 모두 0 기반 인덱싱을 사용합니다(Pages[0]는 첫 번째 페이지입니다) - 페이지 접근 코드를 변경할 필요가 없습니다.
폐기 불필요
IronPDF는 메모리 관리를 위한 using 문구가 필요하지 않아, 코드 구조가 단순해집니다:
//BitMiracle Docotic PDF- disposal required
using (var pdf = new PdfDocument("input.pdf"))
{
// operations
}
//IronPDF- disposal optional
var pdf = PdfDocument.FromFile("input.pdf");
// operations - no using statement needed
//BitMiracle Docotic PDF- disposal required
using (var pdf = new PdfDocument("input.pdf"))
{
// operations
}
//IronPDF- disposal optional
var pdf = PdfDocument.FromFile("input.pdf");
// operations - no using statement needed
Imports BitMiracle.Docotic.Pdf
' BitMiracle Docotic PDF - disposal required
Using pdf As New PdfDocument("input.pdf")
' operations
End Using
' IronPDF - disposal optional
Dim pdf = PdfDocument.FromFile("input.pdf")
' operations - no using statement needed
비동기 지원
BitMiracle Docotic PDF의 HtmlToPdf 애드온은 곳곳에서 비동기 패턴이 필요합니다. IronPDF는 동기식 및 비동기식 메서드를 모두 지원합니다:
// Synchronous
var pdf = renderer.RenderHtmlAsPdf(html);
// Asynchronous
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Synchronous
var pdf = renderer.RenderHtmlAsPdf(html);
// Asynchronous
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
' Synchronous
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Asynchronous
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
ASP.NET Core 통합
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");
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpGet("generate")>
Public Function GeneratePdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
<HttpGet("generate-async")>
Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
Dim renderer = New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")
Return File(pdf.Stream, "application/pdf", "report.pdf")
End Function
End Class
마이그레이션 후 점검 목록
코드 마이그레이션을 완료한 후, 다음을 확인하십시오:
- PDF 생성이 올바르게 작동하는지 확인하기 위해 모든 단위 테스트를 수행합니다
- PDF 출력 품질을 비교합니다 (IronPDF의 Chromium 엔진은 약간 다르게 렌더링할 수 있으며 보통 더 나은 품질을 제공합니다)
- 텍스트 추출 정확성을 확인합니다
- 양식 채우기 기능 테스트
- 적용 가능한 경우 디지털 서명을 확인합니다
- 묶음 작업에 대한 성능 테스트
- 모든 대상 환경에서 테스트합니다
- CI/CD 파이프라인을 업데이트하세요
- Docotic.Pdf 라이선스 파일 제거
PDF 인프라의 미래 대비
.NET 10 및 C# 14가 새로운 언어 기능을 도입함에 따라 통합 아키텍처를 가진 PDF 라이브러리를 선택하면 종속성 관리를 단순화하고 기능 가용성을 보장합니다. IronPDF의 단일 패키지 접근 방식은 프로젝트가 2025년과 2026년으로 확장됨에 따라 다중 애드온 호환성을 추적할 필요가 없음을 의미합니다.
추가 리소스
BitMiracle Docotic PDF에서 IronPDF로의 마이그레이션은 여러 애드온 패키지 관리를 제거하고 동일한 Chromium 기반 HTML 렌더링 기능을 제공합니다. 캔버스 기반 드로잉에서 HTML/CSS 위치 지정으로의 전환은 대부분의 .NET 개발자가 이미 가지고 있는 웹 개발 기술을 활용하여 더 유지 관리 가능한 PDF 생성 코드를 만듭니다.

