IRONSOFTWAREHOME
동영상

사용자 정의 PDF 워터마크 적용 방법

Curtis Chau
Curtis Chau
Updated: 2026년 7월 19일

ActivePDF는 .NET 개발자들에게 신뢰할 수 있는 PDF 툴킷이었습니다. PDFTron이 2020년 6월에 인수하고 2023년 2월에 Apryse로 다시 브랜드화되어, ActivePDF는 이제 광범위한 Apryse 포트폴리오 내 여러 브랜드 중 하나에 속해 있습니다. 이 가이드는 .NET Framework 4.6.2에서 .NET 9까지 지원하는 현대적이고 적극적으로 유지 관리되는 .NET PDF 라이브러리인 IronPDF로의 철저한 단계별 마이그레이션 경로를 제공합니다.

ActivePDF에서 이동 고려해야 할 이유

ActivePDF는 여전히 출하되고 ActivePDF.Toolkit NuGet 패키지는 Apryse 하에서 계속 업데이트를 받지만, 설계 및 패키징의 여러 측면이 팀이 대안을 평가하도록 유도할 수 있습니다.

브랜드 및 로드맵 고려 사항

ActivePDF는 이제 Apryse 내의 한 브랜드로, 대표적인 Apryse SDK와 함께 존재합니다. 특히 서버 측 자동화에 중점을 두고 ActivePDF를 선택한 팀은 시간이 지남에 따라ActivePDFSKU에 남을지 아니면 더 광범위한 Apryse SDK로 옮길지에 대해 고려할 수 있습니다.

라이선싱 모델

ActivePDF의 전통적인 서버별/코어별 라이선싱은 응용 프로그램이 인프라를 통해 동적으로 확장되는 클라우드 및 컨테이너화 환경에서 마찰을 일으킬 수 있습니다.

레거시 아키텍처 패턴

ActivePDF의 API 표면은 COM/네이티브 기원을 반영합니다. CloseOutputFile 워크플로와 정수 반환 코드(성공의 경우 0)는 명시적 라이프사이클 관리가 필요하며, 이는 using, 예외 및 비동기와 같은 현대적인 C# 관례와 항상 일치하지는 않습니다.

다중 SKU 제품 구성

HTML/URL-to-PDF 렌더링은 별도의 ActivePDF.WebGrabber 제품에 있으며, PDF 조작은 ActivePDF.Toolkit에 있습니다. Toolkit 10부터 기본 라이브러리는 더 이상 시스템 폴더로 자동 복사되지 않으므로 생성자에 명시적인 CoreLibPath 인수가 필요할 수 있으며, 이는 Docker, CI 및 설치 프로그램이 없는 배포를 복잡하게 할 수 있는 패턴입니다.

##ActivePDF대 IronPDF: 주요 차이점

마이그레이션 프로세스를 시작하기 전에 ActivePDF와IronPDF간의 근본적인 차이를 이해하면 코드 변경에 대한 기대치를 설정하는 데 도움이 됩니다.

측면ActivePDFIronPDF
공급업체Apryse (이전 PDFTron, 2020년 6월ActivePDF인수)Iron Software, 독립적
제품 레이아웃Multiple SKUs (Toolkit, WebGrabber, DocConverter, Server, Meridian)단일 IronPdf NuGet 패키지
설치NuGet 패키지 + 기본 런타임 경로 (CoreLibPath v10 이후)단일 NuGet 패키지; natives bundled
API 패턴상태를 유지하는 (CloseOutputFile), COM 파생유창한 함수형 API
라이선스 모델서버별 / 코어별코드 기반 키
.NET 지원.NET Framework 4.5+ / .NET Standard 1.0+ / .NET Core프레임워크 4.6.2부터 .NET 9까지
오류 처리정수 반환 코드 (0 = 성공)표준 .NET 예외
비동기 지원네이티브 아님완전한 async/await 지원

이전 준비

코드베이스 점검

마이그레이션을 시작하기 전에 솔루션 내 모든ActivePDF사용을 식별하세요. 실제 네임스페이스는 APToolkitNET (Toolkit)와 APWebGrabber (WebGrabber)입니다; 몇몇 레거시 프로젝트 또한 COM 상호운용 어셈블리를 통해 ActivePDF.Toolkit를 참조합니다. 솔루션 디렉토리에서 이러한 명령을 실행하세요:

