フッターコンテンツにスキップ
IRONPDFの使用

IronPDFを使用して.NETでPDFを動的に生成する方法

動的 PDF 生成により、 .NETアプリケーションは、静的テンプレートを一切変更せずに、カスタマイズされた請求書、リアルタイム データ レポート、カスタム証明書をオンデマンドで作成できます。 IronPDF は、HTML、CSS、 JavaScriptをピクセルパーフェクトな PDF ドキュメントに直接変換する Chrome ベースのレンダリング エンジンを公開することでこれを簡単にし、低レベルの PDF 内部ではなくビジネス ロジックに集中できるようにします。

このガイドでは、ライブラリのインストール、プレースホルダー テンプレートの適用、プログラムによるテーブルの構築、条件付きコンテンツ ブロックの使用、レンダリング前 for JavaScriptの実行など、 .NETでデータ駆動型 PDF を作成するための主要なテクニックをすべて説明します。 各セクションには、実際に機能する C# コード例と、その特定の戦略をいつ採用するかについての説明が含まれています。 最後には、アプリケーションの特定の要件に合わせてカスタマイズされた完全な動的 PDF 生成システムを構築するのに十分な実用的な知識が得られます。

 IronPDFを使用した動的 PDF 生成.NET : 画像 1 - IronPDF

.NETでの動的 PDF 生成とは何ですか?

動的 PDF 生成とは、名前、数字、日付、表、グラフなどのすべてのコンテンツが固定レイアウトではなくライブ データから取得される PDF ドキュメントを実行時に作成することを意味します。 ドキュメントの構造は同じままでも、そのペイロードはリクエストごとに変化します。

このアプローチが最も価値を発揮するシナリオは次のとおりです。

-請求書生成- 明細項目、合計、税率、支払条件は取引ごとに異なります -財務レポート- チャートと概要表は、一日を通して更新されるデータベースから取得されます -証明書と卒業証書- 受取人名、修了日、コースの詳細はレコードごとに異なります -法的文書- 契約には顧客固有の条項と管轄規則が組み込まれている -医療記録- 患者の人口統計、検査結果、ケアプランには個別のフォーマットが必要です

従来の代替手段は、静的テンプレートのライブラリを維持し、バリエーションごとに手動で編集することです。 このアプローチは、ドキュメントの量が増え、ビジネス ルールが増えるとすぐに機能しなくなります。 IronPDF の HTML から PDF への変換エンジンを使用すると、生成ロジックを 1 回記述するだけで、手動による介入なしに、正しくフォーマットされ、データが正確な PDF を何千も生成できます。

IronPDF はWindows、Linux、macOS、Docker、Azure で実行され、同じ API がすべてのプラットフォームで同じように動作します。 このクロスプラットフォームの一貫性により、プラットフォーム固有の調整を行わずに、ローカルで開発してクラウド コンテナーにデプロイできます。 このライブラリは.NET 6 以降を対象としており、最新 for .NETリリースと長期サポート バージョンの両方をサポートします。

 IronPDFを使用した.NETによる動的 PDF 生成: 画像 2 - 機能

ライブラリをインストールして構成するにはどうすればよいですか?

IronPDFはNuGetパッケージとして配布され、 ASP.NET Core、 Blazor 、コンソール アプリケーションを含む、 .NET 6 以降の任意のプロジェクトと統合されます。 パッケージ マネージャー コンソールまたは.NET CLI からインストールします。

Install-Package IronPdf
dotnet add package IronPdf
Install-Package IronPdf
dotnet add package IronPdf
SHELL

パッケージをインストールすると、すぐに PDF の生成を開始できます。無料トライアル期間中は構成ファイルや API キーは必要ありません。 実稼働ライセンスについては、 IronPDFライセンス ページにアクセスし、展開モデルに一致するプランを選択してください。

すべてのレンダリングのエントリ ポイントは ChromePdfRenderer です。 以下のスニペットは、動的な HTML 文字列を保存された PDF ファイルに変換するために必要な最小限のコードを示しています。

using IronPdf;

var renderer = new ChromePdfRenderer();

var customerName = "Alexandra Chen";
var orderNumber = "ORD-2025-001";
var totalAmount = 1499.99m;

var html = $"""
    <h1>Order Confirmation</h1>
    <p>Dear {customerName},</p>
    <p>Thank you for your order #{orderNumber}.</p>
    <p>Total amount: ${totalAmount:F2}</p>
    <p>Your order will be processed within 24 hours.</p>
    """;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("order-confirmation.pdf");

