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

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

Scryber.Core에서 IronPDF로 마이그레이션하면 맞춤형 XML/HTML 구문 분석 엔진에서 CSS3 및 JavaScript를 완벽히 지원하는 모던Chromium기반 렌더러로 PDF 생성 워크플로우가 변형됩니다. 이 가이드는 LGPL 라이선스 문제, 독점 템플릿 구문, 제한된 렌더링 기능을 제거하는 완전한 단계별 마이그레이션 경로를 제공합니다.

Scryber.Core에서 IronPDF로 전환하는 이유

Scryber.Core 이해하기

Scryber.Core는 HTML 템플릿을 PDF로 변환하는 오픈 소스 라이브러리로, C#을 사용합니다. 이 기능은 웹 개발과 HTML에 익숙한 개발자들에게 매력적인 도구로 만듭니다. 특정 문서 코딩 기술을 요구하는 다른 PDF 솔루션과 달리, Scryber.Core는 HTML의 다재다능함과 CSS 스타일링 기능을 활용하여 보다 직관적인 PDF 생성 접근 방식을 제공합니다.

Scryber.Core는 오픈 소스 원칙과 유연성에 따른 이념적 정렬 때문에 많은 개발자들에게 실행 가능한 옵션이지만, 제한 사항이 없는 것은 아닙니다.

주요 마이그레이션 이유

  1. LGPL 라이선스 문제: LGPL 라이선스는 라이브러리 자체에 대한 수정사항이 오픈 소스화 되어야 함을 요구하며, 이는 일부 상업적 응용에 제한적일 수 있습니다
  2. 맞춤형 템플릿 구문: 독점적 바인딩 구문은 학습 곡선을 요구합니다
  3. 제한된 CSS 지원: 풀 브라우저 기반 렌더러가 아닙니다
  4. 작은 커뮤니티: 문서 및 커뮤니티 예제가 적습니다
  5. JavaScript 실행 없음: 정적 렌더링만 가능
  6. 복잡한 구성: XML 중심의 구성 접근 방식
  7. 제한된 상업적 지원: Scryber.Core는 주로 커뮤니티 지원을 받습니다

Scryber.Core와IronPDF비교

측면 Scryber.Core IronPDF
라이선스 LGPL (제한적) 상업적
렌더링 엔진 사용자 정의 Chromium
CSS 지원 제한적 전체 CSS3
JavaScript 아니요 전체 ES2024
템플릿 바인딩 독점 XML 표준 (Razor, 등)
학습 곡선 사용자 정의 구문 표준 HTML/CSS
비동기 지원 제한적 전체
문서화 기초적인 광범위함
커뮤니티 지원 작음 대형
상업적 지원 제한적 전문적 지원 포함

IronPDF는 Scryber.Core에 비해 기업 등급의 상업적 지원, 광범위한 문서 및 더 큰 커뮤니티를 제공합니다. 이 라이브러리는 LGPL 제한 없이 보다 유연한 라이선스 옵션을 제공하여 상업적 응용에 이상적입니다.

.NET 10 및 C# 14 채택을 2025년과 2026년에 계획 중인 팀에게 IronPDF의 최신Chromium엔진은 현대 웹 표준과의 완벽한 호환성을 제공합니다.


시작하기 전에

필수 조건

  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 패키지 변경 사항

# Remove Scryber.Core
dotnet remove package Scryber.Core

# Install IronPDF
dotnet add package IronPdf
# Remove Scryber.Core
dotnet remove package Scryber.Core

# Install IronPDF
dotnet add package IronPdf
SHELL

라이선스 구성

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

완전한 API 참조

네임스페이스 변경

// Before: Scryber.Core
using Scryber.Components;
using Scryber.Components.Pdf;
using Scryber.PDF;
using Scryber.Styles;
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: Scryber.Core
using Scryber.Components;
using Scryber.Components.Pdf;
using Scryber.PDF;
using Scryber.Styles;
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports Scryber.Components
Imports Scryber.Components.Pdf
Imports Scryber.PDF
Imports Scryber.Styles
Imports Scryber.Core
Imports Scryber.Core.Html
Imports Scryber.Drawing

Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

핵심 API 매핑

Scryber.Core IronPDF
Document.ParseDocument(html) renderer.RenderHtmlAsPdf(html)
Document.ParseTemplate(path) renderer.RenderHtmlFileAsPdf(path)
doc.SaveAsPDF(path) pdf.SaveAs(path)
doc.SaveAsPDF(stream) pdf.Stream 또는 pdf.BinaryData
doc.Info.Title pdf.MetaData.Title
doc.Info.Author pdf.MetaData.Author
PDFPage pdf.Pages[i]
PDFLayoutDocument RenderingOptions
PDFStyle HTML 내 CSS
doc.RenderOptions.PaperSize RenderingOptions.PaperSize
데이터 바인딩 ({{value}}) Razor/문자열 보간