grep -r "using APToolkitNET" --include="*.cs" .
grep -r "using APWebGrabber" --include="*.cs" .
grep -r "ActivePDF" --include="*.csproj" .
SHELL

주요 변경 사항 문서화

기본 API 차이를 이해하는 것은 마이그레이션 전략을 계획하는 데 도움이 됩니다:

카테고리ActivePDF 동작IronPDF동작마이그레이션 조치
제품 스플릿Toolkit (조작) + WebGrabber (HTML 렌더링) 별도 판매단일 IronPdf 패키지둘 다 하나의 라이브러리로 통합
객체 모델PDF용 APToolkitNET.Toolkit, HTML용 APWebGrabber.WebGrabberChromePdfRenderer + PdfDocument관심사 분리
파일 작업CloseOutputFile()직접 SaveAs()open/close 호출 제거
Native Runtimev10 이후 CoreLibPath 인수NuGet 네이티브 제공경로 구성 제거
페이지 생성NewPage() 메서드HTML에서 자동페이지 생성 호출 제거
반환 값정수 오류 코드예외try/catch 구현
페이지 크기 단위포인트 (612x792 = Letter)열거형 또는 밀리미터측정값 업데이트

필수 조건

환경이 다음 요구 사항을 충족하는지 확인하세요:

  • .NET Framework 4.6.2+ 또는 .NET Core 3.1 / .NET 5-9
  • Visual Studio 2019+ 또는 JetBrains Rider
  • NuGet 패키지 관리자 접근 -IronPDF라이선스 키 (ironpdf.com에서 무료 체험판 제공)

단계별 마이그레이션 프로세스

1단계: NuGet 패키지 업데이트

nuget.org의 패키지는 ActivePDF.Toolkit입니다 (현재 버전 11.4.4, 2025년 12월 발행). HTML 렌더링은 ActivePDF.WebGrabber로 별도로 출하됩니다.ActivePDFSKUs를 제거하고 IronPDF를 설치하십시오:

# RemoveActivePDFpackages
dotnet remove package ActivePDF.Toolkit
dotnet remove package ActivePDF.WebGrabber

# Install IronPDF
dotnet add package IronPdf
SHELL

또는, Visual Studio 패키지 관리자 콘솔을 통해:

Uninstall-Package ActivePDF.Toolkit
Uninstall-Package ActivePDF.WebGrabber
Install-Package IronPdf
PowerShell

수동 DLL 참조가 있는 프로젝트의 경우, .csproj 파일에서 참조를 제거하십시오:

<!-- Remove this block -->
<Reference Include="APToolkitNET">
    <HintPath>path\to\APToolkitNET.dll</HintPath>
</Reference>
XML

2단계: 라이선스 키 구성

애플리케이션 시작 시, PDF 작업 이전에IronPDF라이선스 키를 추가하세요:

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

// Verify license status
bool isLicensed = IronPdf.License.IsLicensed;

3단계: 네임스페이스 참조 업데이트

솔루션 전체에서 전역 찾기 및 대체를 수행하세요:

찾기바꾸기
using APToolkitNET;using IronPdf;
using APWebGrabber;using IronPdf;
APToolkitNET.ToolkitChromePdfRenderer (렌더링) / PdfDocument (조작)
APWebGrabber.WebGrabberChromePdfRenderer

완전한 API 마이그레이션 참조

문서 생성 방법

ActivePDF 메소드IronPDF 동등노트
new APToolkitNET.Toolkit()new ChromePdfRenderer() / new PdfDocument(...)IronPDF는 렌더링과 조작을 분리합니다
new Toolkit(CoreLibPath: path)new ChromePdfRenderer()NuGet는 네이티브를 제공합니다—CoreLibPath 필요없음
toolkit.OpenOutputFile(path)동등한 것이 필요하지 않음끝에서 SaveAs만 호출
toolkit.CloseOutputFile()동등한 것이 필요하지 않음using는 정리를 처리
webGrabber.URL = html; webGrabber.ConvertToPDF()renderer.RenderHtmlAsPdf(html)WebGrabber, Toolkit 아님
webGrabber.URL = url; webGrabber.ConvertToPDF()renderer.RenderUrlAsPdf(url)WebGrabber, Toolkit 아님

파일 작업

