IRONSOFTWAREHOME
ビデオ

C# を使用して PDF のカスタム用紙サイズを設定する方法 | IronPDF

Curtis Chau
Curtis Chau
Updated: 2026年7月19日

Scryber.CoreからIronPDFへの移行は、PDF生成ワークフローをカスタムXHTML+CSSレイアウトエンジンから、完全なCSS3とJavaScriptサポートを備えたChromiumベースのレンダラーに移動させます。 このガイドは、LGPL v3ライセンスに関する考慮事項、ScryberのXHTML厳密なテンプレートモデル、および2つのエンジン間のレンダリングの違いをカバーする段階的な移行パスを提供します。

Scryber.CoreからIronPDFへ移行する理由

Scryber.Coreについて

Scryber.Core(Richard Hewitsonが維持、現在のバージョン9.3.1)は、独自のレイアウトエンジンでXHTML+CSSテンプレートを解析するオープンソースライブラリです—ブラウザではありません。 CSSスタイリング、Handlebarsスタイルのdoc.Paramsを介してのSVGをサポートしており、ブラウザに依存せずにHTML駆動のPDFを求める開発者にとって魅力的です。

Scryber.CoreはHTMLテンプレートベースのPDF生成のための有力な選択肢ですが、いくつかの制約によりチームは移行を検討します。

移行する主な理由

  1. LGPL v3ライセンスの懸念: Scryber自体を変更した場合、ソース開示義務が課されます; クローズドソースアプリでの静的リンクは許可されていますが、変更をどのように出荷するかの条件が制約されます。
  2. XHTML 厳密入力: テンプレートは有効なXMLでなければなりません—ほとんどの実世界のHTMLは、Scryberが解析する前にクリーンアップが必要です。
  3. 非ブラウザレンダラー: 独自のXHTML/CSSレイアウトエンジン—現代のCSS(Grid、完全なFlexbox、コンテナー問合せ)およびJavaScriptは実行されません。
  4. 小規模コミュニティ: 主流ライブラリよりも実例が少ないです。
  5. JavaScriptの実行なし: 静的レンダリングのみ—グラフ、SPA、および動的ウィジェットは事前レンダリングする必要があります。
  6. ネイティブのURLからPDFへの変換なし: 自分でHTMLを取得する必要があります(例:HttpClientを使用して)し、供給します。
  7. コミュニティサポート: 商業サポートオプションは限られています。

Scryber.CoreとIronPDFの比較

アスペクトScryber.CoreIronPDF
ライセンスLGPL v3商用
レンダリングエンジンカスタムXHTML/CSSレイアウトエンジンクロム
CSSサポートサブセット(Gridなし、部分的なFlexbox)完全なCSS3
JavaScript実行されていませんフル(Chromium V8)
テンプレートバインディングHandlebarsスタイル {{ }} + <template>標準(Razor、RazorLightなど)
入力の厳しさ整形式のXHTMLが必要実世界のHTMLを受け入れます
非同期サポートPDFAsync MVCヘルパー; sync coreフル非同期API
ドキュメンテーションRead-the-docsサイト + サンプル広範囲
コミュニティサポート小規模大規模
商用サポートコミュニティサポート商業サポート利用可能

IronPDFは、商業サポート、ドキュメンテーション、Scryber.Coreよりも多くのユーザーベースを提供します。 ライブラリはLGPL義務なしで商業使用ライセンスされています。


始める前に

前提条件

  1. .NET環境: .NET Framework 4.6.2+ または.NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGetアクセス: NuGetパッケージをインストールする機能
  3. IronPDFライセンス: IronPDFからライセンスキーを取得します。

NuGetパッケージの変更

# 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";

完全な API リファレンス

名前空間の変更

// Before: Scryber.Core
using Scryber.Components;   // Document, Page, etc.
using Scryber.Drawing;      // Units, colours
using Scryber.PDF;          // RenderOptions / OutputCompressionType
using Scryber.Styles;       // Style elements (older XML template usage)

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;

コア API マッピング

