IRONSOFTWAREHOME
IRONPDFの使用

ASP.NET C#でIronPDFを使用してPDFを作成する方法

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

ASP.NET Coreで PDF ファイルをアップロードおよびダウンロードするには、バイナリ データの処理、コントローラー アクションの管理、およびオプションで保存または配信前にサーバー側でドキュメントを処理することが必要です。 IronPDFを使えば、透かしの適用、HTML からの PDF 生成、処理済みのドキュメントのユーザーへの返却など、単なるファイル保存にとどまらない機能をすべて既存の MVC パイプライン内で実現できます。このガイドでは、 .NET 10 を使用して C# で完全なアップロード・ダウンロードワークフローを構築する手順を、各ステップごとに解説します。

ASP.NET CoreプロジェクトにIronPDFをインストールするにはどうすればよいでしょうか?

アップロードまたはダウンロード ロジックを記述する前に、 NuGetパッケージ マネージャーまたは.NET CLI を使用してIronPDF をプロジェクトに追加します。 パッケージマネージャーコンソールでInstall-Package IronPdfを使用するか、以下のCLIコマンドを実行して新しいMVCプロジェクトをスキャフォールドし、すべての必要なパッケージを一度に追加します。

dotnet new mvc -n PdfManager --framework net10.0
cd PdfManager
dotnet add package IronPdf
dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
SHELL

インストールが完了すると、IronPDFはPdfDocumentを使って既存のファイルを読み込み、操作する機能を提供し、ウォーターマーク、スタンプ、デジタル署名を含む編集ツールの範囲を提供します。 バージョン履歴や互換性に関する注意事項については、IronPDF NuGet パッケージページをご覧ください。

プロジェクトのセットアップ

ApplicationDbContextを登録してください。 プロジェクト構造には、PDF特有のロジックを書く前に、Data/ApplicationDbContext.csが含まれます。

PDF ストレージ用のデータベース モデルを作成するにはどうすればよいですか?

あらゆる PDF アップロード システムの基盤は、データベース テーブルにマップされるモデル クラスです。 次の C# レコードは、ファイル名、コンテンツ タイプ、生のバイナリ データ、アップロードのタイムスタンプなどの重要なフィールドをキャプチャします。

public class PdfFileModel
{
    public int Id { get; set; }
    public string FileName { get; set; } = string.Empty;
    public string ContentType { get; set; } = "application/pdf";
    public byte[] FileData { get; set; } = Array.Empty<byte>();
    public DateTime UploadedDate { get; set; } = DateTime.UtcNow;
}

FileDataはPDFをバイナリ大規模オブジェクト(BLOB)として保存します。 このアプローチにより、ドキュメントがデータベース内に自己完結的になるため、バックアップが簡単になり、クエリが簡単になります。 大量のシナリオや大きなファイルの場合は、ファイル パスのみをデータベースに保存し、バイナリをAzure Blob StorageAmazon S3などのクラウド ストレージ バケットに書き込むことを検討してください。

Entity Framework Core の構成

EF Coreにモデルを登録するために、DbSet<PdfFileModel>プロパティを追加します。

using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options) { }

    public DbSet<PdfFileModel> PdfFiles { get; set; }
}

スキーマを作成するために、dotnet ef database updateを実行します。 Entity Framework Coreはbyte[]をSQL ServerのBLOB列に自動でマッピングします - 手動でのSQLは不要です。

ASP.NET Coreコントローラーで PDF ファイルをアップロードするにはどうすればよいですか?

アップロードを処理するコントローラーアクションは、IFormFileパラメーターを受け取ります。 アクションはストリームをMemoryStreamに読み込み、バイト配列に変換し、Entity Framework Coreを通じて結果を保存します。

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

public class PdfController : Controller
{
    private readonly ApplicationDbContext _context;

    public PdfController(ApplicationDbContext context)
    {
        _context = context;
    }

    [HttpPost]
    public async Task<IActionResult> Upload(IFormFile file)
    {
        if (file is null || file.Length == 0)
            return BadRequest("No file selected.");

        if (!file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase))
            return BadRequest("Only PDF files are accepted.");

        using var stream = new MemoryStream();
        await file.CopyToAsync(stream);

