IRONSOFTWAREHOME
동영상

IronPDF를 사용하여 PDF에 머리글과 바닥글을 추가하는 방법

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

Apryse (2023년 2월 8일 PDFTron에서 브랜드 변경)는 포괄적인 문서 처리 기능으로 유명한 Enterprise PDF SDK입니다. NuGet 패키지와 .NET 네임스페이스는 리브랜딩 이후에도 역사적인 PDFTron.* / pdftron.* ID 하에 계속해서 제공됩니다. Apryse는 영업 주도 가격을 사용합니다. apryse.com에는 공개 가격이 게시되지 않으며, 타사 마켓플레이스(Vendr, G2)는 대략 $1,500/개발자/년부터 시작하는 입문 가격을 보고합니다. 모듈 경로 설정 및 C++ 유산 API와 결합하면 간단한 PDF 기능을 원하는 팀에게는 장벽이 될 수 있습니다. 이 가이드는 Apryse에서 IronPDF로의 단계별 마이그레이션 경로를 제공합니다 — 최신 C# 컨벤션을 사용한 기본 .NET PDF 라이브러리, 더 간단한 통합, 일회성 영구 라이선싱.

Apryse PDF에서 마이그레이션해야 하는 이유?

Apryse PDF는 강력한 기능을 제공하지만, 몇 가지 요인으로 인해 개발 팀은 PDF 생성 필요를 위한 대안을 찾게 됩니다.

프리미엄 가격 및 구독 모델

Apryse는 영업 주도 가격으로 Enterprise 고객을 대상으로 하며, 이는 중소형 프로젝트에 최적합하지 않을 수 있습니다. apryse.com에는 공개 가격이 게시되지 않습니다; 아래 수치는 타사 애그리게이터(Vendr, G2)에서 나온 것이며 Apryse 영업 부서에 확인해야 합니다:

측면Apryse (PDFTron)IronPDF
초급 수준~$1,500/개발자/년 (Vendr 보고)$999 일회성 (Lite)
일반 범위~$9,275–$35,816/년 (Vendr 마켓플레이스 데이터 기반)계층형 Lite/Plus/Professional
라이선스 모델연간 구독, 영업 주도 견적영구 라이선스
뷰어 라이센스WebViewer/PDFViewCtrl은 별도로 가격이 책정됨해당 없음 (표준 뷰어 사용)
서버 라이센스Enterprise 가격 필요라이센스 계층에 포함됨

통합의 복잡성

Apryse의 C++ 유산은 .NET 표면을 형성하여 관리 전용 패키지에 비해 설정 단계를 추가할 수 있습니다:

기능Apryse PDFIronPDF
설정모듈 경로, 외부 바이너리단일 NuGet 패키지
초기화PDFNet.Initialize() 라이선스단순 속성 할당
HTML 렌더링외부 html2pdf 모듈 필요내장 Chromium 엔진
API 스타일C++ 유산, 복잡함현대적인 C# 규약
종속성다수의 DLL, 플랫폼별자체 포함 패키지

마이그레이션을 고려할 때

IronPDF로 마이그레이션해야 하는 경우:

  • HTML/URL을 PDF로 변환하는 것이 주된 필요라면
  • 불필요한 코드 없이 더 간단한 API를 원한다면
  • 프리미엄 가격이 귀하의 용도에 정당하지 않다면
  • PDFViewCtrl 뷰어 컨트롤이 필요하지 않다면
  • 구독보다 일회성 라이선스를 선호

Apryse PDF에 머물러야 하는 경우:

  • 그들의 네이티브 뷰어 컨트롤(PDFViewCtrl)이 필요하다면
  • XOD 또는 독점 형식을 광범위하게 사용한다면
  • 특정 Enterprise 기능(고급 편집 등)이 필요하다면
  • 귀 조직이 이미 Enterprise 라이센스를 보유하고 있다면

이전 준비

필수 조건

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

  • .NET Framework 4.6.2+, .NET Core 3.1+, or .NET 5/6/7/8/9
  • Visual Studio 2019+ 또는 VS Code와 C# 확장
  • NuGet 패키지 관리자 접근 -IronPDF라이선스 키 (ironpdf.com에서 무료 체험판 제공)

###Apryse PDF사용 감사

해당 명령을 솔루션 디렉터리에서 실행하여 모든 Apryse 참조를 식별하십시오:

# Find all pdftron using statements
grep -r "using pdftron" --include="*.cs" .

# Find PDFNet initialization
grep -r "PDFNet.Initialize\|PDFNet.SetResourcesPath" --include="*.cs" .

# Find PDFDoc usage
grep -r "new PDFDoc\|PDFDoc\." --include="*.cs" .

