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는 오픈 소스 원칙과 유연성에 따른 이념적 정렬 때문에 많은 개발자들에게 실행 가능한 옵션이지만, 제한 사항이 없는 것은 아닙니다.
주요 마이그레이션 이유
- LGPL 라이선스 문제: LGPL 라이선스는 라이브러리 자체에 대한 수정사항이 오픈 소스화 되어야 함을 요구하며, 이는 일부 상업적 응용에 제한적일 수 있습니다
- 맞춤형 템플릿 구문: 독점적 바인딩 구문은 학습 곡선을 요구합니다
- 제한된 CSS 지원: 풀 브라우저 기반 렌더러가 아닙니다
- 작은 커뮤니티: 문서 및 커뮤니티 예제가 적습니다
- JavaScript 실행 없음: 정적 렌더링만 가능
- 복잡한 구성: XML 중심의 구성 접근 방식
- 제한된 상업적 지원: 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엔진은 현대 웹 표준과의 완벽한 호환성을 제공합니다.
시작하기 전에
필수 조건
- .NET 환경: .NET Framework 4.6.2+ 또는 .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet 접근 권한: NuGet 패키지를 설치할 수 있는 능력
- 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
라이선스 구성
// 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"
완전한 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
핵심 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
이후 (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
이 예제는 근본적인 아키텍처 차이를 보여줍니다. 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
이후 (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
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
이후 (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
Scryber.Core는 문서를 구문 분석한 후 Compression (값: OutputCompressionType.FlateDecode) 및 PaperSize (값: PaperSize.A4)와 같은 출력 설정을 구성하기 위해 doc.RenderOptions을(를) 사용합니다.
IronPDF는 렌더링 전에 렌더러에 RenderingOptions을(를) 사용합니다. 속성에는 밀리미터 단위로 설정된 PaperSize (값: PdfPaperSize.A4), MarginTop 및 MarginBottom이 포함됩니다. 주요 차이점은 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>
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)
주요 장점: 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>
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")
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")
보안 및 메타데이터
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")
기능 비교 요약
| 기능 | 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.CoreNuGet 패키지 제거IronPdfNuGet Install-Package- 네임스페이스 가져오기 업데이트 (
using Scryber.Core;→using IronPdf;) Document.ParseDocument(html, ParseSourceType.DynamicContent)을(를)renderer.RenderHtmlAsPdf(html)으로(로) 교체doc.SaveAsPDF()을(를)pdf.SaveAs()으로(로) 교체- XML 템플릿을 HTML로 변환
- 독점 바인딩을 표준 템플릿(Razor/문자열 인터폴레이션)으로 대체
- 페이지 설정 업데이트:
doc.RenderOptions.PaperSize→renderer.RenderingOptions.PaperSize {page}및{total-pages}자리 표시자를 사용하여 헤더/푸터를 HTML 형식으로 변환- 애플리케이션 시작 시 라이선스 초기화 추가
테스트
- 모든 문서 템플릿 테스트
- 스타일링 일치 여부 확인 (전체 CSS 지원 활용)
- 새로운 템플릿과 데이터 바인딩 테스트
- 페이지 나누기 확인
- 페이지 번호 플레이스홀더를 포함한 헤더/푸터 테스트
- 성능 비교