Scryber.CoreIronPDF
Document.ParseDocument(reader, "", ParseSourceType.DynamicContent)renderer.RenderHtmlAsPdf(html)
Document.ParseDocument(path)renderer.RenderHtmlFileAsPdf(path)
doc.SaveAsPDF(path)pdf.SaveAs(path)
doc.SaveAsPDF(stream)pdf.BinaryData (byte[])
doc.Info.Titlepdf.MetaData.Title
doc.Info.Authorpdf.MetaData.Author
@page テンプレート内のCSSrenderer.RenderingOptions.PaperSize / マージン
doc.RenderOptionsrenderer.RenderingOptions
Handlebars {{value}} + doc.ParamsRazor / 文字列補間

コード移行の例

例1: 基本的なHTMLからPDFへの変換

ビフォア(Scryber.Core):

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

class Program
{
    static void Main()
    {
        // Scryber requires well-formed XHTML wrapped in an html root with the xhtml namespace
        string html = @"<html xmlns='http://www.w3.org/1999/xhtml'>
            <body><h1>Hello World</h1><p>This is a PDF document.</p></body>
        </html>";

        using (var reader = new StringReader(html))
        using (var doc = Document.ParseDocument(reader, string.Empty, ParseSourceType.DynamicContent))
        using (var stream = new FileStream("output.pdf", FileMode.Create))
        {
            doc.SaveAsPDF(stream);
        }
    }
}

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        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は、XHTML文字列をSaveAsPDFを介して書き込みます。 XHTML名前空間宣言が必要です— Scryberは整形式でないXMLのHTMLを却下します。

IronPDFは、SaveAs()で保存します。 実世界のHTML5がそのまま受け入れられます。 さらなる例については HTML to PDF ドキュメント を参照してください。

例2: URLからPDFへの変換

ビフォア(Scryber.Core):

// NuGet: Install-Package Scryber.Core
// Scryber has no native URL-to-PDF method — fetch the HTML yourself, then parse.
using Scryber.Components;
using System.IO;
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");

        // Most live HTML is not valid XHTML; expect to clean it
        // (e.g., HtmlAgilityPack) before Scryber will parse it.
        using (var reader = new StringReader(html))
        using (var doc = Document.ParseDocument(reader, string.Empty, ParseSourceType.DynamicContent))
        using (var stream = new FileStream("webpage.pdf", FileMode.Create))
        {
            doc.SaveAsPDF(stream);
        }
    }
}

翻訳後(IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}

Scryber.CoreにはネイティブのURLからPDFへのエントリーポイントがありません。 自分でDocument.ParseDocument()に供給します。 Scryberは整形式XHTMLを必要とするため、ほとんどのライブページは解析前にクリーンアップが必要です(たとえばHtmlAgilityPackを使って)。 JavaScriptは実行されないため、動的にレンダリングされたコンテンツは欠けています。

IronPDFのRenderUrlAsPdf()は、Chromiumエンジンを介して取得、JavaScript実行、CSSレンダリングを一度の呼び出しで処理します。詳細は当社のチュートリアルで確認してください。

例3: カスタムページの設定と余白

ビフォア(Scryber.Core):

// NuGet: Install-Package Scryber.Core
// Page size and margins are normally declared in the XHTML/CSS template;
// the runtime RenderOptions object exposes output-side settings such as compression.
using Scryber.Components;
using Scryber.PDF;
using System.IO;

class Program
{
    static void Main()
    {
        // Page size and margins go in CSS @page; this is the Scryber idiom.
        string html = @"<html xmlns='http://www.w3.org/1999/xhtml'>
            <head>
                <style>
                    @page { size: A4 portrait; margin: 40pt; }
                </style>
            </head>
            <body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body>
        </html>";

        using (var reader = new StringReader(html))
        using (var doc = Document.ParseDocument(reader, string.Empty, ParseSourceType.DynamicContent))
        using (var stream = new FileStream("custom.pdf", FileMode.Create))
        {
            // Output-side options (compression / conformance) are on RenderOptions.
            doc.RenderOptions.Compression = OutputCompressionType.FlateDecode;
            doc.SaveAsPDF(stream);
        }
    }
}

翻訳後(IronPDF):

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

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        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では、ページサイズとマージンがテンプレート内の@page CSSで宣言され、OutputCompressionType.FlateDecode)などの出力サイドの設定を公開します。