코드 마이그레이션 예제

예제 1: 기본 HTML을 PDF로 변환

이전 (Scryber.Core):

// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

        using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
        {
            doc.SaveAsPDF("output.pdf");
        }
    }
}
// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

        using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
        {
            doc.SaveAsPDF("output.pdf");
        }
    }
}
Imports Scryber.Core
Imports Scryber.Core.Html
Imports System.IO

Class Program
    Shared Sub Main()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"

        Using doc = Document.ParseDocument(html, ParseSourceType.DynamicContent)
            doc.SaveAsPDF("output.pdf")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";

        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

이 예제는 근본적인 아키텍처 차이를 보여줍니다. Scryber.Core는 Document.ParseDocument()을(를) ParseSourceType.DynamicContent 매개변수와 함께 사용하여 HTML 콘텐츠를 구문 분석하며, 적절한 처리를 위해 using 블록을 필요로 합니다. 문서는 SaveAsPDF()을(를) 사용하여 저장됩니다.

IronPDF는 ChromePdfRenderer 인스턴스를 RenderHtmlAsPdf()와 함께 사용하여 HTML을 직접 렌더링합니다. PDF는 SaveAs()을(를) 사용하여 저장됩니다. 수동 처리 필요 없음—IronPDF가 정리 작업을 자동으로 수행합니다. HTML에서 PDF로의 문서에서 포괄적인 예제를 참조하세요.

예제 2: URL에서 PDF로 변환

이전 (Scryber.Core):

// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        string html = await client.GetStringAsync("https://www.example.com");

        using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
        {
            doc.SaveAsPDF("webpage.pdf");
        }
    }
}
// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        string html = await client.GetStringAsync("https://www.example.com");

        using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
        {
            doc.SaveAsPDF("webpage.pdf");
        }
    }
}
Imports Scryber.Core
Imports Scryber.Core.Html
Imports System.Net.Http
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Using client As New HttpClient()
            Dim html As String = Await client.GetStringAsync("https://www.example.com")

            Using doc = Document.ParseDocument(html, ParseSourceType.DynamicContent)
                doc.SaveAsPDF("webpage.pdf")
            End Using
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

이후 (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

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;

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

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Scryber.Core는 URL을 PDF로 직접 변환할 수 없습니다. HTML 콘텐츠를 수동으로 HttpClient.GetStringAsync()을(를) 사용하여 가져온 후, 다운로드한 HTML을 Document.ParseDocument()로 구문 분석해야 합니다. 이 접근 방식은JavaScript실행, 동적 콘텐츠 및 적절한 CSS 해석을 놓칩니다. 사용자 정의 구문 분석기가 스크립트를 실행하지 않기 때문입니다.

IronPDF의 RenderUrlAsPdf() 메서드는 Chromium 엔진을 사용하여 전체JavaScript실행과 CSS 렌더링을 포함하여 전체 프로세스를 단일 호출로 처리합니다. 튜토리얼에서 자세히 알아보세요.

예제 3: 사용자 지정 페이지 설정 및 여백

이전 (Scryber.Core):

// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";

        using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
        {
            doc.RenderOptions.Compression = OutputCompressionType.FlateDecode;
            doc.RenderOptions.PaperSize = PaperSize.A4;
            doc.SaveAsPDF("custom.pdf");
        }
    }
}
// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
using System.IO;

class Program
{
    static void Main()
    {
        string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";

        using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
        {
            doc.RenderOptions.Compression = OutputCompressionType.FlateDecode;
            doc.RenderOptions.PaperSize = PaperSize.A4;
            doc.SaveAsPDF("custom.pdf");
        }
    }
}
Imports Scryber.Core
Imports Scryber.Core.Html
Imports Scryber.Drawing
Imports System.IO

Class Program
    Shared Sub Main()
        Dim html As String = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>"

        Using doc = Document.ParseDocument(html, ParseSourceType.DynamicContent)
            doc.RenderOptions.Compression = OutputCompressionType.FlateDecode
            doc.RenderOptions.PaperSize = PaperSize.A4
            doc.SaveAsPDF("custom.pdf")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