ActivePDF 메소드IronPDF 동등노트
toolkit.OpenInputFile(path)PdfDocument.FromFile(path)기존 PDF 로드
toolkit.MergeFile(path, startPage, endPage)PdfDocument.Merge(pdfs)ActivePDF는 오픈된 출력 파일에 직접 병합합니다; IronPDF는 새로운 병합 문서를 반환합니다
toolkit.NumPages (속성)pdf.PageCount페이지 수
toolkit.GetPageText(page, 0)pdf.Pages[i].Text / pdf.ExtractAllText()텍스트 추출

페이지 설정

ActivePDF 메소드IronPDF 동등
toolkit.SetPageSize(612, 792)RenderingOptions.PaperSize = PdfPaperSize.Letter
toolkit.SetOrientation("Landscape")RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
toolkit.SetMargins(t, b, l, r)RenderingOptions.MarginTop/Bottom/Left/Right

보안 메소드

ActivePDF 메소드IronPDF 동등
toolkit.SetEncryption(user, owner, 128, 0)pdf.SecuritySettings.OwnerPassword / UserPassword
toolkit.SetPermissions(flags)pdf.SecuritySettings.AllowUserXxx
toolkit.PrintText(x, y, text) (페이지당 워터마크)pdf.ApplyWatermark(html)

코드 마이그레이션 예제

HTML을 PDF로 변환

HTML 문자열을 PDF 문서로 변환하는 것은 가장 일반적인 PDF 생성 시나리오 중 하나입니다. ActivePDF의 경우, HTML 렌더링은 별도로 라이선스되는 WebGrabber 제품에 있으며, 메모리 내 문자열이 아닌 URL 또는 파일 경로에서 렌더링합니다.

ActivePDF 구현 (WebGrabber):

// NuGet: Install-Package ActivePDF.WebGrabber
using APWebGrabber;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        WebGrabber wg = new WebGrabber();

        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        string tempHtml = Path.Combine(Path.GetTempPath(), "input.html");
        File.WriteAllText(tempHtml, htmlContent);

        wg.URL = tempHtml;
        wg.OutputDirectory = Directory.GetCurrentDirectory();
        wg.OutputFilename = "output.pdf";

        if (wg.ConvertToPDF() == 0)
        {
            Console.WriteLine("PDF created successfully");
        }
    }
}

IronPDF 구현:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        string htmlContent = "<html><body><h1>Hello World</h1></body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("output.pdf");
        
        Console.WriteLine("PDF created successfully");
    }
}

IronPDF 접근 방식은 명시적인 파일 핸들 관리를 제거하면서 더 깔끔하고 가독성 있는 코드를 제공합니다. 고급 HTML to PDF 시나리오의 경우, IronPDF의 ChromePdfRenderer는 픽셀 완벽한 CSS 및 JavaScript 지원을 제공하는 Chromium 기반 렌더링 엔진을 사용합니다.

URL을 PDF로 변환

웹 페이지를 PDF 문서로 캡처하는 것도 WebGrabber에 있으며, Toolkit이 아닙니다.

ActivePDF 구현 (WebGrabber):

// NuGet: Install-Package ActivePDF.WebGrabber
using APWebGrabber;
using System;
using System.IO;

class Program
{
    static void Main()
    {
        WebGrabber wg = new WebGrabber();

        wg.URL = "https://www.example.com";
        wg.OutputDirectory = Directory.GetCurrentDirectory();
        wg.OutputFilename = "webpage.pdf";

        if (wg.ConvertToPDF() == 0)
        {
            Console.WriteLine("PDF from URL created successfully");
        }
    }
}

IronPDF 구현:

using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        string url = "https://www.example.com";
        
        var pdf = renderer.RenderUrlAsPdf(url);
        pdf.SaveAs("webpage.pdf");
        
        Console.WriteLine("PDF from URL created successfully");
    }
}

여러 PDF 병합

여러 PDF 문서를 하나의 파일로 결합하는 것은 IronPDF의 문서 조작에 대한 기능적 접근 방식을 보여줍니다.

ActivePDF 구현 (Toolkit):

// NuGet: Install-Package ActivePDF.Toolkit
using APToolkitNET;
using System;

