IRONSOFTWAREHOME
IRONPDFの使用

ASP.NET MVC PDFビューアを作成する方法

Curtis Chau
Curtis Chau
Updated: 2026年4月23日

ASP.NETパネル コントロール内で PDF ドキュメントを表示することは、ドキュメント管理システム、レポート ビューアー、請求書表示などの一般的な要件です。 IronPDF は、クライアント側の依存関係を排除し、すべてのブラウザーとプラットフォームで一貫して動作するサーバー側レンダリングを通じてこの問題を解決します。

ASP.NET Core Web アプリケーション内に PDF を埋め込む必要がある場合、ブラウザー プラグインまたはクライアント側ライブラリに依存する標準的なアプローチでは脆弱性が生じます。 エンタープライズ環境でのプラグインの制限、ブラウザの動作の一貫性の欠如、モバイル サポートの不足などにより、ユーザー エクスペリエンスが損なわれます。 サーバー側のアプローチにより、これらの問題点がすべて解消されます。

IronPDF はPDF の生成と配信をすべてサーバー上で処理するため、ブラウザは正しい MIME タイプを持つ標準の PDF バイト ストリームを受信します。プラグインは必要なく、ブラウザ固有の回避策も必要ありません。

IronPDF C# PDFライブラリのホームページバナーには、HTML から PDF への変換、PDF 編集機能、デプロイメントオプション、無料トライアルオファーなどの主な機能が表示されています

ASP.NETでのサーバー側 PDF レンダリングはどのように機能しますか?

IronPDFは、PDF のレンダリングをヘッドレス Chrome エンジンを使用して完全にサーバーに移します。コントローラーがPDFドキュメントを生成または取得し、バイト配列に変換してinline Content-Dispositionヘッダーと共にブラウザにストリームします。 ブラウザの内蔵PDFビューアーは、そのドキュメントをパネルに埋め込まれた<iframe> 内に表示します。

この根本的な変化により、従来の問題点が解消されます。

  • クライアントマシンにAdobe Readerやブラウザ拡張機能は必要ありません
  • ユーザーのオペレーティング システムやブラウザのバージョンに関係なく、一貫したレンダリング
  • ドキュメントのコンテンツ、レイアウト、スタイルを完全にプログラムで制御
  • ITポリシーによってプラグインのインストールがブロックされるエンタープライズ環境でも動作します

ライブラリのChrome レンダリング エンジンは、 HTML、URL、および生のコンテンツ ソースからピクセル単位の完璧な出力を生成します。 PDF がクライアントに届く前に、用紙サイズ、余白、ヘッダー、フッター、CSS メディア タイプなど、出力のあらゆる側面を制御できます。

IronPDF は、Windows、Linux、macOS サーバーでのクロスプラットフォーム展開もサポートしているため、 AzureまたはAWSで実行されるクラウドホスト型ASP.NETアプリケーションや、 Dockerを使用したコンテナー化された環境にも適しています。

IronPDF機能の概要が4つの主要カテゴリで示されており、各カテゴリの下に詳細な機能リストがあります: PDFを作成する、PDFを変換する、PDFを編集する、PDFに署名し保護する

NuGetパッケージをどのようにセットアップしますか?

Visual Studio を開き、ソリューション エクスプローラーでプロジェクトを右クリックし、 NuGetパッケージの管理を選択します。 IronPdfを検索してインストールします。 または、パッケージ マネージャー コンソールで次のコマンドを実行します。

PM > Install-Package IronPdf

.NET CLIを使用してdotnet add package IronPdfを行うこともできます。 インストールが完了したら、ライブラリの名前空間にアクセスするため、using IronPdf;をコントローラまたはサービスクラスの上部に追加します。

最適なPDF配信のために、Program.csを設定して静的ファイルを提供し、ルーティングを設定してください:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();

var app = builder.Build();

app.UseStaticFiles();
app.UseRouting();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

