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

PDFreactor에서 IronPDF로의 마이그레이션 방법 (C#)

PDFreactor에서 IronPDF로 마이그레이션하면 Java 종속성과 서버 인프라를 제거하면서 네이티브 .NET 라이브러리를 통한 HTML-to-PDF 변환 기능을 제공합니다. 이 가이드는 Java 기반 서버 아키텍처를 .NET 애플리케이션에 원활하게 통합되는 인프로세스 라이브러리로 대체하는 전체 단계별 마이그레이션 경로를 제공합니다.

PDFreactor에서 IronPDF로 마이그레이션하는 이유

PDFreactor이해하기

PDFreactor는 다양한 플랫폼과 통합되는 강력한 HTML-to-PDF 변환 서버입니다. 상업용 솔루션으로서 PDFreactor는 HTML 및 CSS 콘텐츠를 고품질 PDF 문서로 변환하기 위해 독자적인 기술을 활용합니다. 눈에 띄는 속성 중 PDFreactor는 복잡한 레이아웃 렌더링에 적합한 다양한 CSS 속성을 지원합니다.

그러나, PDFreactor는 Java에 의존하여 비토박스 환경에서는 배포 및 통합이 복잡할 수 있는 .NET 환경에서 몇 가지 문제를 제시합니다. Java 종속성은 .NET 애플리케이션에서 추가 통합 작업이 필요하여 부가적인 오버헤드를 유발합니다.

Java 종속성 문제

PDFreactor의 아키텍처는 .NET 환경에서 여러 문제를 만듭니다:

  1. Java 런타임 필수: 모든 서버에 JRE/JDK 설치가 필요합니다.

  2. 서버 아키텍처: 별도 서비스로 실행되어 추가 인프라가 필요합니다. 서버 기반 솔루션으로서 PDFreactor는 각 변환마다 REST API 호출이 필요합니다.

  3. 복잡한 배포: 주로 .NET 생태계에서 Java 종속성을 관리하면 설정이 복잡해지고 유지 관리 비용이 증가할 수 있습니다. CI/CD 파이프라인에서 Java + .NET 두 런타임을 관리해야 합니다.

  4. 프로세스 간 통신: REST API 또는 소켓 통신이 지연을 추가시킵니다. 모든 PDF 변환은 서버로의 HTTP 왕복이 필요합니다.

  5. 별도의 라이선스 관리: 라이선스는 애플리케이션이 아닌 서버 인스턴스에 귀속됩니다. Java 서비스 인스턴스에 연결된 서버당 라이선싱.

  6. 자원 격리: 별도의 프로세스 메모리 및 CPU 관리. 추가 서버 모니터링, 규모 조정 및 유지 관리.

PDFreactor대비IronPDF비교

기능/측면 PDFreactor IronPDF
네이티브 .NET 라이브러리 아니요 (Java 기반)
런타임 Java (외부 서버) 네이티브 .NET (인프로세스)
아키텍처 REST API 서비스 NuGet 라이브러리
배포 Java + 서버 구성 단일 NuGet 패키지
종속성 JRE + HTTP 클라이언트 자급자족
지연 시간 네트워크 왕복 직접 메서드 호출
크로스 플랫폼 기능 예 (Java 의존) 예 (번들 Chromium)
CSS 지원 CSS3, CSS Paged Media에 대한 고급 지원 포괄적인 HTML5/CSS3 지원
배포 복잡성 Java로 인해 더 복잡 쉽고, .NET과 직접 통합
PDF 조작 기능 기본 (생성만) 병합, 분할, 편집 및 주석 추가를 포함한 광범위한 기능

PDFreactor와 달리 IronPDF는 .NET 프로젝트에 외부 종속성 없이 매끄럽게 통합되도록 특별히 설계된 본래의 .NET 라이브러리로 자리잡고 있습니다. IronPDF는 번들된 Chromium 렌더링 엔진을 사용하여 몇 줄의 코드로 HTML을 PDF로 변환할 수 있습니다.

현대 .NET 버전을 도입하는 팀을 위해 IronPDF는 Java 서버 복잡성을 제거하면서 포괄적인 PDF 수명 주기 관리를 제공하는 네이티브 .NET 솔루션을 제공합니다.


시작하기 전에

필수 조건

  1. .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
  3. IronPDF 라이선스: ironpdf.com에서 라이선스 키를 획득하세요

NuGet 패키지 변경 사항

# PDFreactor is NOT distributed via NuGet. The .NET wrapper ships as
# PDFreactor.dll inside <PDFreactor-install>/clients/netstandard2/bin/
# (or netframework40/bin for older .NET Framework projects).
# Remove the assembly reference from your .csproj.

# Stop PDFreactor Web Service (Java/Jetty, default port 9423)
# Windows: net stop PDFreactor
# Linux:   sudo systemctl stop pdfreactor

# Install IronPDF
dotnet add package IronPdf
# PDFreactor is NOT distributed via NuGet. The .NET wrapper ships as
# PDFreactor.dll inside <PDFreactor-install>/clients/netstandard2/bin/
# (or netframework40/bin for older .NET Framework projects).
# Remove the assembly reference from your .csproj.

# Stop PDFreactor Web Service (Java/Jetty, default port 9423)
# Windows: net stop PDFreactor
# Linux:   sudo systemctl stop pdfreactor

# Install IronPDF
dotnet add package IronPdf
SHELL

라이선스 구성

PDFreactor (서버 기반):

// License configured on the PDFreactor Web Service via config file or command line.
// The .NET client (RealObjects.PDFreactor.Webservice.Client) connects to that licensed service.
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423/service/rest");
// License configured on the PDFreactor Web Service via config file or command line.
// The .NET client (RealObjects.PDFreactor.Webservice.Client) connects to that licensed service.
var pdfReactor = new PDFreactor("http://pdfreactor-server:9423/service/rest");
' License configured on the PDFreactor Web Service via config file or command line.
' The .NET client (RealObjects.PDFreactor.Webservice.Client) connects to that licensed service.
Dim pdfReactor = New PDFreactor("http://pdfreactor-server:9423/service/rest")
$vbLabelText   $csharpLabel

IronPDF (애플리케이션 수준):

// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
' One-time setup at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
$vbLabelText   $csharpLabel

PDFreactor사용 식별

# Find PDFreactor usage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .

# Find CSS 분할 미디어 rules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .
# Find PDFreactor usage
grep -r "PDFreactor\|RealObjects\|Configuration.*Document" --include="*.cs" .

# Find CSS 분할 미디어 rules to convert
grep -r "@page\|counter(page)\|counter(pages)" --include="*.cs" --include="*.css" .
SHELL

완전한 API 참조

네임스페이스 변경

// Before: PDFreactor (Web Service client)
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PDFreactor (Web Service client)
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports RealObjects.PDFreactor.Webservice.Client
Imports System.IO

Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

핵심 클래스 매핑

PDFreactor IronPDF
PDFreactor ChromePdfRenderer
Configuration ChromePdfRenderOptions
Result PdfDocument
config.Document = html renderer.RenderHtmlAsPdf(html)
result.Document (byte[]) pdf.BinaryData

설정 속성 매핑

PDFreactor구성 IronPDF RenderingOptions
config.Document = html renderer.RenderHtmlAsPdf(html)
config.Document = url renderer.RenderUrlAsPdf(url)
config.PageFormat = PageFormat.A4 RenderingOptions.PaperSize = PdfPaperSize.A4
config.PageOrientation RenderingOptions.PaperOrientation
config.PageMargins RenderingOptions.MarginTop/Bottom/Left/Right
config.EnableJavaScript = true RenderingOptions.EnableJavaScript = true
config.UserStyleSheets = new List<Resource>{...} HTML에 CSS 포함
config.Title pdf.MetaData.Title
config.Encryption pdf.SecuritySettings

PDFreactor에 없는 새로운 기능

IronPDF기능 설명
PdfDocument.Merge() 여러 PDF 병합
pdf.ApplyWatermark() 워터마크 추가
pdf.ExtractAllText() 텍스트 추출
pdf.Form 양식 채우기
pdf.Sign() 디지털 서명

코드 마이그레이션 예제

예제 1: HTML 문자열을 PDF로 변환

이전 (PDFreactor):

// PDFreactor .NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run the PDFreactor Web Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
        PDFreactor pdfReactor = new PDFreactor();

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

        Configuration config = new Configuration();
        config.Document = html;

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("output.pdf", result.Document);
    }
}
// PDFreactor .NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run the PDFreactor Web Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
        PDFreactor pdfReactor = new PDFreactor();

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

        Configuration config = new Configuration();
        config.Document = html;

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("output.pdf", result.Document);
    }
}
Imports RealObjects.PDFreactor.Webservice.Client
Imports System.IO