class Program
{
    static void Main()
    {
        using (Toolkit toolkit = new Toolkit())
        {
            if (toolkit.OpenOutputFile("merged.pdf") == 0)
            {
                // MergeFile(FileName, StartPage, EndPage); -1 = end of file
                toolkit.MergeFile("document1.pdf", 1, -1);
                toolkit.MergeFile("document2.pdf", 1, -1);
                toolkit.CloseOutputFile();
                Console.WriteLine("PDFs merged successfully");
            }
        }
    }
}

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(pdf1, pdf2);
        merged.SaveAs("merged.pdf");
        
        Console.WriteLine("PDFs merged successfully");
    }
}

선택적 페이지 추출을 포함한 더 고급 병합 시나리오의 경우, PDF 병합 문서를 참조하십시오.

헤더 및 풋터 추가

ActivePDF 구현 (WebGrabber):

using APWebGrabber;
using System.IO;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var wg = new WebGrabber();
    string tempHtml = Path.Combine(Path.GetTempPath(), "input.html");
    File.WriteAllText(tempHtml, html);

    wg.URL = tempHtml;
    wg.HeaderText = "My Document";
    wg.FooterText = "Page [page] of [pages]";
    wg.OutputDirectory = Path.GetDirectoryName(outputPath);
    wg.OutputFilename = Path.GetFileName(outputPath);
    wg.ConvertToPDF();
}

IronPDF 구현:

using IronPdf;

public void CreatePdfWithHeaderFooter(string html, string outputPath)
{
    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.TextHeader = new TextHeaderFooter
    {
        CenterText = "My Document",
        FontSize = 12,
        FontFamily = "Arial"
    };

    renderer.RenderingOptions.TextFooter = new TextHeaderFooter
    {
        CenterText = "Page {page} of {total-pages}",
        FontSize = 10,
        FontFamily = "Arial"
    };

    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(outputPath);
}

IronPDF는 텍스트 기반 및 HTML 머리글 및 바닥글을 모두 지원하여 완전한 디자인 유연성을 제공합니다.

암호 보호 및 보안

ActivePDF 구현 (Toolkit):

using APToolkitNET;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using (Toolkit toolkit = new Toolkit())
    {
        if (toolkit.OpenOutputFile(outputPath) == 0
            && toolkit.OpenInputFile(inputPath) == 0)
        {
            toolkit.SetEncryption(password, password, 128, 0);
            toolkit.CopyForm(0, 0);
            toolkit.CloseInputFile();
            toolkit.CloseOutputFile();
        }
    }
}

IronPDF 구현:

using IronPdf;

public void ProtectPdf(string inputPath, string outputPath, string password)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.SecuritySettings.OwnerPassword = password;
    pdf.SecuritySettings.UserPassword = password;
    pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
    pdf.SecuritySettings.AllowUserCopyPasteContent = false;
    pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

    pdf.SaveAs(outputPath);
}

IronPDF의 보안 설정 API는 정수 플래그 대신 강력하게 타입된 열거형을 사용하여 문서 권한에 대한 세밀한 제어를 제공합니다.

텍스트 추출

ActivePDF 구현 (Toolkit):

using APToolkitNET;
using System.Text;

public string ExtractText(string pdfPath)
{
    var sb = new StringBuilder();

    using (Toolkit toolkit = new Toolkit())
    {
        if (toolkit.OpenInputFile(pdfPath) == 0)
        {
            int pageCount = toolkit.NumPages;
            for (int i = 1; i <= pageCount; i++)
            {
                sb.AppendLine(toolkit.GetPageText(i, 0));
            }
            toolkit.CloseInputFile();
        }
    }

    return sb.ToString();
}

IronPDF 구현:

using IronPdf;

public string ExtractText(string pdfPath)
{
    using var pdf = PdfDocument.FromFile(pdfPath);
    return pdf.ExtractAllText();
}

IronPDF 구현은 여러 줄에서 텍스트 추출을 하나의 메서드 호출로 줄입니다.

워터마크 추가

ActivePDF 구현 (Toolkit — 페이지별 텍스트로 그려짐):

using APToolkitNET;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using (Toolkit toolkit = new Toolkit())
    {
        if (toolkit.OpenOutputFile(outputPath) == 0
            && toolkit.OpenInputFile(inputPath) == 0)
        {
            int pageCount = toolkit.NumPages;
            for (int i = 1; i <= pageCount; i++)
            {
                toolkit.CopyForm(i, 0);
                toolkit.SetFont("Helvetica", 72);
                toolkit.SetTextColor(200, 200, 200);
                toolkit.PrintText(150, 400, watermarkText);
            }
            toolkit.CloseInputFile();
            toolkit.CloseOutputFile();
        }
    }
}

