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

Word to PDF ASP.NET - Convert DOCX to PDF in C#

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は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;
}
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

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; }
}
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

スキーマを作成するために、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);
    }
}
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

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

処理する前に必ずコンテンツ タイプを検証してください。 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));
}
[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アイコンも含めることができます。 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);
}
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

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

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>
<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

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");
}
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");
}
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>$999</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 のレンダリング オプション

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");
}
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を使用します。 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);
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 には、多くのコンプライアンス要件を満たす改ざん防止メタデータが含まれます。

ストレージをクラウドにスケールします。 Azure Blob StorageまたはAmazon S3参照でローカルbyte[]データベース列を置き換えます。 処理済みのバイトを透かし入れ後にクラウド ストレージにアップロードし、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
テクニカルライター

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

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

アイアンサポートチーム

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