// Stream the bytes directly in a web response if needed
byte[] pdfBytes = pdf.BinaryData;
using IronPdf;

var renderer = new ChromePdfRenderer();

var customerName = "Alexandra Chen";
var orderNumber = "ORD-2025-001";
var totalAmount = 1499.99m;

var html = $"""
    <h1>Order Confirmation</h1>
    <p>Dear {customerName},</p>
    <p>Thank you for your order #{orderNumber}.</p>
    <p>Total amount: ${totalAmount:F2}</p>
    <p>Your order will be processed within 24 hours.</p>
    """;

var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("order-confirmation.pdf");

// Stream the bytes directly in a web response if needed
byte[] pdfBytes = pdf.BinaryData;
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim customerName As String = "Alexandra Chen"
Dim orderNumber As String = "ORD-2025-001"
Dim totalAmount As Decimal = 1499.99D

Dim html As String = $"
    <h1>Order Confirmation</h1>
    <p>Dear {customerName},</p>
    <p>Thank you for your order #{orderNumber}.</p>
    <p>Total amount: ${totalAmount:F2}</p>
    <p>Your order will be processed within 24 hours.</p>
    "

Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("order-confirmation.pdf")

' Stream the bytes directly in a web response if needed
Dim pdfBytes As Byte() = pdf.BinaryData
$vbLabelText   $csharpLabel

ChromePdfRenderer はすべてのレンダリングの複雑さを内部で処理します。 文字列補間 ($"""...""") は、呼び出し時点で C# 変数を HTML に挿入し、テンプレートを読みやすく維持して、単純なケース専用のテンプレート ライブラリを排除します。

MVC ビューとBlazorサーバー プロジェクトの構成を含む完全なセットアップ ガイダンスについては、 IronPDF のドキュメントを参照してください。

出力

 IronPDFを使用した動的 PDF 生成.NET : 画像 5 - PDF 出力

テンプレートベースの PDF 生成をどのように適用しますか?

テンプレートベースの生成により、ドキュメントのデザインとデータ バインディングが分離されます。 デザイナーは HTML レイアウトを 1 回作成し、実行時の値が表示される場所に名前付きプレースホルダー ({{TOKEN}}) を配置します。アプリケーションはレンダリング前にそれらのトークンを置き換えます。 これは、アプリケーション コードよりもテンプレートが頻繁に変更されるプロジェクト向けの Stack Overflow の PDF 生成のディスカッションで推奨されているパターンです。

using IronPdf;

// Reusable template -- stored in a file or database in production
var htmlTemplate = """
    <style>
        .invoice { font-family: Arial; max-width: 800px; margin: auto; }
        .header  { background: #f0f0f0; padding: 20px; }
        .label   { font-weight: bold; }
    </style>
    <div class='invoice'>
        <div class='header'>
            <h2>Invoice #{{INVOICE_NUMBER}}</h2>
            <p>Date: {{INVOICE_DATE}}</p>
        </div>
        <p>Bill to: {{CUSTOMER_NAME}}</p>
        <p class='label'>Amount due: ${{TOTAL_AMOUNT}}</p>
    </div>
    """;

var invoiceHtml = htmlTemplate
    .Replace("{{INVOICE_NUMBER}}", "INV-2025-1234")
    .Replace("{{INVOICE_DATE}}", DateTime.Now.ToString("MMM dd, yyyy"))
    .Replace("{{CUSTOMER_NAME}}", "TechCorp Industries")
    .Replace("{{TOTAL_AMOUNT}}", "5,750.00");

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText    = "Invoice",
    DrawDividerLine = true
};

var pdf = renderer.RenderHtmlAsPdf(invoiceHtml);
pdf.SaveAs("invoice.pdf");
using IronPdf;

// Reusable template -- stored in a file or database in production
var htmlTemplate = """
    <style>
        .invoice { font-family: Arial; max-width: 800px; margin: auto; }
        .header  { background: #f0f0f0; padding: 20px; }
        .label   { font-weight: bold; }
    </style>
    <div class='invoice'>
        <div class='header'>
            <h2>Invoice #{{INVOICE_NUMBER}}</h2>
            <p>Date: {{INVOICE_DATE}}</p>
        </div>
        <p>Bill to: {{CUSTOMER_NAME}}</p>
        <p class='label'>Amount due: ${{TOTAL_AMOUNT}}</p>
    </div>
    """;