# Find HTML2PDF usage
grep -r "HTML2PDF\|InsertFromURL\|InsertFromHtmlString" --include="*.cs" .

# Find ElementReader/Writer usage
grep -r "ElementReader\|ElementWriter\|ElementBuilder" --include="*.cs" .
SHELL

예상해야 할 주요 변경사항

Apryse PDF 패턴변경 필요
PDFNet.Initialize()IronPdf.License.LicenseKey 로 교체하십시오
HTML2PDF 모듈내장된 ChromePdfRenderer
ElementWriterIronPDF는 콘텐츠를 내부적으로 처리합니다
SDFDoc.SaveOptions간단한 SaveAs() 메소드
PDFViewCtrl외부 PDF 뷰어 사용
XOD 형식PDF 또는 이미지로 변환
모듈 경로 구성필요 없음

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

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

Apryse는 여러 타겟 프레임워크와 아키텍처에 따라 여러 PDFTron.* 패키지 ID 하에 .NET SDK를 발행합니다 (브랜드는 2023년에 변경되었지만 패키지 ID는 변경되지 않았습니다). 일반적 패키지:

  • PDFTron.NET.x64 — 주요 .NET / .NET Core x64 패키지 (현재 11.x)
  • PDFTron.NetFramework.x64 — .NET Framework 4.5.1+ x64 only
  • PDFTron.NETCore.Windows.x64 — Windows x64에서의 .NET Core
  • PDFNet — 구형 통합 Windows .NET Framework 32/64비트 패키지
# Remove whichever Apryse/PDFTron package(s) you have installed
dotnet remove package PDFTron.NET.x64
dotnet remove package PDFTron.NetFramework.x64
dotnet remove package PDFTron.NETCore.Windows.x64
dotnet remove package PDFNet

# Install IronPDF
dotnet add package IronPdf
SHELL

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

Uninstall-Package PDFTron.NET.x64
Install-Package IronPdf
PowerShell

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

Apryse 네임스페이스를 IronPDF로 교체하십시오:

// Remove these
using pdftron;
using pdftron.PDF;
using pdftron.PDF.Convert;
using pdftron.SDF;
using pdftron.Filters;

// Add these
using IronPdf;
using IronPdf.Rendering;

3단계: 초기화 보일러플레이트 제거

Apryse PDF는 복잡한 초기화를 요구합니다. IronPDF는 이를 완전히 제거합니다.

Apryse PDF 구현:

// Complex initialization
PDFNet.Initialize("YOUR_LICENSE_KEY");
PDFNet.SetResourcesPath("path/to/resources");
// Plus module path for HTML2PDF...

IronPDF 구현:

// Simple license assignment (optional for development)
IronPdf.License.LicenseKey = "YOUR_LICENSE_KEY";

IronPDF와 함께하는 경우 PDFNet.Terminate() 호출이 필요 없습니다—리소스는 자동으로 관리됩니다.

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

핵심 클래스 매핑

Apryse PDF클래스IronPDF 동등
PDFDocPdfDocument
HTML2PDFChromePdfRenderer
TextExtractorPdfDocument.ExtractAllText()
StamperPdfDocument.ApplyWatermark()
PDFDrawPdfDocument.ToBitmap()
SecurityHandlerPdfDocument.SecuritySettings
PDFNetIronPdf.License

문서 작업

Apryse PDF메서드IronPDF 메소드
new PDFDoc()new PdfDocument()
new PDFDoc(path)PdfDocument.FromFile(path)
new PDFDoc(buffer)PdfDocument.FromBinaryData(bytes)
doc.Save(path, options)pdf.SaveAs(path)
doc.Save(buffer)pdf.BinaryData
doc.Close()pdf.Dispose()
doc.GetPageCount()pdf.PageCount
doc.AppendPages(doc2, start, end)PdfDocument.Merge(pdfs)

HTML을 PDF로 변환

Apryse PDF메서드IronPDF 메소드
HTML2PDF.Convert(doc)renderer.RenderHtmlAsPdf(html)
converter.InsertFromURL(url)renderer.RenderUrlAsPdf(url)
converter.InsertFromHtmlString(html)renderer.RenderHtmlAsPdf(html)
converter.SetModulePath(path)필요 없음
converter.SetPaperSize(width, height)RenderingOptions.PaperSize
converter.SetLandscape(true)RenderingOptions.PaperOrientation

코드 마이그레이션 예제

HTML 문자열에서 PDF로

가장 일반적인 작업은 보일러플레이트 코드의 급격한 감소를 보여줍니다.

Apryse PDF 구현:

using pdftron;
using pdftron.PDF;