Class Program
    Shared Sub Main()
        Dim pdfReactor As New PDFreactor()

        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"

        Dim config As New Configuration()
        config.Document = html

        Dim result As Result = pdfReactor.Convert(config)

        File.WriteAllBytes("output.pdf", result.Document)
    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></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("output.pdf");
    }
}
// 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></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim html As String = "<html><body><h1>Hello World</h1></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)

        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

근본적인 차이점은 아키텍처 패턴입니다. PDFreactor는 PDFreactor 인스턴스(자바 서버에 연결되는)를 생성하고, 설정 및 HTML 콘텐츠를 보관할 별도의 Configuration 객체, Convert() 호출하여 Result 객체를 반환받은 후, 최종적으로 result.Document 바이트를 File.WriteAllBytes()을 사용하여 파일에 기록하는 과정이 필요합니다.

IronPDF는 이를 ChromePdfRenderer를 생성하고, HTML 문자열과 함께 RenderHtmlAsPdf()를 직접 호출한 후, 반환된 PdfDocument에 내장된 SaveAs() 메서드를 사용하는 것으로 단순화합니다. 서버 연결, 구성 객체, 수동 바이트 처리 불필요. HTML에서 PDF로의 문서에서 포괄적인 예제를 참조하세요.

예제 2: URL에서 PDF로 변환