IronPDF 구현:

using IronPdf;

public void AddWatermark(string inputPath, string outputPath, string watermarkText)
{
    using var pdf = PdfDocument.FromFile(inputPath);

    pdf.ApplyWatermark(
        $"<h1 style='color:lightgray;font-size:72px;'>{watermarkText}</h1>",
        rotation: 45,
        opacity: 50);

    pdf.SaveAs(outputPath);
}

IronPDF의 HTML 기반 워터마킹은 페이지별 반복 없이 완벽한 디자인 제어를 위한 CSS 스타일링을 가능하게 합니다.

ASP.NET Core 통합

현대 웹 응용 프로그램은 IronPDF의 더 깔끔한 통합 패턴의 이점을 크게 누립니다.

ActivePDF Pattern (WebGrabber):

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var wg = new APWebGrabber.WebGrabber();
    string tempHtml = Path.Combine(Path.GetTempPath(), Guid.NewGuid() + ".html");
    System.IO.File.WriteAllText(tempHtml, request.Html);

    wg.URL = tempHtml;
    wg.OutputDirectory = Path.GetTempPath();
    wg.OutputFilename = "temp.pdf";

    if (wg.ConvertToPDF() == 0)
    {
        byte[] bytes = System.IO.File.ReadAllBytes(Path.Combine(Path.GetTempPath(), "temp.pdf"));
        return File(bytes, "application/pdf", "report.pdf");
    }

    return BadRequest("PDF generation failed");
}

IronPDF 패턴:

[HttpPost]
public IActionResult GeneratePdf([FromBody] ReportRequest request)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(request.Html);

    return File(pdf.BinaryData, "application/pdf", "report.pdf");
}

IronPDF는 임시 파일의 필요성을 제거하고 메모리에서 직접 PDF 이진 데이터를 반환합니다.

웹 응용 프로그램용 비동기 지원

ActivePDF는 기본 비동기 지원이 없습니다. IronPDF는 확장 가능한 웹 응용 프로그램에 필수적인 완전한 async/await 기능을 제공합니다:

using IronPdf;

public async Task<byte[]> GeneratePdfAsync(string html)
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return pdf.BinaryData;
}

의존성 주입 구성

.NET 6+ 응용 프로그램의 경우 DI 컨테이너에IronPDF서비스를 등록하십시오:

// Program.cs (.NET 6+)
builder.Services.AddSingleton<ChromePdfRenderer>();

// Service wrapper
public interface IPdfService
{
    Task<byte[]> GeneratePdfAsync(string html);
    Task<byte[]> GeneratePdfFromUrlAsync(string url);
}

public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

    public IronPdfService()
    {
        _renderer = new ChromePdfRenderer();
        _renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
    }

    public async Task<byte[]> GeneratePdfAsync(string html)
    {
        using var pdf = await _renderer.RenderHtmlAsPdfAsync(html);
        return pdf.BinaryData;
    }

    public async Task<byte[]> GeneratePdfFromUrlAsync(string url)
    {
        using var pdf = await _renderer.RenderUrlAsPdfAsync(url);
        return pdf.BinaryData;
    }
}

오류 처리 마이그레이션

ActivePDF는 조회 테이블이 필요한 정수 반환 코드를 사용합니다. IronPDF는 현대적인 예외 처리를 사용합니다:

ActivePDF 오류 처리:

using APToolkitNET;

using (var toolkit = new Toolkit())
{
    int result = toolkit.OpenOutputFile(path);

    if (result != 0)
    {
        // Error - look up the code in "Toolkit Return Results and Error Codes"
        Console.WriteLine($"Error code: {result}");
    }
}

IronPDF 오류 처리:

try
{
    var renderer = new ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs(path);
}
catch (IronPdf.Exceptions.IronPdfProductException ex)
{
    Console.WriteLine($"IronPDF Error: {ex.Message}");
}
catch (Exception ex)
{
    Console.WriteLine($"General Error: {ex.Message}");
}

성능 최적화 팁

렌더러 인스턴스 재사용

ChromePdfRenderer 생성에는 초기화 오버헤드가 있습니다. 배치 작업의 경우, 단일 인스턴스를 재사용하십시오:

var renderer = new ChromePdfRenderer();
foreach (var html in htmlList)
{
    using var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs($"output_{i}.pdf");
}