var invoiceHtml = htmlTemplate
    .Replace("{{INVOICE_NUMBER}}", "INV-2025-1234")
    .Replace("{{INVOICE_DATE}}", DateTime.Now.ToString("MMM dd, yyyy"))
    .Replace("{{CUSTOMER_NAME}}", "TechCorp Industries")
    .Replace("{{TOTAL_AMOUNT}}", "5,750.00");

var renderer = new ChromePdfRenderer();

renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
    CenterText    = "Invoice",
    DrawDividerLine = true
};

var pdf = renderer.RenderHtmlAsPdf(invoiceHtml);
pdf.SaveAs("invoice.pdf");
Imports IronPdf

' Reusable template -- stored in a file or database in production
Dim htmlTemplate As String = "
    <style>
        .invoice { font-family: Arial; max-width: 800px; margin: auto; }
        .header  { background: #f0f0f0; padding: 20px; }
        .label   { font-weight: bold; }
    </style>
    <div class='invoice'>
        <div class='header'>
            <h2>Invoice #{{INVOICE_NUMBER}}</h2>
            <p>Date: {{INVOICE_DATE}}</p>
        </div>
        <p>Bill to: {{CUSTOMER_NAME}}</p>
        <p class='label'>Amount due: ${{TOTAL_AMOUNT}}</p>
    </div>
    "

Dim invoiceHtml As String = htmlTemplate _
    .Replace("{{INVOICE_NUMBER}}", "INV-2025-1234") _
    .Replace("{{INVOICE_DATE}}", DateTime.Now.ToString("MMM dd, yyyy")) _
    .Replace("{{CUSTOMER_NAME}}", "TechCorp Industries") _
    .Replace("{{TOTAL_AMOUNT}}", "5,750.00")

Dim renderer As New ChromePdfRenderer()

renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
    .CenterText = "Invoice",
    .DrawDividerLine = True
}

Dim pdf = renderer.RenderHtmlAsPdf(invoiceHtml)
pdf.SaveAs("invoice.pdf")
$vbLabelText   $csharpLabel

トークン ({{...}}) は、データがドキュメントに入る場所を正確にマークし、開発者以外のユーザーでもテンプレートを読み取り可能にします。 テンプレートを外部ファイルとして保存すると、デザイナーはアプリケーションのコードベースに触れることなくレイアウトを更新できます。 このパターンのより詳しい説明については、 IronPDFテンプレートのチュートリアルを参照してください。

 IronPDFを使用した.NET の動的 PDF 生成: 画像 3 - .NETの動的 PDF 生成 - IronPDF

データからプログラムで PDF を作成するにはどうすればよいですか?

ドキュメントのコンテンツがループ、集計、または条件付き書式に依存している場合は、コードで HTML 文字列を構築すると、最大限の制御が可能になります。 このアプローチは、コンパイル時に行数が不明な財務レポートや運用レポートでよく使用されます。また、静的なテンプレートに埋め込むのではなく、C#で直接書式設定ルールを適用することもできます。

using IronPdf;
using System.Text;

var orderItems = new[]
{
    new { Product = "Premium License",  Quantity = 5, Price = 399.00m },
    new { Product = "Support Package",  Quantity = 1, Price = 299.00m },
    new { Product = "Training Session", Quantity = 2, Price = 150.00m }
};

var sb = new StringBuilder();
sb.Append("<h2>Order Summary</h2>");
sb.Append("<table style='width:100%; border-collapse:collapse;'>");
sb.Append("<tr style='background:#333; color:white;'>");
sb.Append("<th style='padding:10px;'>Product</th><th>Qty</th><th>Unit Price</th><th>Total</th>");
sb.Append("</tr>");

decimal grandTotal = 0;
foreach (var item in orderItems)
{
    var lineTotal = item.Quantity * item.Price;
    grandTotal += lineTotal;
    sb.Append($"""
        <tr>
            <td style='padding:10px;'>{item.Product}</td>
            <td style='text-align:center;'>{item.Quantity}</td>
            <td style='text-align:right;'>${item.Price:F2}</td>
            <td style='text-align:right;'>${lineTotal:F2}</td>
        </tr>
        """);
}

sb.Append($"""
    <tr style='font-weight:bold; background:#f0f0f0;'>
        <td colspan='3' style='padding:10px; text-align:right;'>Grand total:</td>
        <td style='text-align:right; padding:10px;'>${grandTotal:F2}</td>
    </tr>
    """);
sb.Append("</table>");

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(sb.ToString());