이전 (PDFreactor):

// PDFreactor .NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run the PDFreactor Web Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
        PDFreactor pdfReactor = new PDFreactor();

        Configuration config = new Configuration();
        config.Document = "https://www.example.com";

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("webpage.pdf", result.Document);
    }
}
// PDFreactor .NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run the PDFreactor Web Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
        PDFreactor pdfReactor = new PDFreactor();

        Configuration config = new Configuration();
        config.Document = "https://www.example.com";

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("webpage.pdf", result.Document);
    }
}
Imports RealObjects.PDFreactor.Webservice.Client
Imports System.IO

Class Program
    Shared Sub Main()
        Dim pdfReactor As New PDFreactor()

        Dim config As New Configuration()
        config.Document = "https://www.example.com"

        Dim result As Result = pdfReactor.Convert(config)

        File.WriteAllBytes("webpage.pdf", result.Document)
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");

        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");

        pdf.SaveAs("webpage.pdf");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()

        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")

        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

PDFreactor는 HTML 문자열과 URL 모두에 대해 같은 config.Document 속성을 사용하여 자동으로 형식을 결정합니다. IronPDF는 HTML 문자열을 위한 RenderHtmlAsPdf()와 URL을 위한 RenderUrlAsPdf() 명시적 메서드를 제공합니다. 이 명시적인 접근 방식은 코드 명확성과 IntelliSense 지원을 향상시킵니다. 더 많은 정보를 보려면 튜토리얼을 참조하세요.

예제 3: 페이지 번호가 있는 헤더와 푸터

이전 (PDFreactor):

// PDFreactor .NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run the PDFreactor Web Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
        PDFreactor pdfReactor = new PDFreactor();

        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";

        Configuration config = new Configuration();
        config.Document = html;
        config.UserStyleSheets = new System.Collections.Generic.List<Resource>
        {
            new Resource { Content = "@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }" }
        };

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("document.pdf", result.Document);
    }
}
// PDFreactor .NET wrapper is a Web Service client (no NuGet package).
// Reference PDFreactor.dll from <PDFreactor-install>/clients/netstandard2/bin/
// and run the PDFreactor Web Service (Java/Jetty) locally or remotely.
using RealObjects.PDFreactor.Webservice.Client;
using System.IO;

class Program
{
    static void Main()
    {
        PDFreactor pdfReactor = new PDFreactor();

        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";

        Configuration config = new Configuration();
        config.Document = html;
        config.UserStyleSheets = new System.Collections.Generic.List<Resource>
        {
            new Resource { Content = "@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }" }
        };

        Result result = pdfReactor.Convert(config);

        File.WriteAllBytes("document.pdf", result.Document);
    }
}
Imports RealObjects.PDFreactor.Webservice.Client
Imports System.IO