웹 응용 프로그램에서 비동기 사용

ASP.NET Core 응용 프로그램의 경우 비동기 PDF 생성은 처리량을 향상시킵니다:

public async Task<IActionResult> GenerateReport()
{
    var renderer = new ChromePdfRenderer();
    using var pdf = await renderer.RenderHtmlAsPdfAsync(html);
    return File(pdf.BinaryData, "application/pdf");
}

적절한 리소스 폐기

올바른 정리를 보장하기 위해 항상 using 문을 사용하십시오:

using var pdf = renderer.RenderHtmlAsPdf(html);
return pdf.BinaryData;

이미지 압축

이미지 압축으로 출력 파일 크기를 줄이십시오:

using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.CompressImages(85); // 85% quality
pdf.SaveAs("compressed.pdf");

일반적인 마이그레이션 문제 해결

문제: 페이지 크기 차이

ActivePDF WebGrabber는 포인트(612x792 = Letter)를 사용하는 반면, IronPDF는 열거형 또는 밀리미터를 사용합니다:

//ActivePDFWebGrabber: Points
wg.PageWidth = 612;
wg.PageHeight = 792;

// IronPDF: Use enum
renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
// Or custom in mm:
renderer.RenderingOptions.SetCustomPaperSizeInMillimeters(215.9, 279.4);
C#

문제: CloseOutputFile에 해당하는 항목이 없음

IronPDF는 명시적 파일 핸들 관리를 하지 않는 현대적인 패러다임을 사용합니다:

//ActivePDFToolkit
toolkit.OpenOutputFile(path);
// ... operations ...
toolkit.CloseOutputFile(); // Required!

//IronPDF- no open/close needed
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path); // 'using' handles cleanup
C#

문제: PDF가 빈 렌더링됨

JavaScript에 의존하는 콘텐츠가 빈 렌더링된 경우, 렌더링 지연을 구성하십시오:

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.RenderDelay(2000);
// Or wait for element:
renderer.RenderingOptions.WaitFor.HtmlElementById("content-loaded");

문제: CSS/이미지가 로드되지 않음

상대 경로 해상을 위한 기본 URL을 구성하십시오:

renderer.RenderingOptions.BaseUrl = new Uri("https://yourdomain.com/assets/");

마이그레이션 후 점검 목록

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

  • 모든 기존 단위 및 통합 테스트 실행
  • 이전 버전과 PDF 출력을 시각적으로 비교
  • 스테이징 환경에서 모든 PDF 워크플로 테스트
  • 라이선싱이 올바르게 작동하는지 확인 (IronPdf.License.IsLicensed)
  • 이전 구현과의 성능 비교
  • 오래된ActivePDF설치 파일 및 DLL 참조 제거
  • CI/CD 파이프라인 종속성 업데이트
  • 개발 팀을 위한IronPDF패턴 문서화

추가 리소스


ActivePDF에서 IronPDF로의 마이그레이션은 더 깨끗한 API, 향상된 .NET 통합 및 장기적인 지원으로 PDF 생성 인프라를 현대화합니다. 마이그레이션에 대한 투자는 코드 유지보수성 향상, 비동기 기능, PDF 라이브러리의 지속적인 개발에 대한 신뢰를 통해 이익을 가져옵니다.

참고해 주세요: ActivePDF와 Apryse는 각 소유자의 등록 상표입니다. 이 사이트는ActivePDF또는 Apryse와 관련이 없으며, 승인하거나 후원하지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.
Curtis Chau
기술 문서 작성자

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

...
더 읽어보기

관련 기사

Key in blue circle

무료 30일 체험 키를 즉시 받으세요.

Your trial license will be sent to your email address

제한 없음. 100% 무제한 이용. 신용카드 불필요.

bullet_checked신용카드나 계정 생성은 필요하지 않습니다.제한 없음. 100% 무제한 이용. 신용카드 불필요.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
무료 라이브 데모를 예약하세요
Booking Badge

전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.

Iron Software의 고객 로고
부담 없는 무료 상담을 받아보세요
아래 양식을 작성하시거나 sales@ironsoftware.com으로 이메일을 보내주세요.
고객님의 정보는 항상 비밀로 유지됩니다.
전 세계 수백만 엔지니어들이 신뢰하는 제품입니다.
Iron Software의 고객 로고
지금 바로 30일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.