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

ASP.NET CoreでC#を使ってPDFファイルをアップロードおよびダウンロードする方法

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
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をインストールすると、HTMLからPDFを生成するためのChromePdfRenderer、既存のファイルを読み込んで操作するためのPdfDocument、透かし、スタンプ、電子署名を含むさまざまな編集ツールにアクセスできるようになります。 バージョン履歴や互換性に関する注意事項については、IronPDF NuGet パッケージページをご覧ください。

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

ストレージ・パス定数をProgram.csに追加し、依存性注入コンテナにApplicationDbContextを登録してください。 あなたのプロジェクト構造には、PDF固有のロジックを書く前に、@@--CODE-1695--@、@@--CODE-1696--@、@@--CODE-1697--@が含まれます。

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;
}
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;
}
Public Class PdfFileModel
    Public Property Id As Integer
    Public Property FileName As String = String.Empty
    Public Property ContentType As String = "application/pdf"
    Public Property FileData As Byte() = Array.Empty(Of Byte)()
    Public Property UploadedDate As DateTime = DateTime.UtcNow
End Class
$vbLabelText   $csharpLabel

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

Entity Framework Core の構成

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

using Microsoft.EntityFrameworkCore;

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

    public DbSet<PdfFileModel> PdfFiles { get; set; }
}
using Microsoft.EntityFrameworkCore;

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

    public DbSet<PdfFileModel> PdfFiles { get; set; }
}
Imports Microsoft.EntityFrameworkCore

Public Class ApplicationDbContext
    Inherits DbContext

    Public Sub New(options As DbContextOptions(Of ApplicationDbContext))
        MyBase.New(options)
    End Sub

    Public Property PdfFiles As DbSet(Of PdfFileModel)
End Class
$vbLabelText   $csharpLabel

CODE-1701--@@の後に@@--CODE-1702--@を実行してスキーマを作成してください。 Entity Framework Coreは、byte[]をSQL Serverのvarbinary(max)カラムまたはSQLiteの@@--CODE-1705--@カラムに自動的にマッピングします。

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

アップロードを処理するコントローラアクションは、HTMLフォームから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);
    }
}
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);
    }
}
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.EntityFrameworkCore
Imports System.IO
Imports System.Threading.Tasks

Public Class PdfController
    Inherits Controller

    Private ReadOnly _context As ApplicationDbContext

    Public Sub New(context As ApplicationDbContext)
        _context = context
    End Sub

    <HttpPost>
    Public Async Function Upload(file As IFormFile) As Task(Of IActionResult)
        If file Is Nothing OrElse file.Length = 0 Then
            Return BadRequest("No file selected.")
        End If

        If Not file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase) Then
            Return BadRequest("Only PDF files are accepted.")
        End If

        Using stream As New MemoryStream()
            Await file.CopyToAsync(stream)

            Dim pdfFile As New PdfFileModel With {
                .FileName = Path.GetFileName(file.FileName),
                .ContentType = file.ContentType,
                .FileData = stream.ToArray(),
                .UploadedDate = DateTime.UtcNow
            }

            _context.PdfFiles.Add(pdfFile)
            Await _context.SaveChangesAsync()
        End Using

        Return RedirectToAction(NameOf(Index))
    End Function

    Public Async Function Index() As Task(Of IActionResult)
        Dim files = Await _context.PdfFiles _
            .Select(Function(f) New With {f.Id, f.FileName, f.UploadedDate}) _
            .ToListAsync()
        Return View(files)
    End Function
End Class
$vbLabelText   $csharpLabel

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

処理する前に必ずコンテンツ タイプを検証してください。 CODE-1709をチェックすることで、ユーザーが誤ってPDF以外のコンテンツをアップロードすることを防ぎます。 検証を強化す る には、 ス ト リ ームの先頭 4 バ イ ト を読み込んで、 PDF マ ジ ッ ク ナンバー (@--CODE-1710--@@) を検証 し ます。 また、ストリームをコピーする前にfile.Lengthをチェックすることによって、最大ファイルサイズ--一般的なドキュメントワークフローでは通常10MB--を強制する必要があります。

このアクションのトリガーとなるHTMLフォームには、2つの属性が必要です:CODE-1712--@@とenctype="multipart/form-data"です。 エンコード タイプがない場合、ブラウザはファイル名をバイナリ コンテンツではなくプレーン テキストとして送信します。 formタグの中に<input type="file" name="file" accept=".pdf" />要素を追加し、/Pdf/Uploadを指す送信ボタンを追加してください。

How to Upload and Download PDF Files in ASP .NET C# with IronPDF:画像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));
}
[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));
}
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