Class Program
    Shared Sub Main()
        Dim pdfReactor As New PDFreactor()

        Dim html As String = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"

        Dim config As New Configuration()
        config.Document = html
        config.UserStyleSheets = New System.Collections.Generic.List(Of Resource) From {
            New Resource With {
                .Content = "@page { @top-center { content: 'Header Text'; } @bottom-center { content: 'Page ' counter(page); } }"
            }
        }

        Dim result As Result = pdfReactor.Convert(config)

        File.WriteAllBytes("document.pdf", result.Document)
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Header Text"
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page}"
        };

        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("document.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Header Text"
        };

        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page}"
        };

        string html = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);

        pdf.SaveAs("document.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()

        renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
            .CenterText = "Header Text"
        }

        renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
            .CenterText = "Page {page}"
        }

        Dim html As String = "<html><body><h1>Document with Headers</h1><p>Content here</p></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)

        pdf.SaveAs("document.pdf")
    End Sub
End Module
$vbLabelText   $csharpLabel

이 예제는 가장 중요한 구문 차이를 보여줍니다. PDFreactor는 @page 규칙, @bottom-center 영역, counter(page) 페이지 번호를 UserStyleSheets 목록의 Resource 항목을 통해 삽입하여 CSS 페이지 매체 구문을 사용합니다.

IronPDF는 TextHeaderFooter 객체를 RenderingOptions.TextHeaderRenderingOptions.TextFooter에 할당하여 사용하는 네이티브 .NET API를 사용합니다. 페이지 번호는 CSS counter(page) 대신 {page} 플레이스홀더를 사용합니다.


중요한 마이그레이션 노트

서버 필요 없음

IronPDF는 프로세스 내에서 실행됩니다—설정할 Java 서버가 필요 없음:

// PDFreactor: Requires the Web Service running on a reachable host
var pdfReactor = new PDFreactor("http://localhost:9423/service/rest");

// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();
// PDFreactor: Requires the Web Service running on a reachable host
var pdfReactor = new PDFreactor("http://localhost:9423/service/rest");

// IronPDF: No server URL needed
var renderer = new ChromePdfRenderer();
' PDFreactor: Requires the Web Service running on a reachable host
Dim pdfReactor = New PDFreactor("http://localhost:9423/service/rest")

' IronPDF: No server URL needed
Dim renderer = New ChromePdfRenderer()
$vbLabelText   $csharpLabel

CSS Paged Media에서IronPDF API로

CSS @page 규칙을 RenderingOptions로 교체합니다:

// PDFreactor CSS: @page { @bottom-center { content: 'Page ' counter(page); } }
// IronPDF equivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter 
{ 
    CenterText = "Page {page}" 
};
// PDFreactor CSS: @page { @bottom-center { content: 'Page ' counter(page); } }
// IronPDF equivalent:
renderer.RenderingOptions.TextFooter = new TextHeaderFooter 
{ 
    CenterText = "Page {page}" 
};
' PDFreactor CSS: @page { @bottom-center { content: 'Page ' counter(page); } }
' IronPDF equivalent:
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .CenterText = "Page {page}"
}
$vbLabelText   $csharpLabel

페이지 번호 플레이스홀더 문법

// PDFreactor CSS: counter(page)
// IronPDF: {page}

// PDFreactor CSS: counter(pages)  
// IronPDF: {total-pages}
// PDFreactor CSS: counter(page)
// IronPDF: {page}

// PDFreactor CSS: counter(pages)  
// IronPDF: {total-pages}
' PDFreactor CSS: counter(page)
' IronPDF: {page}

' PDFreactor CSS: counter(pages)  
' IronPDF: {total-pages}
$vbLabelText   $csharpLabel

결과 처리 변경

구성 + 결과 패턴은 직접 PdfDocument로 변경:

// PDFreactor: Configuration → Convert → Result → bytes
Result result = pdfReactor.Convert(config);
byte[] bytes = result.Document;
File.WriteAllBytes("output.pdf", bytes);

// IronPDF: Direct PdfDocument with built-in methods
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or: byte[] bytes = pdf.BinaryData;
// PDFreactor: Configuration → Convert → Result → bytes
Result result = pdfReactor.Convert(config);
byte[] bytes = result.Document;
File.WriteAllBytes("output.pdf", bytes);