        var pdfFile = new PdfFileModel
        {
            FileName = Path.GetFileName(file.FileName),
            ContentType = file.ContentType,
            FileData = stream.ToArray(),
            UploadedDate = DateTime.UtcNow
        };

        _context.PdfFiles.Add(pdfFile);
        await _context.SaveChangesAsync();

        return RedirectToAction(nameof(Index));
    }

    public async Task<IActionResult> Index()
    {
        var files = await _context.PdfFiles
            .Select(f => new { f.Id, f.FileName, f.UploadedDate })
            .ToListAsync();
        return View(files);
    }
}

アップロードされたファイルの検証

処理する前に必ずコンテンツ タイプを検証してください。 file.ContentTypeを確認することで、ユーザーが誤って非PDFコンテンツをアップロードすることを防ぎます。 より強力なバリデーションのために、ストリームの最初の4バイトを読み取り、PDFマジックナンバー(%PDF)を確認します。 ストリームをコピーする前にfile.Lengthをチェックすることで、最大ファイルサイズを制限します - 一般的なドキュメントワークフローでは通常10 MBです。

このアクションをトリガーするHTMLフォームには、enctype="multipart/form-data"という2つの属性が必要です。 エンコード タイプがない場合、ブラウザはファイル名をバイナリ コンテンツではなくプレーン テキストとして送信します。 フォームタグ内に/Pdf/Uploadに向けたサブミットボタンを追加します。

ASP .NET C#でIronPDFを使用してPDFファイルをアップロードおよびダウンロードする方法: イメージ1 - アップロードされたPDFを表示するUI

アップロードした PDF を保存する前に透かしを追加するにはどうすればよいですか?

保存前にサーバー側でファイルを処理することは、 IronPDF の透かし機能の最も実用的な使用法の 1 つです。 バイトがデータベースに到達する前に、すべての受信ドキュメントに"機密"ラベル、会社ロゴ、または"ドラフト"通知をスタンプすることができます。

[HttpPost]
public async Task<IActionResult> UploadWithWatermark(IFormFile file)
{
    if (file is null || file.Length == 0)
        return BadRequest("No file selected.");

    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    byte[] originalBytes = stream.ToArray();

    // Load the uploaded file into IronPDF
    var pdf = new IronPdf.PdfDocument(originalBytes);

    // Apply an HTML watermark centered on every page
    pdf.ApplyWatermark(
        "<h2 style='color:red;opacity:0.4'>CONFIDENTIAL</h2>",
        rotation: 45,
        opacity: 60,
        verticalAlignment: IronPdf.Editing.VerticalAlignment.Middle,
        horizontalAlignment: IronPdf.Editing.HorizontalAlignment.Center
    );

    var pdfFile = new PdfFileModel
    {
        FileName = Path.GetFileName(file.FileName),
        ContentType = "application/pdf",
        FileData = pdf.BinaryData,
        UploadedDate = DateTime.UtcNow
    };

    _context.PdfFiles.Add(pdfFile);
    await _context.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
}

透かしの設定オプション

IronPDFのApplyWatermarkメソッドはHTML文字列を受け入れます。つまり、ウォーターマークは有効なHTMLとインラインCSSを含むことができ、グラデーション、カスタムフォント、回転したテキスト、または埋め込まれたSVGアイコンも含めることができます。 opacityは透明度を0(見えない)から100(完全に不透明)まで制御します。

ウォーターマークに加えて、同じPdfDocumentオブジェクトはヘッダーとフッターの追加画像のスタンプ、および既存のフォームフィールドの編集のためのメソッドを公開しています。 複数の処理手順をチェーンして、最終的なバイト配列を取得するためにpdf.BinaryDataを呼び出します。

ASP .NET C#でIronPDFを使用してPDFファイルをアップロードおよびダウンロードする方法: イメージ2 - ウォーターマークを付けてデータベースに保存したPDF

データベースに保存されている PDF ファイルをダウンロードするにはどうすればよいでしょうか?

保存されたPDFをブラウザに戻すには、IDでレコードを取得し、FileResultを返します。 ASP.NET CoreのContent-Typeヘッダーを設定し、元のファイル名でブラウザのダウンロードダイアログをトリガーします。

public async Task<IActionResult> Download(int id)
{
    var pdfFile = await _context.PdfFiles.FindAsync(id);

    if (pdfFile is null)
        return NotFound();

    return File(pdfFile.FileData, pdfFile.ContentType, pdfFile.FileName);
}

