C#でScryber.CoreからIronPDFに移行する方法
Scryber.CoreからIronPdfへの移行は、カスタムXML/HTMLパースエンジンから、CSS3とJavaScriptをフルサポートした最新のChromiumレンダラーへとPDF生成ワークフローを変換します。 このガイドでは、LGPLライセンスの懸念、独自のテンプレート構文、およびレンダリング機能の制限を排除する、完全で段階的な移行パスを提供します。
Scryber.CoreからIronPDFへ移行する理由
Scryber.Coreについて
Scryber.Coreは、C#を使用してHTMLテンプレートをPDFに変換するオープンソースライブラリです。 この機能は、ウェブ開発やHTMLに精通している開発者にとって魅力的なツールとなります。 特定の文書コーディングスキルを必要とする他のPDFソリューションとは異なり、Scryber.CoreはHTMLの汎用性とCSSスタイリング機能を活用し、より直感的なPDF生成アプローチを提供します。
Scryber.Coreは、主にオープンソースの原則に沿った思想と柔軟性により、多くの開発者にとって実行可能な選択肢ですが、制限がないわけではありません。
移行する主な理由
- LGPLライセンスに関する懸念: LGPLライセンスでは、ライブラリ自体への変更はすべてオープンソース化する必要があるため、一部の商用アプリケーションでは制限となる可能性があります。 2.カスタムテンプレート構文:独自のバインディング構文は学習曲線を必要とする
- CSSサポートが限られている:完全なブラウザベースのレンダラーではない 4.コミュニティが小さい:ドキュメントやコミュニティの例が少ない
- JavaScript実行なし:静的レンダリングのみ 6.複雑な構成: XMLを多用した構成アプローチ 7.限定的な商用サポート: Scryber.Coreは主にコミュニティによってサポートされています
Scryber.CoreとIronPDFの比較
| アスペクト | Scryber.Core | IronPDF |
|---|---|---|
| ライセンス | LGPL(制限付き) | 商用 |
| レンダリングエンジン | カスタム | クロム |
| CSSサポート | 制限的 | 完全なCSS3 |
| JavaScript | なし | フルES2024 |
| テンプレートバインディング | 独自のXML | 標準(Razorなど) |
| 学習曲線 | カスタム構文 | 標準的なHTML/CSS |
| 非同期サポート | 制限的 | フル |
| ドキュメンテーション | 基本 | 広範囲 |
| コミュニティサポート | 小規模 | 大規模 |
| 商用サポート | 制限的 | プロフェッショナルサポートを含む |
IronPDFはScryber.Coreと比較して、エンタープライズグレードの商用サポート、豊富なドキュメント、より大きなコミュニティを提供します。 このライブラリは、LGPLの制限なしに、より柔軟なライセンスオプションを提供するため、商用アプリケーションに最適です。
2025年と2026年まで.NET 10とC# 14の採用を計画しているチームにとって、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";完全な 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;コア API マッピング
| Scryber.Core | IronPDF | ノート |
|---|---|---|
Document.ParseDocument(html). | renderer.RenderHtmlAsPdf(html). | HTMLレンダリング |
Document.ParseTemplate(パス)。 | renderer.RenderHtmlFileAsPdf(path)のようにします。 | ファイルレンダリング |
doc.SaveAsPDF(パス)を実行します。 | pdf.SaveAs(path)のようにします。 | ファイルに保存 |
| <コード>doc.SaveAsPDF(stream)</コード><コード>doc.SaveAsPDF(stream) | pdf.Streamまたは pdf.BinaryData。 | ストリーム/バイトを取得 |
| <コード>doc.Info.Title</コード | <コード>pdf.MetaData.Title</コード | メタデータ |
| <コード>doc.Info.Author</コード | <コード>pdf.MetaData.Author</コード | メタデータ |
| <コード>PDFページ</コード | <コード>pdf.Pages[i]</コード | ページへのアクセス |
| <コード>PDFLayoutDocument</コード | <コード>レンダリングオプション</コード | レイアウト制御 |
| <コード>PDFStyle</コード | HTMLのCSS | スタイリング |
doc.RenderOptions.PaperSize(英語 | <コード>RenderingOptions.PaperSize</コード | 用紙サイズ |
| データバインディング (<コード>{{値}}</コード>) | レイザー/文字列補間 | テンプレート作成 |
コード移行の例
例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");
}
}
}翻訳後(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");
}
}この例は、基本的なアーキテクチャの違いを示しています。 Scryber.Coreは、ParseSourceType.DynamicContentパラメータを持つDocument.ParseDocument()を使用してHTMLコンテンツをパースするため、適切な処理のためにusingブロックを必要とします。 ドキュメントは、SaveAsPDF()で保存されます。
IronPdfはChromePdfRendererインスタンスとRenderHtmlAsPdf()を使ってHTMLを直接レンダリングします。 PDFはSaveAs()で保存されます。 IronPDFは自動的にクリーンアップを行います。 包括的な例については、HTML to PDF documentationを参照してください。
例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");
}
}
}翻訳後(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");
}
}Scryber.CoreはURLを直接PDFに変換することはできません。 HttpClient.GetStringAsync()を使用して HTML コンテンツを手動で取得し、ダウンロードした HTML を Document.ParseDocument()で解析する必要があります。 このアプローチでは、カスタムパーサーはスクリプトを実行しないため、JavaScriptの実行、動的コンテンツ、適切なCSSの解決を見逃してしまいます。
IronPDFのRenderUrlAsPdf()メソッドは、Chromiumエンジンによる完全なJavaScript実行とCSSレンダリングを含むプロセス全体を1回の呼び出しで処理します。詳しくはチュートリアルをご覧ください。
例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");
}
}
}翻訳後(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");
}
}Scryber.Coreは、doc.RenderOptionsを使用して、ドキュメントのパース後にCompression(OutputCompressionType.FlateDecodeに設定)やPaperSize(PaperSize.A4に設定)のような出力設定を構成します。
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>C#文字列補間によるIronPDF:
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);主な利点: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");Scryber.Coreは、{{pagenum}}<//code>や{{pagetotal}}<//code>のような独自のプレースホルダを持つXMLベースのヘッダー/フッター定義を必要とします。 IronPDFは{page}<//code>と{total-pages}<//code>プレースホルダーでヘッダーとフッターに完全なHTML/CSSを使用しています。
移行後の新機能
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");セキュリティとメタデータ
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");機能比較の概要
| フィーチャー | Scryber.Core | IronPDF |
|---|---|---|
| HTMLからPDFへ | 基本 | 完全なChromium |
| URLからPDFへ | 手動フェッチ | ネイティブサポート |
| CSSグリッド | 制限的 | フルサポート |
| フレックスボックス | 制限的 | フルサポート |
| JavaScript | なし | フルES2024 |
| データバインディング | 独自のXML | Razor/ハンドルバーを使用する |
| ヘッダー/フッター | XMLベース | HTML/CSS |
| PDFのマージ | 制限的 | 内蔵 |
| PDFの分割 | なし | はい |
| 透かし | 基本 | フルHTML |
| デジタル署名 | なし | はい |
| PDF/A | なし | はい |
| パスワード保護 | 基本 | フル |
| 非同期サポート | 制限的 | フル |
| クロスプラットフォーム | はい | はい |
移行チェックリスト
移行前
- すべての Scryber テンプレートの XML/バインディング パターンを監査します
- 使用されるドキュメントデータバインディングパターン(
{{model.Property}}) - CSS変換が必要なカスタムスタイルを特定する
- ironpdf.comからIronPDFライセンスキーを取得します
コードの更新
Scryber.CoreNuGet パッケージを削除するIronPdfNuGetパッケージをインストールする- 名前空間のインポートを更新します (
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 サポートを活用する)
- 新しいテンプレートを使用してデータバインディングをテストする
- 改ページの確認
- ページ番号プレースホルダー付きのヘッダー/フッターをテストする
- パフォーマンス比較