이후 (IronPDF):

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 40;
        renderer.RenderingOptions.MarginBottom = 40;

        string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 40;
        renderer.RenderingOptions.MarginBottom = 40;

        string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("custom.pdf");
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.MarginTop = 40
        renderer.RenderingOptions.MarginBottom = 40

        Dim html As String = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("custom.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Scryber.Core는 문서를 구문 분석한 후 Compression (값: OutputCompressionType.FlateDecode) 및 PaperSize (값: PaperSize.A4)와 같은 출력 설정을 구성하기 위해 doc.RenderOptions을(를) 사용합니다.

IronPDF는 렌더링 전에 렌더러에 RenderingOptions을(를) 사용합니다. 속성에는 밀리미터 단위로 설정된 PaperSize (값: PdfPaperSize.A4), MarginTopMarginBottom이 포함됩니다. 주요 차이점은 IronPDF가 숫자 속성을 통해 직접적인 여백 제어를 제공하는 반면, Scryber.Core는 XML 기반 스타일을 사용한다는 점입니다.


템플릿 마이그레이션 패턴

독점 바인딩에서 표준 템플릿으로의 마이그레이션

Scryber.Core는 독점 XML 기반의 바인딩 구문을 사용하여 표준 템플릿으로 변환해야 합니다:

Scryber.Core 바인딩:

<pdf:Para text='{{model.Name}}' />
<pdf:Para text='Total: {{model.Total:C}}' />
<pdf:ForEach on='{{model.Items}}'>
    <pdf:Para text='{{.Name}}: {{.Price}}' />
</pdf:ForEach>
<pdf:Para text='{{model.Name}}' />
<pdf:Para text='Total: {{model.Total:C}}' />
<pdf:ForEach on='{{model.Items}}'>
    <pdf:Para text='{{.Name}}: {{.Price}}' />
</pdf:ForEach>
XML

IronPDF와 C# 문자열 인터폴레이션:

var items = model.Items.Select(i => $"<li>{i.Name}: {i.Price:C}</li>");

var html = $@"
<p>{model.Name}</p>
<p>Total: {model.Total:C}</p>
<ul>
    {string.Join("", items)}
</ul>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
var items = model.Items.Select(i => $"<li>{i.Name}: {i.Price:C}</li>");

var html = $@"
<p>{model.Name}</p>
<p>Total: {model.Total:C}</p>
<ul>
    {string.Join("", items)}
</ul>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
Dim items = model.Items.Select(Function(i) $"<li>{i.Name}: {i.Price:C}</li>")

Dim html = $"
<p>{model.Name}</p>
<p>Total: {model.Total:C}</p>
<ul>
    {String.Join("", items)}
</ul>"

Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

주요 장점: IronPDF는 표준 C# 및 HTML을 사용하여, 독점 구문을 배우는 대신 모든 템플릿 엔진(Razor, Handlebars 등)을 사용할 수 있습니다.


헤더 및 푸터 마이그레이션

Scryber.Core (XML 기반 헤더/푸터):

<?xml version='1.0' encoding='utf-8' ?>
<pdf:Document xmlns:pdf='http://www.scryber.co.uk/schemas/core/release/v1/Scryber.Components.xsd'>
    <Pages>
        <pdf:Section>
            <Header>
                <pdf:Para text='Company Report' />
            </Header>
            <Footer>
                <pdf:Para text='Page {{pagenum}} of {{pagetotal}}' />
            </Footer>
            <Content>
                <pdf:H1 text='Content Here' />
            </Content>
        </pdf:Section>
    </Pages>
</pdf:Document>
<?xml version='1.0' encoding='utf-8' ?>
<pdf:Document xmlns:pdf='http://www.scryber.co.uk/schemas/core/release/v1/Scryber.Components.xsd'>
    <Pages>
        <pdf:Section>
            <Header>
                <pdf:Para text='Company Report' />
            </Header>
            <Footer>
                <pdf:Para text='Page {{pagenum}} of {{pagetotal}}' />
            </Footer>
            <Content>
                <pdf:H1 text='Content Here' />
            </Content>
        </pdf:Section>
    </Pages>
</pdf:Document>
XML

IronPDF (HTML 헤더/푸터):

using IronPdf;

var renderer = new ChromePdfRenderer();

// HTML header with full CSS support
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt; border-bottom: 1px solid #ccc;'>
            Company Report
        </div>",
    MaxHeight = 30
};

// HTML footer with page numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content Here</h1>");
pdf.SaveAs("report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

// HTML header with full CSS support
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 12pt; border-bottom: 1px solid #ccc;'>
            Company Report
        </div>",
    MaxHeight = 30
};

// HTML footer with page numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
    HtmlFragment = @"
        <div style='width: 100%; text-align: center; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    MaxHeight = 25
};