pdf.SaveAs("order-summary.pdf");

// Get bytes for a web download response
byte[] pdfData = pdf.BinaryData;
using IronPdf;
using System.Text;

var orderItems = new[]
{
    new { Product = "Premium License",  Quantity = 5, Price = 399.00m },
    new { Product = "Support Package",  Quantity = 1, Price = 299.00m },
    new { Product = "Training Session", Quantity = 2, Price = 150.00m }
};

var sb = new StringBuilder();
sb.Append("<h2>Order Summary</h2>");
sb.Append("<table style='width:100%; border-collapse:collapse;'>");
sb.Append("<tr style='background:#333; color:white;'>");
sb.Append("<th style='padding:10px;'>Product</th><th>Qty</th><th>Unit Price</th><th>Total</th>");
sb.Append("</tr>");

decimal grandTotal = 0;
foreach (var item in orderItems)
{
    var lineTotal = item.Quantity * item.Price;
    grandTotal += lineTotal;
    sb.Append($"""
        <tr>
            <td style='padding:10px;'>{item.Product}</td>
            <td style='text-align:center;'>{item.Quantity}</td>
            <td style='text-align:right;'>${item.Price:F2}</td>
            <td style='text-align:right;'>${lineTotal:F2}</td>
        </tr>
        """);
}

sb.Append($"""
    <tr style='font-weight:bold; background:#f0f0f0;'>
        <td colspan='3' style='padding:10px; text-align:right;'>Grand total:</td>
        <td style='text-align:right; padding:10px;'>${grandTotal:F2}</td>
    </tr>
    """);
sb.Append("</table>");

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(sb.ToString());

pdf.SaveAs("order-summary.pdf");

// Get bytes for a web download response
byte[] pdfData = pdf.BinaryData;
Imports IronPdf
Imports System.Text

Dim orderItems = New() {
    New With {.Product = "Premium License", .Quantity = 5, .Price = 399.0D},
    New With {.Product = "Support Package", .Quantity = 1, .Price = 299.0D},
    New With {.Product = "Training Session", .Quantity = 2, .Price = 150.0D}
}

Dim sb = New StringBuilder()
sb.Append("<h2>Order Summary</h2>")
sb.Append("<table style='width:100%; border-collapse:collapse;'>")
sb.Append("<tr style='background:#333; color:white;'>")
sb.Append("<th style='padding:10px;'>Product</th><th>Qty</th><th>Unit Price</th><th>Total</th>")
sb.Append("</tr>")