// IronPDF: Direct PdfDocument with built-in methods
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or: byte[] bytes = pdf.BinaryData;
' PDFreactor: Configuration → Convert → Result → bytes
Dim result As Result = pdfReactor.Convert(config)
Dim bytes As Byte() = result.Document
File.WriteAllBytes("output.pdf", bytes)

' IronPDF: Direct PdfDocument with built-in methods
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
' Or: Dim bytes As Byte() = pdf.BinaryData
$vbLabelText   $csharpLabel

여백 단위 변경

PDFreactor는 문자열을 사용합니다; IronPDF는 밀리미터를 사용합니다:

// PDFreactor: config.PageMargins.Top = "1in"
// IronPDF: renderer.RenderingOptions.MarginTop = 25.4  // 1 inch in mm
// PDFreactor: config.PageMargins.Top = "1in"
// IronPDF: renderer.RenderingOptions.MarginTop = 25.4  // 1 inch in mm
' PDFreactor: config.PageMargins.Top = "1in"
' IronPDF: renderer.RenderingOptions.MarginTop = 25.4  ' 1 inch in mm
$vbLabelText   $csharpLabel

이동 후 새로운 기능

IronPDF로 이전 후, PDFreactor가 제공할 수 없는 기능을 얻게 됩니다:

PDF 병합

var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
$vbLabelText   $csharpLabel

워터마크

pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")
$vbLabelText   $csharpLabel

텍스트 추출

string text = pdf.ExtractAllText();
string text = pdf.ExtractAllText();
Dim text As String = pdf.ExtractAllText()
$vbLabelText   $csharpLabel

비밀번호 보호

pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
$vbLabelText   $csharpLabel

기능 비교 요약

기능 PDFreactor IronPDF
HTML to PDF
URL을 PDF로 변환
헤더/푸터 CSS 분할 미디어 본래의 API
페이지 설정
JavaScript 지원
네이티브 .NET
프로세스 내
PDF 병합
PDF 분할
워터마크
텍스트 추출
폼 채우기
디지털 서명

마이그레이션 체크리스트

사전 마이그레이션

  • 코드베이스에서 모든PDFreactor사용 인벤토리
  • 사용된 모든 CSS 분할 미디어규칙 문서화
  • 모든 구성 설정(여백, 페이지 크기, JavaScript) 기록 -IronPDF라이선스 키 저장 계획 (환경 변수 권장) -IronPDF체험판 라이선스로 먼저 테스트

패키지 변경 사항

  • PDFreactor.dll 어셈블리 참조를 .csproj에서 직접 제거합니다. -PDFreactor웹 서비스를 해체하세요 (Java/Jetty)
  • IronPdf NuGet Install-Package: dotnet add package IronPdf

코드 변경 사항

  • 네임스페이스 가져오기를 업데이트합니다(using RealObjects.PDFreactor.Webservice.Client;using IronPdf;)
  • 헤더/푸터 클래스를 위해 using IronPdf.Rendering;을 추가합니다.
  • PDFreactor 클래스를 ChromePdfRenderer로 교체합니다.
  • Configuration 객체를 RenderingOptions 속성으로 변환합니다.
  • config.Document = htmlrenderer.RenderHtmlAsPdf(html)로 교체합니다.
  • config.Document = urlrenderer.RenderUrlAsPdf(url)로 교체합니다.
  • File.WriteAllBytes(path, result.Document)pdf.SaveAs(path)로 교체합니다.
  • CSS @page 규칙을 TextFooter 객체로 변환합니다.
  • 페이지 번호 플레이스홀더를 업데이트합니다(counter(page){page})
  • 여백 단위를 문자열에서 밀리미터로 변환

인프라 마이그레이션

  • Java 런타임 요구사항 제거 -PDFreactor서버 사용 중단
  • Docker/배포 구성 업데이트
  • CI/CD 파이프라인을 업데이트하세요

마이그레이션 이후

  • PDF 출력 품질이 기대에 부합하는지 테스트하세요
  • 헤더/푸터 렌더링 검증
  • 사용했다면 JavaScript 실행 확인
  • 필요에 따라 새로운 기능 추가 (병합, 워터마크, 보안)

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

Curtis Chau
기술 문서 작성자

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

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

아이언 서포트 팀

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