IronPDFは、レンダラーのMarginBottomを含みます。 ページジオメトリはテンプレートの中ではなくAPIサーフェス上に存在します。


テンプレート移行パターン

Scryberバインドから標準テンプレートへの移行

Scryber.Coreは、Handlebarsスタイルの<template data-bind='...'>構造を使用してXHTMLを使用します。 移行するには、.NET標準テンプレートでこれを表現し直してください:

Scryber バインディング (XHTML + Handlebars):

<p>{{model.Name}}</p>
<p>Total: {{model.Total}}</p>
<template data-bind='{{model.Items}}'>
    <p>{{.Name}}: {{.Price}}</p>
</template>
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);

IronPDFはプレーンHTMLを受け付けるため、Scryberの{{ }} + <template>構造ではなく、任意 for .NETテンプレートエンジンを使用できます—Razor、RazorLight、Handlebars.Net など。


ヘッダーとフッターの移行

Scryber.Core (XHTML + @page マージンボックス):

<html xmlns='http://www.w3.org/1999/xhtml'>
    <head>
        <style>
            @page {
                @top-center { content: 'Company Report'; }
                @bottom-center { content: 'Page ' counter(page) ' of ' counter(pages); }
            }
        </style>
    </head>
    <body>
        <h1>Content Here</h1>
    </body>
</html>
HTML

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");

Scryber.Coreは、CSSでcounter(pages)を使用します。 IronPDFは、ヘッダーとフッターに完全なHTML/CSSとプレースホルダーHtmlHeaderFooterを使用します。


移行後の新機能

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 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.CoreIronPDF
HTMLからPDFへカスタムレイアウトエンジンを介したXHTML+CSS完全なChromium
URLからPDFへ手動フェッチのみネイティブRenderUrlAsPdf
CSSグリッドサポートされていませんフルサポート
フレックスボックス部分的フルサポート
JavaScript実行されていませんフル(V8)
データバインディング{{ }} Handlebars + doc.ParamsRazor / RazorLight / インターポレーション
ヘッダー/フッター@page マージンボックス / テンプレートセクション{page} {total-pages}
PDFのマージサポートされていませんビルトインPdfDocument.Merge
PDFの分割サポートされていませんはい
透かしテンプレート内のオーバーレイHTMLを介してネイティブApplyStamp / ApplyWatermark
デジタル署名サポートされていませんはい
PDF/Aサポートされていませんはい (PDF/A-1b、PDF/A-3)
パスワード保護サポートされていませんフル(ユーザー/オーナー + 認証)
非同期サポートPDFAsync MVCヘルパー; sync coreフル非同期サーフェス
クロスプラットフォームはい (.NET Std 2.0/2.1、.NET 8/9/10)はい

移行チェックリスト

移行前

  • すべてのScryberテンプレートをXHTML/結合パターンのために監査する
  • 使用されたドキュメントデータバインディングパターン ({{model.Property}})
  • CSS変換が必要なカスタムスタイルを特定する
  • IronPDFからIronPDFライセンスキーを取得します

コードの更新

  • Scryber.Core NuGetパッケージを削除します
  • IronPdf NuGetパッケージをインストールします
  • 名前空間インポートを更新します (using Scryber.Components; / Scryber.Drawing; / Scryber.PDF;using IronPdf;)
  • renderer.RenderHtmlAsPdf(html)に置き換えます
  • pdf.BinaryDataに置き換えます
  • XHTMLテンプレートをプレーンHTML5に変換(名前空間は不要)
  • {{ }} Handlebarsバインディングを標準テンプレート(Razor / 文字列補間)に置き換えます
  • @page CSSをrenderer.RenderingOptionsに移動します(PaperSize、MarginTop など)
  • {total-pages}プレースホルダーを使用します
  • アプリケーションの起動時にライセンスの初期化を追加

テスティング

  • すべてのドキュメントテンプレートをテストする
  • スタイルの一致を確認する(完全な CSS サポートを活用する)
  • 新しいテンプレートを使用してデータバインディングをテストする
  • 改ページの確認
  • ページ番号プレースホルダー付きのヘッダー/フッターをテストする
  • パフォーマンス比較

Scryberはその所有者の登録商標です。 このサイトはPerceiveIT Limitedとは提携、認可、または後援されていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。)}]

Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。