푸터 콘텐츠로 바로가기
마이그레이션 가이드

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" .
SHELL

예상해야 할 주요 변경사항

변경 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
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

완전한 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

포괄적인 보안 옵션은 암호화 문서를 참조하십시오.

머리말과 바닥글

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")
$vbLabelText   $csharpLabel

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!")
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

동일한 페이지 인덱싱

두 라이브러리 모두 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
$vbLabelText   $csharpLabel

비동기 지원

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

마이그레이션 후 점검 목록

코드 마이그레이션을 완료한 후, 다음을 확인하십시오:

  • 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 생성 코드를 만듭니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해