AddControllersWithViews()登録により、APIエンドポイントとビューのレンダリングの両方が有効になり、専用のコントローラアクションを通じてPDFコンテンツを提供し、Razorビューのパネル内に表示することが求められます。 完全な構成の詳細については、 IronPDF API ドキュメントを参照してください。

PDF ファイルをパネル内に直接表示するにはどうすればよいですか?

コアパターンは簡単です:コントローラアクションがPDFを生成し、バイトに変換し、Content-Disposition ヘッダーをFile結果を返します。 Razorビューでの<iframe>は、そのエンドポイントを指し示します。

完全なコントローラーの実装は次のとおりです。

[ApiController]
[Route("api/[controller]")]
public class PdfPanelController : ControllerBase
{
    [HttpGet("display/{documentId}")]
    public IActionResult DisplayPdfInPanel(string documentId)
    {
        var renderer = new ChromePdfRenderer();

        string filename = $"document_{documentId}.pdf";

        var htmlContent = $@"
            <html>
            <head>
                <style>
                    body {{font-family: Arial, sans-serif; margin: 40px;}}
                    h1 {{color: #333;}}
                    .content {{line-height: 1.6;}}
                </style>
            </head>
            <body>
                <h1>Document #{documentId}</h1>
                <div class='content'>
                    <p>This PDF is generated dynamically and displayed inline in your panel.</p>
                    <p>Generated at: {DateTime.Now:yyyy-MM-dd HH:mm:ss}</p>
                </div>
            </body>
            </html>";

        using var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);

        byte[] pdfBytes = pdfDocument.BinaryData;

        Response.Headers.Append("Content-Disposition", $"inline; filename={filename}");

        return File(pdfBytes, "application/pdf");
    }
}
C#

ChromePdfRendererクラスは、サーバーサイドレンダリングの一次エントリポイントです。 それはHTMLコンテンツを受け入れ、ヘッドレスChromeブラウザを使って変換し、PdfDocumentオブジェクトを返します。 BinaryDataプロパティはストリーミング用の生のバイトを露出します。

パネル表示のためにContent-Dispositioninline に設定することが重要なステップです。 これがなければ、ブラウザは<iframe>内でのレンダリングの代わりにダウンロードを促します。 また、ヘッダーとフッターを追加したり、ページの向きカスタムマージンRenderingOptionsでコントロールすることもできます。

Razorパネルにこのエンドポイントを埋め込むには、コントローラーのルートを指す<iframe>を作成してください。

@page
@model IndexModel

<div class="container mt-4">
    <div class="card">
        <div class="card-header">
            <h3>PDF Display Panel</h3>
        </div>
        <div class="card-body">
            <div class="pdf-panel" style="height: 600px;">
                <iframe src="/api/PdfPanel/display/12345"
                        width="100%"
                        height="100%"
                        frameborder="0">
                </iframe>
            </div>
        </div>
    </div>
</div>

<iframe>は、コントローラのエンドポイントからのPDFを要求します。 そこからブラウザの組み込み PDF ビューアが引き継ぎ、クライアント側のライブラリやプラグインを使用せずに、ドキュメントをパネル全体の幅と高さで表示します。

生成されたPDFはどのように見えますか?

ASP.NETアプリケーションに埋め込まれたPDFビューアーを示すWebブラウザが#12345のドキュメントを表示し、生成されたタイムスタンプも示します

AJAX を使用して PDF を動的に読み込むにはどうすればよいでしょうか?

静的<iframe> ソースは固定コンテンツに最適ですが、多くのアプリケーションでは、データグリッドでのレコードのクリック、フォームの送信、またはレポートタイプの選択に基づいてPDFを読み込む必要があります。 AJAX を活用したアプローチでは、ページ全体を再読み込みすることなくこれらのシナリオを処理します。

コントローラー アクションはリクエスト ボディを受け入れ、PDF を base64 文字列として返します。

[HttpPost("generate")]
public async Task<IActionResult> GenerateDynamicPdf([FromBody] PdfRequestModel request)
{
    try
    {
        var renderer = new ChromePdfRenderer();

        renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        renderer.RenderingOptions.MarginLeft = 20;
        renderer.RenderingOptions.MarginRight = 20;

        var htmlBuilder = new StringBuilder();
        htmlBuilder.Append("<html><body>");
        htmlBuilder.Append($"<h2>{request.Title}</h2>");
        htmlBuilder.Append($"<div>{request.Content}</div>");

        if (request.IncludeData)
        {
            htmlBuilder.Append("<table border='1' style='width:100%;'>");
            foreach (var item in request.DataItems)
            {
                htmlBuilder.Append($"<tr><td>{item.Key}</td><td>{item.Value}</td></tr>");
            }
            htmlBuilder.Append("</table>");
        }

        htmlBuilder.Append("</body></html>");

        var pdfDocument = await Task.Run(() =>
            renderer.RenderHtmlAsPdf(htmlBuilder.ToString()));

        var base64Pdf = Convert.ToBase64String(pdfDocument.BinaryData);

        return Ok(new { success = true, pdfData = base64Pdf });
    }
    catch (Exception ex)
    {
        return BadRequest(new { success = false, error = ex.Message });
    }
}

RenderingOptionsブロックは、レンダリング前に用紙サイズ、マージン、およびCSSメディアタイプを構成させてくれます。 Microsoft のASP.NET Coreドキュメントによると、非同期パターンは負荷がかかった状態でも応答性の高いインターフェイスを維持するために不可欠です。 同期レンダリング呼び出しをTask.Runでラップすることで、ChromeエンジンがHTMLを処理する間、要求スレッドを空に保ちます。

base64応答は、JavaScriptクライアントがページをリロードすることなく、<iframe>ソースを直接更新させてくれます:

fetch('/api/PdfPanel/generate', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify(requestData)
})
.then(response => response.json())
.then(result => {
    if (result.success) {
        const iframe = document.getElementById('pdf-frame');
        iframe.src = 'data:application/pdf;base64,' + result.pdfData;
    }
});
JavaScript