ビューにダウンロードリストを表示する

Indexアクションは、保存されているすべてのファイルレコードを取得し、それらをRazorビューに渡します。 シンプルな HTML テーブルに、各レコードのファイル名、アップロード日、ダウンロード アンカーが表示されます。

<table class="content__data-table" data-content-table>
    <caption>Uploaded PDF Files</caption>
    <thead>
        <tr>
            <th>File Name</th>
            <th>Uploaded</th>
            <th>Action</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>@item.FileName</td>
                <td>@item.UploadedDate.ToString("yyyy-MM-dd HH:mm")</td>
                <td><a href="/Pdf/Download/@item.Id">Download</a></td>
            </tr>
        }
    </tbody>
</table>

Content-Type: application/pdfContent-Disposition: attachment; filename="..." ヘッダー。 ブラウザがダウンロードを促す代わりにPDFをインラインで開くようにする場合は、return File(bytes, contentType)を第3引数なしで使用します - この場合はContent-Disposition: attachment命令が省略されます。

ASP .NET C#でIronPDFを使用してPDFファイルをアップロードおよびダウンロードする方法: イメージ3 - 保存されているPDFファイルの一覧

代替手段としてのファイルシステムストレージ

大規模な展開の場合、生のバイナリ データをデータベースに保存すると行のサイズが大きくなり、クエリの速度が遅くなる可能性があります。 別の方法としては、ファイルをディスク上のディレクトリ (またはクラウド プロバイダー) に書き込み、相対パスのみをデータベースに保存する方法があります。 アップロード時にSystem.IO.File.WriteAllBytesAsync(path, bytes)で書き込みます。 両方のパスはコントローラの同じreturn File(...)呼び出しに収束します。

オンデマンドで PDF ドキュメントを生成し、ダウンロード用に提供するにはどうすればよいですか?

事前に保存されたファイルの提供に限定されません。 IronPDF の HTML から PDF への変換を使用すると、リクエスト時にデータから動的にドキュメントを生成できます。これは、請求書、レポート、証明書、データのエクスポートに役立ちます。

public IActionResult GenerateInvoice(int orderId)
{
    // Build HTML content from your data model
    string html = $@"
        <html>
        <body style='font-family: Arial, sans-serif; padding: 40px;'>
            <h1>Invoice #{orderId}</h1>
            <p>Generated: {DateTime.UtcNow:yyyy-MM-dd HH:mm} UTC</p>
            <table border='1' cellpadding='8'>
                <tr><th>Item</th><th>Qty</th><th>Price</th></tr>
                <tr><td>IronPDF License</td><td>1</td><td>$999</td></tr>
            </table>
        </body>
        </html>";

    var renderer = new IronPdf.ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf");
}
C#

オンデマンド PDF のレンダリング オプション

ChromePdfRendererは、Google Chromeを駆動するのと同じChromiumレンダリングエンジンを使用してピクセル精度の出力を生成します。 つまり、ブラウザで表示できるすべての CSS (フレックスボックス レイアウト、グリッド、カスタム フォント、SVG チャート) が、生成された PDF で正しくレンダリングされます。 紙サイズ、マージン、方向をRenderingOptionsプロパティを介して設定できます。

より複雑なドキュメントの場合、HTML文字列の代わりに完全なURLをRenderUrlAsPdfに渡します。 IronPDF は、ヘッドレス ブラウザでページを読み込み、 JavaScriptを実行し、スタイルを適用し、完全にレンダリングされた DOM を PDF に変換します。 カスタム ヘッダー、フッター、ページ番号トークンなどのレンダリング オプションの完全なセットについては、 HTML から PDF への変換ガイドを確認してください。

ASP .NET C#でIronPDFを使用してPDFファイルをアップロードおよびダウンロードする方法: イメージ4 - 生成されたサンプルPDF

ASP.NET Coreで複数の PDF ファイルを結合するにはどうすればよいですか?

単一ファイルの操作だけでなく、アップロードされた複数のドキュメントを 1 つに結合する必要がある場合もあります。 IronPDFのPDFマージ機能は、PdfDocumentオブジェクトのリストを受け取り、単一のマージされたファイルを返します。

