フッターコンテンツにスキップ
移行ガイド

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は、主にオープンソースの原則に沿った思想と柔軟性により、多くの開発者にとって実行可能な選択肢ですが、制限がないわけではありません。

移行する主な理由

  1. LGPLライセンスに関する懸念: LGPLライセンスでは、ライブラリ自体への変更はすべてオープンソース化する必要があるため、一部の商用アプリケーションでは制限となる可能性があります。 2.カスタムテンプレート構文:独自のバインディング構文は学習曲線を必要とする
  2. CSSサポートが限られている:完全なブラウザベースのレンダラーではない 4.コミュニティが小さい:ドキュメントやコミュニティの例が少ない
  3. 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エンジンは現代のウェブ標準との完全な互換性を提供します。


始める前に

前提条件

  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";
$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;
$vbLabelText   $csharpLabel

コア API マッピング

Scryber.Core IronPDF ノート
Document.ParseDocument(html). renderer.RenderHtmlAsPdf(html). HTMLレンダリング
Document.ParseTemplate(パス) renderer.RenderHtmlFileAsPdf(path)のようにします。 ファイルレンダリング
doc.SaveAsPDF(パス)を実行します。 pdf.SaveAs(path)のようにします。 ファイルに保存
doc.SaveAsPDF(stream)</code><code>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");
        }
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

この例は、基本的なアーキテクチャの違いを示しています。 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");
        }
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

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");
        }
    }
}
$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");
    }
}
$vbLabelText   $csharpLabel

Scryber.Coreは、doc.RenderOptionsを使用して、ドキュメントのパース後にCompressionOutputCompressionType.FlateDecodeに設定)やPaperSizePaperSize.A4に設定)のような出力設定を構成します。

IronPDFはレンダリング前にレンダラーでRenderingOptionsを使用します。 プロパティには、PaperSizePdfPaperSize.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

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);
$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");
$vbLabelText   $csharpLabel

Scryber.Coreは、{{pagenum}}{{pagetotal}}のような独自のプレースホルダを持つXMLベースのヘッダー/フッター定義を必要とします。 IronPDFは{page}{total-pages}プレースホルダーでヘッダーとフッターに完全な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");
$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");
$vbLabelText   $csharpLabel

機能比較の概要

フィーチャー 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.Core NuGet パッケージを削除する
  • IronPdf NuGetパッケージをインストールする
  • 名前空間のインポートを更新します ( 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 サポートを活用する)
  • 新しいテンプレートを使用してデータバインディングをテストする
  • 改ページの確認
  • ページ番号プレースホルダー付きのヘッダー/フッターをテストする
  • パフォーマンス比較

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。