<HttpPost>
Public Async Function UploadWithWatermark(file As IFormFile) As Task(Of IActionResult)
    If file Is Nothing OrElse file.Length = 0 Then
        Return BadRequest("No file selected.")
    End If

    Using stream As New MemoryStream()
        Await file.CopyToAsync(stream)
        Dim originalBytes As Byte() = stream.ToArray()

        ' Load the uploaded file into IronPDF
        Dim 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
        )

        Dim pdfFile As New PdfFileModel With {
            .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))
    End Using
End Function
$vbLabelText   $csharpLabel

透かしの設定オプション

IronPdfのApplyWatermarkメソッドはHTML文字列を受け付けます。つまり、透かしには有効なHTMLとインラインCSS、グラデーション、カスタムフォント、回転テキスト、埋め込みSVGアイコンを含めることができます。 CODE-1717--@@パラメータは、透かしをページの対角線上で回転させ、opacityパラメータは、透明度を0(不可視)から100(完全不透明)まで制御します。

透かし以外にも、同じPdfDocumentオブジェクトは、ヘッダーとフッターの追加画像のスタンプ既存のフォームフィールドの編集のためのメソッドを公開しています。 最終的なバイト配列を取得するためにpdf.BinaryDataを呼び出す前に、複数の処理ステップを連鎖させることができます。

How to Upload and Download PDF Files in ASP .NET C# with IronPDF:画像2 - PDFに透かしを入れてデータベースに保存する

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

格納されたPDFをブラウザに返すには、IDによってレコードを取り出し、FileResultを返します。 .NET CoreのFileヘルパーメソッドは、正しい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);
}
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);
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

Public Async Function Download(id As Integer) As Task(Of IActionResult)
    Dim pdfFile = Await _context.PdfFiles.FindAsync(id)

    If pdfFile Is Nothing Then
        Return NotFound()
    End If

    Return File(pdfFile.FileData, pdfFile.ContentType, pdfFile.FileName)
End Function
$vbLabelText   $csharpLabel

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

CODE-1724--@@ アクションは、保存されているすべてのファイルレコードを取得し、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>
<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>
$vbLabelText   $csharpLabel

CODE-1725--@オーバーロードは、@@--CODE-1726--@とContent-Disposition: attachment.Content-Disposition'の両方を設定します; filename="..." ヘッダー。 ブラウザに、ダウンロードを促す代わりに、PDFをインラインで開かせたい場合は、@@--CODE-1727--@を第3引数なしで使ってください--これは、@@--CODE-1728--@命令を省略します。

How to Upload and Download PDF Files in ASP .NET C# with IronPDF:画像3 - 保存されているPDFファイルのリスト

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

大規模な展開の場合、生のバイナリ データをデータベースに保存すると行のサイズが大きくなり、クエリの速度が遅くなる可能性があります。 別の方法としては、ファイルをディスク上のディレクトリ (またはクラウド プロバイダー) に書き込み、相対パスのみをデータベースに保存する方法があります。 アップロード中は@@--CODE-1729--@を@@--CODE-1730--@に置き換え、@@--CODE-1731--@と書き、ダウンロード中は@@--CODE-1732--@と読んでください。 どちらのパスも、コントローラ内の同じ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>$749</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");
}
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>$749</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");
}
Imports System
Imports Microsoft.AspNetCore.Mvc
Imports IronPdf

Public Class InvoiceController
    Inherits Controller

    Public Function GenerateInvoice(orderId As Integer) As IActionResult
        ' Build HTML content from your data model
        Dim html As String = $"
            <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>$749</td></tr>
                </table>
            </body>
            </html>"

        Dim renderer As New ChromePdfRenderer()
        Using pdf = renderer.RenderHtmlAsPdf(html)
            Return File(pdf.BinaryData, "application/pdf", $"invoice-{orderId}.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

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

Google Chromeと同じChromiumレンダリングエンジンを使用して、ピクセル精度の高い出力を生成します。 つまり、ブラウザで表示できるすべての CSS (フレックスボックス レイアウト、グリッド、カスタム フォント、SVG チャート) が、生成された PDF で正しくレンダリングされます。 CODE-1736--@@を呼び出す前に、@@--CODE-1735--@プロパティを通して用紙サイズ、余白、向きを設定することができます。

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

How to Upload and Download PDF Files in ASP .NET C# with IronPDF:画像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");
}
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");
}
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Mvc

Public Async Function MergeAll() As Task(Of IActionResult)
    Dim allFiles = Await _context.PdfFiles.ToListAsync()

    If allFiles.Count < 2 Then
        Return BadRequest("At least two files are required for merging.")
    End If

    Dim documents = allFiles _
        .Select(Function(f) New IronPdf.PdfDocument(f.FileData)) _
        .ToList()

    Using merged = IronPdf.PdfDocument.Merge(documents)
        Return File(merged.BinaryData, "application/pdf", "merged.pdf")
    End Using
End Function
$vbLabelText   $csharpLabel

PDFからページを分割する