class Program
{
    static void Main()
    {
        PDFNet.Initialize("YOUR_LICENSE_KEY");
        PDFNet.SetResourcesPath("path/to/resources");

        string html = "<html><body><h1>Hello World</h1><p>Content here</p></body></html>";

        using (PDFDoc doc = new PDFDoc())
        {
            HTML2PDF converter = new HTML2PDF();
            converter.SetModulePath("path/to/html2pdf");
            converter.InsertFromHtmlString(html);

            HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
            settings.SetPrintBackground(true);
            settings.SetLoadImages(true);

            if (converter.Convert(doc))
            {
                doc.Save("output.pdf", SDFDoc.SaveOptions.e_linearized);
                Console.WriteLine("PDF created successfully");
            }
            else
            {
                Console.WriteLine($"Conversion failed: {converter.GetLog()}");
            }
        }

        PDFNet.Terminate();
    }
}

IronPDF 구현:

// NuGet: Install-Package IronPdf
using IronPdf;

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

IronPDF는 초기화, 모듈 경로 및 정리 코드를 제거하여 35+ 행을 5 행으로 줄입니다.

URL을 PDF로 변환

Apryse PDF 구현:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc())
{
    HTML2PDF converter = new HTML2PDF();
    converter.SetModulePath("path/to/html2pdf");

    HTML2PDF.WebPageSettings settings = new HTML2PDF.WebPageSettings();
    settings.SetLoadImages(true);
    settings.SetAllowJavaScript(true);
    settings.SetPrintBackground(true);

    converter.InsertFromURL("https://example.com", settings);

    if (converter.Convert(doc))
    {
        doc.Save("webpage.pdf", SDFDoc.SaveOptions.e_linearized);
    }
}

PDFNet.Terminate();

IronPDF 구현:

// NuGet: Install-Package IronPdf
using IronPdf;

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

여러 PDF 병합

Apryse PDF 구현:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc mainDoc = new PDFDoc())
{
    string[] files = { "doc1.pdf", "doc2.pdf", "doc3.pdf" };

    foreach (string file in files)
    {
        using (PDFDoc doc = new PDFDoc(file))
        {
            mainDoc.AppendPages(doc, 1, doc.GetPageCount());
        }
    }

    mainDoc.Save("merged.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();

IronPDF 구현:

// NuGet: Install-Package IronPdf
using IronPdf;
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");
    }
}

IronPDF의 정적 Merge 메소드는 여러 문서를 직접 수용하여 페이지 반복 패턴을 제거합니다.

텍스트 추출

Apryse PDF 구현:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    TextExtractor extractor = new TextExtractor();

    for (int i = 1; i <= doc.GetPageCount(); i++)
    {
        Page page = doc.GetPage(i);
        extractor.Begin(page);

        string pageText = extractor.GetAsText();
        Console.WriteLine($"Page {i}:");
        Console.WriteLine(pageText);
    }
}

PDFNet.Terminate();

IronPDF 구현:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Extract all text at once
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);

// Extract from specific page
string page1Text = pdf.ExtractTextFromPage(0); // 0-indexed
Console.WriteLine($"Page 1: {page1Text}");

워터마크 추가

Apryse PDF 구현:

using pdftron;
using pdftron.PDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    Stamper stamper = new Stamper(Stamper.SizeType.e_relative_scale, 0.5, 0.5);
    stamper.SetAlignment(Stamper.HorizontalAlignment.e_horizontal_center,
                         Stamper.VerticalAlignment.e_vertical_center);
    stamper.SetOpacity(0.3);
    stamper.SetRotation(45);
    stamper.SetFontColor(new ColorPt(1, 0, 0));
    stamper.SetTextAlignment(Stamper.TextAlignment.e_align_center);

    stamper.StampText(doc, "CONFIDENTIAL",
        new PageSet(1, doc.GetPageCount()));

    doc.Save("watermarked.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();

IronPDF 구현:

using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("document.pdf");

// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
    color: red;
    opacity: 0.3;
    font-size: 72px;
    font-weight: bold;
    text-align: center;
'>CONFIDENTIAL</div>";

pdf.ApplyWatermark(watermarkHtml,
    rotation: 45,
    verticalAlignment: VerticalAlignment.Middle,
    horizontalAlignment: HorizontalAlignment.Center);

pdf.SaveAs("watermarked.pdf");

IronPDF는 HTML/CSS 기반의 워터마킹을 사용하여 익숙한 웹 기술을 통해 전체 스타일링 제어를 제공합니다.

비밀번호 보호

Apryse PDF 구현:

using pdftron;
using pdftron.PDF;
using pdftron.SDF;

PDFNet.Initialize("YOUR_LICENSE_KEY");

using (PDFDoc doc = new PDFDoc("document.pdf"))
{
    SecurityHandler handler = new SecurityHandler();
    handler.ChangeUserPassword("user123");
    handler.ChangeMasterPassword("owner456");

    handler.SetPermission(SecurityHandler.Permission.e_print, false);
    handler.SetPermission(SecurityHandler.Permission.e_extract_content, false);

    doc.SetSecurityHandler(handler);
    doc.Save("protected.pdf", SDFDoc.SaveOptions.e_linearized);
}

PDFNet.Terminate();

IronPDF 구현:

using IronPdf;

var pdf = PdfDocument.FromFile("document.pdf");

// Set passwords
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.OwnerPassword = "owner456";

// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;

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</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>Content</h1>");
pdf.SaveAs("with_headers.pdf");

IronPDF는 {page}{total-pages} 같은 동적 페이지 넘버링을 위한 플레이스홀더 토큰을 지원합니다. 더 많은 옵션은 헤더 및 푸터 문서를 참조하세요.

ASP.NET Core 통합

Apryse PDF의 초기화 요구 사항은 웹 애플리케이션 통합을 복잡하게 만듭니다. IronPDF는 이 패턴을 쉽게 만듭니다.

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.BinaryData, "application/pdf", "report.pdf");
    }
}