public async Task<IActionResult> MergeAll()
{
    var allFiles = await _context.PdfFiles.ToListAsync();

    if (allFiles.Count < 2)
        return BadRequest("At least two files are required for merging.");

    var documents = allFiles
        .Select(f => new IronPdf.PdfDocument(f.FileData))
        .ToList();

    using var merged = IronPdf.PdfDocument.Merge(documents);

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

PDFからページを分割する

逆操作 - ページの一部を抽出 - ではCopyPagesを使用します。 FileResultとして返します。 このパターンは、ページ区切りのプレビュー、複数セクションのレポートの分割、サムネイル生成のための表紙の抽出に役立ちます。 結合または分割された出力をユーザーに提供する前に、デジタル署名を適用することもできます。

大容量ファイルのアップロードを安全に処理するにはどうすればよいでしょうか?

大きな PDF ファイルの場合は、ASP.NET Coreミドルウェア レベルで追加の構成が必要です。 デフォルトでは、リクエスト本体のサイズ制限は約 28 MB に設定されています。 引き上げるには、Limits.MaxRequestBodySizeを設定します - 両方を希望のバイト数、例えば50 MBの場合は50 * 1024 * 1024に設定します - builder.Build()の前に行います。

サイズ制限を超えて、すべてのアップロードエンドポイントに以下のセキュリティプラクティスを適用してください:コンテンツタイプヘッダーの検証、ストリームの最初のバイトを%PDFマジックナンバーで確認、IronPDFのドキュメント検査APIを使用して埋め込みスクリプトをスキャン、処理されたファイルをウェブルートの外に保存して、静的コンテンツとして直接提供されないようにします。 ASP.NET Core のセキュリティ ドキュメントでは、偽造防止トークンの検証やウイルス スキャンの統合などの追加の強化手法について説明しています。

メモリ不足を回避するための大容量ファイルのストリーミング

ファイルが10MBを超える場合、処理する前にストリーム全体をMemoryStreamに読み込むと、メモリ使用量が大幅に増加する可能性があります。 可能であれば、リクエストストリームから直接ロードするためにIronPdf.PdfDocument.FromStreamを使用するか、一時的なファイルパスに書き込んでディスクからロードしてください。

string tempPath = Path.GetTempFileName();
await using (var fs = System.IO.File.Create(tempPath))
{
    await file.CopyToAsync(fs);
}

using var pdf = new IronPdf.PdfDocument(tempPath);
// process...
System.IO.File.Delete(tempPath);

このパターンはヒープ割り当てを低く抑え、HTTP 応答が送信された後にファイルが非同期的に処理されるバックグラウンド処理キューに適しています。 追加の非同期処理パターンについては、 IronPDF のドキュメントを参照してください。

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

これで、 IronPDFを利用したASP.NET Core MVC アプリケーションで PDF ファイルをアップロード、処理、保存、ダウンロードするための完全な基盤が完成しました。 ここから、ワークフローを拡張するための次の方向性を検討してください。

処理機能を拡張します。IronPDFは、 PDF フォームフィールドの入力と読み取りPDF テキスト抽出 APIを使用したテキストと画像の抽出、 PDF ページをサムネイルプレビュー用の画像に変換する機能をサポートしています。 これらの各機能は、上記に示した同じコントローラー パターンに統合されます。

**デジタル署名を追加します。**生成またはアップロードされたすべてのドキュメントは、保存する前に X.509 証明書を使用してデジタル署名で署名します。 署名された PDF には、多くのコンプライアンス要件を満たす改ざん防止メタデータが含まれます。

ストレージをクラウドにスケールします。 Azure Blob StorageまたはAmazon S3参照でローカルbyte[]データベース列を置き換えます。 処理済みのバイトを透かし入れ後にクラウド ストレージにアップロードし、URI のみをデータベースに保存します。これにより、データベースの行サイズが大幅に削減され、CDN 配信が可能になります。

無料トライアルを始めましょう。IronPDFのトライアルライセンスページにアクセスして、全機能にアクセスできる 30 日間の評価キーを入手してください。 また、完全なIronPDF機能の概要を参照して、 .NETアプリケーションで利用できる PDF 機能の全範囲を理解したり、実稼働展開の準備ができたら価格とライセンスのページを参照したりすることもできます。

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