Dim grandTotal As Decimal = 0
For Each item In orderItems
    Dim lineTotal = item.Quantity * item.Price
    grandTotal += lineTotal
    sb.Append($"
        <tr>
            <td style='padding:10px;'>{item.Product}</td>
            <td style='text-align:center;'>{item.Quantity}</td>
            <td style='text-align:right;'>${item.Price:F2}</td>
            <td style='text-align:right;'>${lineTotal:F2}</td>
        </tr>
        ")
Next

sb.Append($"
    <tr style='font-weight:bold; background:#f0f0f0;'>
        <td colspan='3' style='padding:10px; text-align:right;'>Grand total:</td>
        <td style='text-align:right; padding:10px;'>${grandTotal:F2}</td>
    </tr>
    ")
sb.Append("</table>")

Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(sb.ToString())

pdf.SaveAs("order-summary.pdf")

' Get bytes for a web download response
Dim pdfData As Byte() = pdf.BinaryData
$vbLabelText   $csharpLabel

StringBuilder は大きな HTML 文字列を効率的に処理します。 foreach ループはデータ ソースが提供する行数まで拡張され、実行中の grandTotal 計算により、ビジネス ロジックが HTML 構造と自然に統合される様子がわかります。 非常に大きなデータセットの場合、このアプローチはIronPDF のマルチページ レンダリング オプションと組み合わせると効果的です。

出力

 IronPDFを使用した.NETでの動的 PDF 生成: 画像 7 - HTML から PDF への出力

複数のページにまたがる動的なテーブルをどのように処理しますか?

データベースから生成されたレポートには、予測できない行数が含まれることがよくあります。 行を半分に切ることなく自動改ページを正しく処理するには、IronPDF のレンダリング オプションとともに特定の CSS が必要です。 page-break-inside: avoid ルールを適切な余白設定と組み合わせると、表が複数のページに渡って流れるときにすべての行がそのまま保持されます。

using IronPdf;

var salesData = Enumerable.Range(1, 30).Select(i => new
{
    Month   = $"Month {i}",
    Revenue = 10_000 + (i * 500),
    Growth  = 2.5 + (i * 0.3)
});

var tableHtml = """
    <style>
        table { width: 100%; border-collapse: collapse; page-break-inside: auto; }
        th    { background: #2c3e50; color: white; padding: 12px; }
        td    { padding: 8px; border-bottom: 1px solid #ddd; }
        tr:nth-child(even) { background: #f9f9f9; }
        tr    { page-break-inside: avoid; page-break-after: auto; }
    </style>
    <h2>Sales Performance Report</h2>
    <table>
        <thead><tr><th>Period</th><th>Revenue</th><th>Growth %</th></tr></thead>
        <tbody>
    """;

foreach (var row in salesData)
{
    tableHtml += $"""
        <tr>
            <td>{row.Month}</td>
            <td>${row.Revenue:N0}</td>
            <td>{row.Growth:F1}%</td>
        </tr>
        """;
}

tableHtml += "</tbody></table>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize   = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop    = 40;
renderer.RenderingOptions.MarginBottom = 40;

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "{page} of {total-pages}",
    FontSize   = 10
};

var pdf = renderer.RenderHtmlAsPdf(tableHtml);
pdf.SaveAs("sales-report.pdf");
using IronPdf;

var salesData = Enumerable.Range(1, 30).Select(i => new
{
    Month   = $"Month {i}",
    Revenue = 10_000 + (i * 500),
    Growth  = 2.5 + (i * 0.3)
});

var tableHtml = """
    <style>
        table { width: 100%; border-collapse: collapse; page-break-inside: auto; }
        th    { background: #2c3e50; color: white; padding: 12px; }
        td    { padding: 8px; border-bottom: 1px solid #ddd; }
        tr:nth-child(even) { background: #f9f9f9; }
        tr    { page-break-inside: avoid; page-break-after: auto; }
    </style>
    <h2>Sales Performance Report</h2>
    <table>
        <thead><tr><th>Period</th><th>Revenue</th><th>Growth %</th></tr></thead>
        <tbody>
    """;

foreach (var row in salesData)
{
    tableHtml += $"""
        <tr>
            <td>{row.Month}</td>
            <td>${row.Revenue:N0}</td>
            <td>{row.Growth:F1}%</td>
        </tr>
        """;
}

tableHtml += "</tbody></table>";

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize   = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop    = 40;
renderer.RenderingOptions.MarginBottom = 40;

renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
    CenterText = "{page} of {total-pages}",
    FontSize   = 10
};

var pdf = renderer.RenderHtmlAsPdf(tableHtml);
pdf.SaveAs("sales-report.pdf");
Imports IronPdf

Dim salesData = Enumerable.Range(1, 30).Select(Function(i) New With {
    .Month = $"Month {i}",
    .Revenue = 10000 + (i * 500),
    .Growth = 2.5 + (i * 0.3)
})