逆方向の操作--ページのサブセットの抽出--は、CopyPagesを使用します。 格納されたバイトからPdfDocumentをロードし、@@--CODE-1741--@をゼロベースのページ・インデックスで呼び出し、結果の@@--CODE-1742--@を@@--CODE-1743--@として返す。 このパターンは、ページ区切りのプレビュー、複数セクションのレポートの分割、サムネイル生成のための表紙の抽出に役立ちます。 結合または分割された出力をユーザーに提供する前に、デジタル署名を適用することもできます。

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

大きな PDF ファイルの場合は、ASP.NET Coreミドルウェア レベルで追加の構成が必要です。 デフォルトでは、リクエスト本体のサイズ制限は約 28 MB に設定されています。 これを上げるには、@@--CODE-1744--@を呼び出して@@--CODE-1745--@を設定し、@@--CODE-1746--@を呼び出して@@--CODE-1747--@を設定する--どちらも希望のバイト数、たとえば50MBの場合は@@--CODE-1748--@に設定する--@@--CODE-1749--@で@@--CODE-1750--@の前に@@--CODE-1749--@を設定する。

コンテンツタイプヘッダーを検証し、ストリームの最初のバイトで%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);
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);
Imports System.IO
Imports IronPdf

Dim tempPath As String = Path.GetTempFileName()

Using fs As FileStream = System.IO.File.Create(tempPath)
    Await file.CopyToAsync(fs)
End Using

Using pdf As PdfDocument = New IronPdf.PdfDocument(tempPath)
    ' process...
End Using

System.IO.File.Delete(tempPath)
$vbLabelText   $csharpLabel

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

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

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

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

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

Scale storage to the cloud.ローカルの@--CODE-1754--@@データベースの列をAzure Blob StorageまたはAmazon S3の参照に置き換えてください。 処理済みのバイトを透かし入れ後にクラウド ストレージにアップロードし、URI のみをデータベースに保存します。これにより、データベースの行サイズが大幅に削減され、CDN 配信が可能になります。

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

よくある質問

ASP.NET Core MVCアプリケーションでPDFファイルをアップロードする方法を教えてください。

ASP.NET Core MVCアプリケーションでPDFファイルをアップロードするには、IFormFileインターフェースを使用してフォームからファイルデータを取り込み、保存する前にサーバーサイドで処理します。

ASP.NETでPDFファイルをダウンロードする最良の方法は何ですか?

ASP.NETでPDFファイルをダウンロードする最良の方法は、コントローラでFileResultアクションを使用することです。IronPDFはPDFをサーバーサイドで生成、修正し、ダウンロードできるようにします。

ASP.NETを使ってPDFファイルをデータベースに保存できますか?

はい、ファイルをバイト配列に変換し、バイナリラージオブジェクト(BLOB)として保存することで、ASP.NETを使ってPDFファイルをデータベースに保存することができます。IronPDFは保存前にPDFを処理するのに役立ちます。

IronPDFはASP.NETでPDFに透かしを入れる際にどのように役立ちますか?

IronPDFはPDFにテキストや画像の透かしを簡単に追加する機能を提供し、ASP.NETアプリケーションに統合して、ダウンロードや保存の前にドキュメントを変更することができます。

PDFストレージにEF Coreを使用する利点は何ですか?

EF Coreは、効率的なオブジェクトリレーショナルマッピングを可能にし、ASP.NETアプリケーション内でPDFの保存と検索を構造化されたスケーラブルな方法で管理することを容易にします。

ASP.NETアプリケーションでPDFコンテンツを操作することは可能ですか?

IronPDFを使えば、テキスト、画像、メタデータの編集を含むPDFコンテンツの操作が可能です。

ASP.NETでファイルアップロードを安全に処理するには?

ASP.NETでファイルアップロードを安全に処理するには、ファイルタイプを検証し、ファイルサイズを制限し、安全な場所に保存する必要があります。IronPDFのようなライブラリを使用することで、PDFファイル自体の整合性を確保することもできます。

WebアプリケーションでPDFを扱う場合の一般的な課題は何ですか?

よくある課題には、ファイルの互換性の確保、大きなファイルサイズの管理、文書の整合性の維持などがあります。IronPDFはPDFの作成と操作のための堅牢なツールを提供することで、これらを克服するお手伝いをします。

ASP.NETで異なるファイルタイプをPDFに変換できますか?

はい、IronPDFはHTMLや画像ファイルのような様々なファイルタイプをASP.NETアプリケーション内でシームレスにPDFに変換することができます。

ASP.NETでPDFを扱う際のModel-View-Controller(MVC)の役割とは?

MVCパターンは、データ処理(Model)、ユーザーインターフェース(View)、アプリケーションロジック(Controller)を分離することで、PDFを扱うコードを整理するのに役立ち、PDFの機能管理と拡張を容易にします。

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

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

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

アイアンサポートチーム

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