このパターンはRazor PagesとMVCビューの両方に適しています。高度なユースケースの場合、IronPDFは非同期レンダリングもサポートしているため、Task.Runの代わりに直接使用できます。

さまざまな PDF ソース タイプをどのように処理しますか?

IronPDF は、HTML 文字列、ローカル HTML ファイル、外部 URL という 3 つの主要ソースから PDF を生成できます。 それぞれ異なるシナリオに適しています。

HTML テンプレートを PDF に変換するにはどうすればよいでしょうか?

テンプレートベースの生成は、エンタープライズASP.NETアプリケーションで最も一般的なパターンです。 プレースホルダー トークンを使用して HTML テンプレートを維持し、実行時にデータを挿入して、結果をレンダリングします。

[HttpGet("from-html")]
public IActionResult GenerateFromHtmlString(string reportType)
{
    var renderer = new ChromePdfRenderer();

    var htmlTemplate = GetHtmlTemplate(reportType);

    var userName = User?.Identity?.Name ?? "Unknown";

    var processedHtml = htmlTemplate
        .Replace("{{DATE}}", DateTime.Now.ToString("yyyy-MM-dd"))
        .Replace("{{USER}}", userName)
        .Replace("{{REPORT_TYPE}}", reportType);

    renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;

    using var pdf = renderer.RenderHtmlAsPdf(processedHtml);

    pdf.SaveAs(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", $"{reportType}.pdf"));

    return File(pdf.BinaryData, "application/pdf");
}

private string GetHtmlTemplate(string reportType)
{
    return @"
        <html>
        <head><title>{{REPORT_TYPE}} Report</title></head>
        <body>
            <h1>{{REPORT_TYPE}} Report</h1>
            <p>Date: {{DATE}}</p>
            <p>User: {{USER}}</p>
            <div>Report content goes here.</div>
        </body>
        </html>";
}

CssMediaType.PrintはPDFが印刷専用のCSSルールを使うことを保証します。これにより、通常はナビゲーションバー、サイドバー、その他の画面専用の要素が削除されます。 これにより、HTML テンプレートが Web ビューと PDF 生成間で共有されるときに、よりクリーンな出力が生成されます。 ブランド化のためにカスタムの透かしや背景画像を適用することもできます。 複雑なレイアウトの場合、改ページコントロールを使用すると、新しいページがどこから始まるかを正確に指定できます。

HTML テンプレートの PDF 出力はどのようになりますか?

クロスハッチパターンの背景に対してウォーターマーク されたhtmltopdfレポートを表示するPDFビューアーで、日付2025-11-18と 'User: Unknown'のテキストが見えます

外部 URL から PDF を生成するにはどうすればよいでしょうか?

競合他社の分析、規制関連の提出書類、サードパーティのサービスからのコンテンツなど、外部の Web ページをキャプチャする場合、 IronPDF は公開されている URL をレンダリングできます。

[HttpGet("from-url")]
public async Task<IActionResult> GenerateFromUrl(string encodedUrl)
{
    var url = HttpUtility.UrlDecode(encodedUrl);

    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.ViewPortWidth = 1920;
    renderer.RenderingOptions.EnableJavaScript = true;
    renderer.RenderingOptions.WaitFor.RenderDelay(2000);

    using var pdf = await renderer.RenderUrlAsPdfAsync(url);

    Response.Headers.Append("Content-Disposition", "inline; filename=webpage.pdf");

    return File(pdf.BinaryData, "application/pdf");
}

ViewPortWidth設定は、PDFに変換する前にヘッドレスブラウザがページをどのくらいの広さでレンダリングするかを決定します。 1920 ピクセルのビューポートは、デスクトップ解像度で最新のレスポンシブ レイアウトをキャプチャします。 レンダリング遅延により、スクリーンショットが撮られる前に、JavaScript を多用するシングルページ アプリケーションに初期化を完了する時間が与えられます。

より高度なキャプチャ シナリオの場合、 IronPDF はJavaScript実行制御、認証されたページへのCookie の受け渡しビューポートのズーム調整をサポートします。

メモリとパフォーマンスをどのように管理しますか?

PDFの生成はリソースを大量に消費します。PdfDocumentオブジェクトはメモリにレンダリングされたバイトを保持します。 適切な廃棄により、リソースのリークを防ぎ、負荷がかかった状態でもメモリ消費を予測可能に保つことができます。

常にPdfDocumentで使用してください:

public IActionResult OptimizedPdfGeneration()
{
    var renderer = new ChromePdfRenderer();
    renderer.RenderingOptions.CreatePdfFormsFromHtml = false;

    var processedHtml = GetHtmlTemplate("report")
        .Replace("{{DATE}}", DateTime.Now.ToString("yyyy-MM-dd"))
        .Replace("{{USER}}", "Test")
        .Replace("{{REPORT_TYPE}}", "Report");

    using var pdf = renderer.RenderHtmlAsPdf(processedHtml);

    byte[] pdfBytes = pdf.BinaryData;
    pdf.SaveAs("output.pdf");

    return File(pdfBytes, "application/pdf");
}

PdfDocumentオブジェクトが直ちに破棄されることを保証します。 PDF を頻繁に生成するアプリケーションの場合は、次の追加戦略を検討してください。

-キャッシュ: 頻繁に要求される PDF をメモリ キャッシュまたはディスクに保存します。 IMemoryCacheを使用して、ドキュメント識別子とタイムスタンプをキーとしてバイト配列をキャッシュします。 -ストリーミング: 非常に大きなドキュメントの場合、大きな連続したメモリ ブロックの割り当てを回避するために、バイト配列ではなくPDF メモリ ストリームを使用します。 -線形化:線形化された (高速 Web ビュー) 出力を有効にして、ファイル全体がダウンロードされる前にブラウザーがレンダリングを開始できるようにします。 -圧縮: 制約のあるネットワーク接続を介してドキュメントを提供するときに、 PDF 圧縮を適用してファイル サイズを縮小します。

IronPDFパフォーマンス ガイドでは、高スループット シナリオ向けの追加の最適化戦略について説明します。

最適化された PDF 出力では何が生成されますか?

"改善レポート"とユーザー"テスト"を表示するPDF文書ビューアーで、2025-11-18の日付が100%のズームでIron Softwareのウォーターマークと共に表示されます

セキュリティとブラウザ間の互換性をどのように確保しますか?

PDF パネル ディスプレイを本番環境に導入する前に、セキュリティと信頼性の両方に注意を払う必要があります。

入力検証: 動的コンテンツを HTML テンプレートに挿入する前に、必ずサニタイズします。 Chrome エンジンを通じてレンダリングされたサニタイズされていないユーザー入力により、サーバーが SSRF 攻撃や XSS 攻撃にさらされる可能性があります。 確立された HTML エンコーディング ライブラリを使用するか、受け入れられる文字を安全な許可リストに制限します。

アクセス制御:認証および承認ミドルウェアの背後で PDF エンドポイントを保護します。 呼び出し側の身元を確認せずにドキュメントを返す/api/PdfPanel/display/12345のようなURLは、データ露出のリスクがあります。 [Authorize]属性を適用し、認証されたユーザーが要求されたドキュメントIDにアクセスする権限があることを確認してください。

MIME タイプの構成: 常にapplication/pdfをコンテンツタイプとして返します。 不正なMIMEタイプを受信したブラウザはダイアログをトリガーするか、インラインでのレンダリングを拒否する可能性があります。静的PDFファイルをwwwrootからも提供している場合は、アプリケーションのMIMEタイプマッピングにPDFが含まれていることを確認してください。

クロスブラウザーのインライン表示: モダンブラウザー -- Chrome, Firefox, Edge, Safari -- はすべてContent-Disposition: inlineヘッダーを介してインラインPDF表示をサポートしています。 W3C コンテンツ セキュリティ ポリシー仕様では、パネルに異なるオリジンの PDF を埋め込む場合の frame-ancestors ディレクティブに関するガイダンスが提供されています。 IronPDF のサーバー側レンダリングでは、PDF 生成がクライアントとは独立して行われるため、ほとんどのブラウザ レンダリングの不整合が解消されます。

エラー処理: PDF 生成を try-catch ブロックでラップし、意味のある HTTP ステータス コードを返します。 本文のない 500 応答は診断が困難です。 構造化されたエラーオブジェクトを返し、クライアントサイドコードが壊れた<iframe>の代わりにユーザーフレンドリーなメッセージを表示できるようにします。

ドキュメントのセキュリティについては、 IronPDF はパスワード保護と権限デジタル署名、およびアーカイブ要件に対するPDF/A 準拠をサポートしています。

IronPDFのクロスプラットフォームサポート図が.NETバージョン、オペレーティングシステム、開発環境、およびC#, F#, VB.NET, Java, Node.js, Pythonを含むプログラミング言語との互換性を示しています

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

あなたは現在、ASP.NETパネルでPDFを表示するための作業パターンを持っています: IronPDFをインストールし、PDFを生成し<iframe>にエンドポイントを埋め込みます。 そこから、AJAX パターンを使用すると、ページを再読み込みせずに、ユーザーのアクションに応じてドキュメントを動的に読み込むことができます。

これらのパターンを独自のプロジェクトでテストするには、 IronPDFの無料トライアルを開始してください。クレジットカードは必要ありません。 試用版には、HTML から PDF へのレンダリング、URL キャプチャ、高度な PDF 操作など、すべての機能へのフルアクセスが含まれています。

基本的な表示が機能したら、次のような自然な拡張を検討してください。

IronPDF のドキュメントでは、完全なコード例と構成リファレンスとともに、これらの各機能について詳細に説明しています。

Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

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

制限なし。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日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。