Dim tableHtml As String = "
    <style>
        table { width: 100%; border-collapse: collapse; page-break-inside: auto; }
        th    { background: #2c3e50; color: white; padding: 12px; }
        td    { padding: 8px; border-bottom: 1px solid #ddd; }
        tr:nth-child(even) { background: #f9f9f9; }
        tr    { page-break-inside: avoid; page-break-after: auto; }
    </style>
    <h2>Sales Performance Report</h2>
    <table>
        <thead><tr><th>Period</th><th>Revenue</th><th>Growth %</th></tr></thead>
        <tbody>
    "

For Each row In salesData
    tableHtml += $"
        <tr>
            <td>{row.Month}</td>
            <td>${row.Revenue:N0}</td>
            <td>{row.Growth:F1}%</td>
        </tr>
        "
Next

tableHtml += "</tbody></table>"

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 40
renderer.RenderingOptions.MarginBottom = 40

renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
    .CenterText = "{page} of {total-pages}",
    .FontSize = 10
}

Dim pdf = renderer.RenderHtmlAsPdf(tableHtml)
pdf.SaveAs("sales-report.pdf")
$vbLabelText   $csharpLabel

{page}{total-pages} は、自動フッター番号付け用の IronPDF の組み込みトークンです。 余白により、各ページの端からコンテンツが離れるため、表が数十ページに及ぶ場合でも、完成したレポートはプロフェッショナルな外観になります。

結合されたセルを含む複雑な表レイアウトの書式設定ガイダンスについては、 IronPDFレンダリング オプション リファレンスを参照してください。

PDF に条件付きコンテンツを追加するにはどうすればよいですか?

多くのドキュメント タイプには、特定の条件が満たされた場合にのみ表示されるセクションが含まれています (最上位の顧客向けのプレミアム バッジ、プロモーションが適用される場合の割引ブロック、アカウントが延滞している場合の警告など)。 C# の条件付きロジックはこの要件に直接マップされ、HTML 文字列が構築される前に条件が評価されるため、最終的な PDF に空のプレースホルダー要素は含まれません。

using IronPdf;

var customer = new
{
    Name           = "Global Tech Solutions",
    IsPremium      = true,
    HasDiscount    = true,
    DiscountPct    = 15,
    LoyaltyPoints  = 2500
};

var html = $"""<h2>Customer Profile: {customer.Name}</h2><div style='border:1px solid #ddd; padding:20px;'>""";

if (customer.IsPremium)
{
    html += """<div style='background:gold; padding:10px; margin-bottom:10px;'>PREMIUM MEMBER -- Exclusive benefits applied</div>""";
}

if (customer.HasDiscount)
{
    html += $"""<div style='background:#e8f5e9; padding:10px; margin-bottom:10px;'>Special discount: {customer.DiscountPct}% off all orders</div>""";
}

if (customer.LoyaltyPoints > 0)
{
    html += $"""<div style='background:#f3e5f5; padding:10px;'>Loyalty points balance: {customer.LoyaltyPoints:N0} points</div>""";
}

html += "</div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("customer-profile.pdf");
using IronPdf;

var customer = new
{
    Name           = "Global Tech Solutions",
    IsPremium      = true,
    HasDiscount    = true,
    DiscountPct    = 15,
    LoyaltyPoints  = 2500
};

var html = $"""<h2>Customer Profile: {customer.Name}</h2><div style='border:1px solid #ddd; padding:20px;'>""";

if (customer.IsPremium)
{
    html += """<div style='background:gold; padding:10px; margin-bottom:10px;'>PREMIUM MEMBER -- Exclusive benefits applied</div>""";
}

if (customer.HasDiscount)
{
    html += $"""<div style='background:#e8f5e9; padding:10px; margin-bottom:10px;'>Special discount: {customer.DiscountPct}% off all orders</div>""";
}

if (customer.LoyaltyPoints > 0)
{
    html += $"""<div style='background:#f3e5f5; padding:10px;'>Loyalty points balance: {customer.LoyaltyPoints:N0} points</div>""";
}

html += "</div>";

var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("customer-profile.pdf");
Imports IronPdf

Dim customer = New With {
    .Name = "Global Tech Solutions",
    .IsPremium = True,
    .HasDiscount = True,
    .DiscountPct = 15,
    .LoyaltyPoints = 2500
}

Dim html = $"<h2>Customer Profile: {customer.Name}</h2><div style='border:1px solid #ddd; padding:20px;'>"

If customer.IsPremium Then
    html += "<div style='background:gold; padding:10px; margin-bottom:10px;'>PREMIUM MEMBER -- Exclusive benefits applied</div>"
End If

If customer.HasDiscount Then
    html += $"<div style='background:#e8f5e9; padding:10px; margin-bottom:10px;'>Special discount: {customer.DiscountPct}% off all orders</div>"
End If

If customer.LoyaltyPoints > 0 Then
    html += $"<div style='background:#f3e5f5; padding:10px;'>Loyalty points balance: {customer.LoyaltyPoints:N0} points</div>"
End If

html += "</div>"

Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("customer-profile.pdf")
$vbLabelText   $csharpLabel

同じパターンを、管轄区域固有の法的免責事項、カートの値によってトリガーされるプロモーション セクション、製品カテゴリによってトリガーされる安全上の警告など、ルールベースのコンテンツに拡張できます。 結果の PDF には、必要なコンテンツが正確に含まれます。それ以上でもそれ以下でもありません。

出力

 IronPDFを使用した.NETによる動的 PDF 生成: 画像 8 - 動的 PDF 出力

JavaScript を利用したチャートを PDF でレンダリングするにはどうすればよいでしょうか?

最新のダッシュボードでは、レンダリング時にグラフを描画するために、 Chart.jsD3.jsなど for JavaScriptチャートライブラリを使用することがよくあります。IronPDFはページをキャプチャする前にJavaScriptを実行できるため、PDF スナップショットが取得される前にチャートが完全にレンダリングされます。 つまり、別のスクリーンショット サービスやサーバー側のチャート レンダリング ライブラリは必要ありません。

using IronPdf;

var chartHtml = """
    <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
    <canvas id='revenueChart' width='500' height='250'></canvas>
    <script>
        var ctx = document.getElementById('revenueChart').getContext('2d');
        new Chart(ctx, {
            type: 'bar',
            data: {
                labels: ['Q1', 'Q2', 'Q3', 'Q4'],
                datasets: [{
                    label: 'Revenue (thousands)',
                    data: [120, 195, 230, 285],
                    backgroundColor: '#3498db'
                }]
            },
            options: { animation: false }
        });
    </script>
    """;

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1500);

var pdf = renderer.RenderHtmlAsPdf(chartHtml);
pdf.SaveAs("revenue-chart.pdf");
using IronPdf;

var chartHtml = """
    <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
    <canvas id='revenueChart' width='500' height='250'></canvas>
    <script>
        var ctx = document.getElementById('revenueChart').getContext('2d');
        new Chart(ctx, {
            type: 'bar',
            data: {
                labels: ['Q1', 'Q2', 'Q3', 'Q4'],
                datasets: [{
                    label: 'Revenue (thousands)',
                    data: [120, 195, 230, 285],
                    backgroundColor: '#3498db'
                }]
            },
            options: { animation: false }
        });
    </script>
    """;

var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1500);