var pdf = renderer.RenderHtmlAsPdf("<h1>Content Here</h1>");
pdf.SaveAs("report.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' HTML header with full CSS support
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='width: 100%; text-align: center; font-size: 12pt; border-bottom: 1px solid #ccc;'>
            Company Report
        </div>",
    .MaxHeight = 30
}

' HTML footer with page numbers
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
    .HtmlFragment = "
        <div style='width: 100%; text-align: center; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    .MaxHeight = 25
}

Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content Here</h1>")
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

Scryber.Core는 XML 기반의 헤더/푸터 정의를 {{pagenum}}{{pagetotal}}와 같은 독점적 자리 표시자를 사용하여 필요로 합니다. IronPDF는 헤더와 푸터에 대해 HTML/CSS전체를 사용하며 {page}{total-pages} 자리 표시자를 포함합니다.


이동 후 새로운 기능

IronPDF로 마이그레이션한 후에는 Scryber.Core가 제공할 수 없는 기능을 얻을 수 있습니다:

PDF 병합

var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var pdf3 = PdfDocument.FromFile("chapter3.pdf");

var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete_book.pdf");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var pdf3 = PdfDocument.FromFile("chapter3.pdf");

var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim pdf3 = PdfDocument.FromFile("chapter3.pdf")

Dim merged = PdfDocument.Merge(pdf1, pdf2, pdf3)
merged.SaveAs("complete_book.pdf")
$vbLabelText   $csharpLabel

보안 및 메타데이터

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Metadata
pdf.MetaData.Title = "My Document";
pdf.MetaData.Author = "John Doe";
pdf.MetaData.Subject = "Annual Report";
pdf.MetaData.Keywords = "report, annual, confidential";

// Security
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;

pdf.SaveAs("protected.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");

// Metadata
pdf.MetaData.Title = "My Document";
pdf.MetaData.Author = "John Doe";
pdf.MetaData.Subject = "Annual Report";
pdf.MetaData.Keywords = "report, annual, confidential";

// Security
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;

pdf.SaveAs("protected.pdf");
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")

' Metadata
pdf.MetaData.Title = "My Document"
pdf.MetaData.Author = "John Doe"
pdf.MetaData.Subject = "Annual Report"
pdf.MetaData.Keywords = "report, annual, confidential"

' Security
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user456"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights

pdf.SaveAs("protected.pdf")
$vbLabelText   $csharpLabel

기능 비교 요약

기능 Scryber.Core IronPDF
HTML to PDF 기초적인 전체 Chromium
URL을 PDF로 변환 수동 가져오기 네이티브 지원
CSS 그리드 제한적 지원됨
플렉스박스 제한적 지원됨
JavaScript 아니요 전체 ES2024
데이터 바인딩 독점 XML Razor/Handlebars 사용
헤더/푸터 XML 기반 HTML/CSS
PDF 병합 제한적 내장형
PDF 분할 아니요
워터마크 기초적인 전체 HTML
디지털 서명 아니요
PDF/A 아니요
비밀번호 보호 기초적인 전체
비동기 지원 제한적 전체
크로스 플랫폼

마이그레이션 체크리스트

사전 마이그레이션

  • XML/바인딩 패턴을 위한 모든 Scryber 템플릿 감사
  • 사용된 문서 데이터 바인딩 패턴 ({{model.Property}})
  • CSS 변환이 필요한 사용자 정의 스타일 식별
  • ironpdf.com에서IronPDF라이선스 키 획득

코드 업데이트

  • Scryber.Core NuGet 패키지 제거
  • IronPdf NuGet Install-Package
  • 네임스페이스 가져오기 업데이트 (using Scryber.Core;using IronPdf;)
  • Document.ParseDocument(html, ParseSourceType.DynamicContent)을(를) renderer.RenderHtmlAsPdf(html)으로(로) 교체
  • doc.SaveAsPDF()을(를) pdf.SaveAs()으로(로) 교체
  • XML 템플릿을 HTML로 변환
  • 독점 바인딩을 표준 템플릿(Razor/문자열 인터폴레이션)으로 대체
  • 페이지 설정 업데이트: doc.RenderOptions.PaperSizerenderer.RenderingOptions.PaperSize
  • {page}{total-pages} 자리 표시자를 사용하여 헤더/푸터를 HTML 형식으로 변환
  • 애플리케이션 시작 시 라이선스 초기화 추가

테스트

  • 모든 문서 템플릿 테스트
  • 스타일링 일치 여부 확인 (전체 CSS 지원 활용)
  • 새로운 템플릿과 데이터 바인딩 테스트
  • 페이지 나누기 확인
  • 페이지 번호 플레이스홀더를 포함한 헤더/푸터 테스트
  • 성능 비교

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

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

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

아이언 서포트 팀

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