의존성 주입 구성

// Program.cs
public void ConfigureServices(IServiceCollection services)
{
    // Set license once
    IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];

    // Register renderer as scoped service
    services.AddScoped<ChromePdfRenderer>();

    // Or create a wrapper service
    services.AddScoped<IPdfService, IronPdfService>();
}

// IronPdfService.cs
public class IronPdfService : IPdfService
{
    private readonly ChromePdfRenderer _renderer;

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

    public PdfDocument GenerateFromHtml(string html) =>
        _renderer.RenderHtmlAsPdf(html);

    public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
        _renderer.RenderHtmlAsPdfAsync(html);
}

성능 비교

미터법Apryse PDFIronPDF
콜드 스타트빠름 (네이티브 코드)~2초 (크로미엄 초기화)
후속 렌더링빠름빠름
복잡한 HTML가변적 (html2pdf 모듈)우수함 (크로미엄)
CSS 지원제한적전체 CSS3
JavaScript제한적지원됨

성능 최적화 팁

// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();

// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0);   // No delay
renderer.RenderingOptions.Timeout = 30000;          // 30s max

// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
    pdf.SaveAs("output.pdf");
}

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

문제: 모듈 경로 오류

모든 모듈 경로 구성을 제거하십시오—IronPDF의 크로미엄 엔진은 내장되어 있습니다:

// Remove this
converter.SetModulePath("path/to/html2pdf");

// Just use the renderer
var renderer = new ChromePdfRenderer();

문제: PDFNet.Initialize()를 찾을 수 없습니다

IronPDF 라이선스 설정으로 교체:

// Remove this
PDFNet.Initialize("KEY");
PDFNet.SetResourcesPath("path");

// Use this (optional for development)
IronPdf.License.LicenseKey = "YOUR-KEY";

문제: PDFViewCtrl 대체

IronPDF에는 뷰어 제어가 포함되어 있지 않습니다. 옵션:

  • 웹 뷰어용 PDF.js 사용
  • 시스템 PDF 뷰어 사용
  • 타사 뷰어 구성 요소 고려

마이그레이션 후 점검 목록

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

  • PDF 출력 품질이 기대치와 일치하는지 확인하세요
  • 모든 엣지 케이스 테스트 (대용량 문서, 복잡한 CSS)
  • 성능 메트릭 비교
  • 해당하는 경우 Docker 구성을 업데이트하세요
  • Apryse 라이선스 및 관련 구성 제거 -IronPDF특정 구성 문서화
  • 새로운 API 패턴에 대한 팀 교육
  • 필요 시 CI/CD 파이프라인 업데이트

추가 리소스


Apryse PDF에서 IronPDF로의 마이그레이션은 복잡한 C++ 패턴의 PDF 코드베이스를 관용적인 C#로 변환합니다. 초기화 보일러플레이트, 모듈 경로 구성, 구독 기반 라이선스의 제거는 생산성을 즉시 향상시키고 장기 비용을 절감합니다.

참고해 주세요: Apryse는 해당 소유자의 등록 상표입니다. 이 사이트는 Apryse나 PDFTron과 관련이 없으며, 승인하거나 후원하지 않습니다. 모든 제품명, 로고 및 브랜드는 해당 소유자의 자산입니다. 비교는 정보 제공 목적으로만 사용되며, 작성 시점에 공개적으로 이용 가능한 정보를 반영합니다.
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일 무료 체험판 키를 받으세요.
신용카드나 계정 생성은 필요하지 않습니다.