var pdf = renderer.RenderHtmlAsPdf(chartHtml);
pdf.SaveAs("revenue-chart.pdf");
Imports IronPdf

Dim chartHtml As String = "
    <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
    <canvas id='revenueChart' width='500' height='250'></canvas>
    <script>
        var ctx = document.getElementById('revenueChart').getContext('2d');
        new Chart(ctx, {
            type: 'bar',
            data: {
                labels: ['Q1', 'Q2', 'Q3', 'Q4'],
                datasets: [{
                    label: 'Revenue (thousands)',
                    data: [120, 195, 230, 285],
                    backgroundColor: '#3498db'
                }]
            },
            options: { animation: false }
        });
    </script>
    "

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(1500)

Dim pdf = renderer.RenderHtmlAsPdf(chartHtml)
pdf.SaveAs("revenue-chart.pdf")
$vbLabelText   $csharpLabel

EnableJavaScript = true は、ヘッドレス Chrome エンジン内でスクリプトの実行をアクティブ化します。RenderDelay(1500) は、ページの読み込み後に 1.5 秒間の一時停止を追加し、スナップショットが取得される前に非同期チャートのレンダリングが完了する時間を確保します。 Chart.js オプションで animation: false を設定すると、アニメーション フレームが遷移の途中でキャプチャされなくなります。

このテクニックはど for JavaScriptライブラリでも機能します。 C# 文字列補間を使用してサーバー側のデータを <script> ブロックに渡すことができるため、すべてのチャートは生成時点のライブ データベースの数値を反映します。 JavaScript構成の詳細については、 IronPDF for JavaScriptレンダリング ガイドを参照してください。

生成された PDF をどのようにエクスポートして配信しますか?

RenderHtmlAsPdfPdfDocument オブジェクトを返すと、アプリケーションの種類に応じていくつかの配信オプションが利用できます。 ディスクに保存するのが最も簡単な方法であり、バックグラウンド バッチ ジョブに有効です。 Web API および MVC コントローラーの場合、バイトを HTTP 応答に直接ストリーミングすると、一時ファイルの書き込みが回避され、サーバーのファイルシステムがクリーンな状態に保たれます。

using IronPdf;
using Microsoft.AspNetCore.Mvc;

// In an ASP.NET Core controller action:
public IActionResult DownloadInvoice(int orderId)
{
    var renderer = new ChromePdfRenderer();
    var html     = BuildInvoiceHtml(orderId);   // your data-binding method
    var pdf      = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
}
using IronPdf;
using Microsoft.AspNetCore.Mvc;

// In an ASP.NET Core controller action:
public IActionResult DownloadInvoice(int orderId)
{
    var renderer = new ChromePdfRenderer();
    var html     = BuildInvoiceHtml(orderId);   // your data-binding method
    var pdf      = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

' In an ASP.NET Core controller action:
Public Function DownloadInvoice(orderId As Integer) As IActionResult
    Dim renderer = New ChromePdfRenderer()
    Dim html = BuildInvoiceHtml(orderId)   ' your data-binding method
    Dim pdf = renderer.RenderHtmlAsPdf(html)

    Return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf")
End Function
$vbLabelText   $csharpLabel

pdf.BinaryData は、生のバイトを byte[] として返します。これは、 ASP.NET Core の File() の結果に直接マップされます。 ブラウザは正しい MIME タイプ (application/pdf) を受信し、意味のあるファイル名を持つダウンロード ダイアログをトリガーします。

追加の出力機能には、 PDF の結合デジタル署名PDF/A アーカイブ形式、パスワード保護、テキストと画像の抽出などがあります。 これらの機能は、レンダラーによって返される同じ PdfDocument オブジェクトに対して動作するため、中間ファイルを作成せずに操作を連鎖させることができます。

 IronPDFを使用した.NETによる動的 PDF 生成: 画像 9 - ライセンス

次のステップは何ですか?

.NETでの動的な PDF 生成は、データに応じて変化する HTML 文字列、その文字列を PDF に変換するための ChromePdfRenderer、およびアプリケーションに適した配信メカニズムという 3 つの構成要素から構成されます。 IronPDF は、ページ区切り、ヘッダーとフッター、 JavaScript の実行、クロスプラットフォームの互換性など、すべてを処理します。

読み取りから構築に移行するには、まずパッケージをインストールし、上記の例のいずれかを自分のデータに対して実行します。

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

そこから、プラットフォーム固有のセットアップ (Azure、Docker、Linux)、高度なレンダリング オプション、完全な API リファレンスに関するIronPDF のドキュメントを参照してください。 展開の準備ができたら、ライセンス ページにアクセスして、生産量に適したプランを選択してください。 無料トライアルでは、クレジットカードを必要とせずフル機能にアクセスできるため、コミットする前に実装を検証できます。

動的生成と相性の良い追加ガイド:

 IronPDFを使用した.NETによる動的 PDF 生成: 画像 6 - クロスプラットフォーム互換性

 IronPDFを使用した.NETによる動的 PDF 生成: 画像 4 - インストール

よくある質問

ダイナミックPDF生成とは何ですか?

動的PDF生成とは、既存の静的テンプレートを使用するのではなく、リアルタイムのデータ入力に基づいてPDF文書をその場で作成することを指します。

.NETでのダイナミックPDF生成でIronPDFはどのように役立ちますか?

IronPDFは、開発者が複雑なPDFレンダリングよりもビジネスロジックに焦点を当て、HTMLや画像、その他のソースからPDFを作成できるようにすることで、ダイナミックPDF生成を簡素化します。

ダイナミックPDFの生成にIronPDFを使う利点は何ですか?

ダイナミックPDFにIronPDFを使用することで、パーソナライズ、リアルタイムのデータ統合、.NETアプリケーションから直接PDFドキュメントを作成する際の複雑さを軽減することができます。

Eコマースプラットフォームでパーソナライズされた請求書を作成するためにIronPDFを使用できますか?

IronPDFはリアルタイムのデータを統合することでパーソナライズされた請求書を動的に生成することができ、eコマースプラットフォームに最適です。

どのようなアプリケーションでダイナミックPDF生成のメリットがありますか?

eコマースプラットフォーム、レポートシステム、教育プラットフォームなどのアプリケーションは、カスタマイズされたリアルタイムのドキュメントを提供することで、ダイナミックPDF生成の恩恵を受けます。

IronPDFはリアルタイムデータのPDFレポート作成に適していますか?

IronPDFはリアルタイムにデータを取り込んでPDFレポートを生成するように設計されており、ダイナミックなドキュメント生成に最適です。

IronPDFはPDFレンダリングの複雑さをどのように処理していますか?

IronPDFは複雑なPDFレンダリングを抽象化し、開発者はアプリケーションのビジネスロジックに集中しながら高品質なPDFを作成することができます。

IronPDFは教育証明書を動的に作成できますか?

はい、IronPDFはパーソナライズされたプロフェッショナルな証明書を作成するために、データ入力を使用して教育証明書を動的に生成することができます。

IronPDFはHTMLコンテンツからのPDF作成をサポートしていますか?

IronPDFはHTMLコンテンツからのPDF作成をサポートし、開発者がウェブページやHTML文字列を直接PDFフォーマットに変換することを可能にします。

IronPDFは開発者の生産性をどのように向上させますか?

IronPDFはPDF生成のためのわかりやすいAPIを提供することで開発者の生産性を向上させ、ダイナミックドキュメントの作成に必要な時間と労力を削減します。

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

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

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

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね