IRONSOFTWAREHOME
IRONPDFの使用

Blazor Open PDF in new Tab with IronPDF: A Developers Tutorial

Curtis Chau
Curtis Chau
Updated: 2026年3月9日

ASP.NETでC#を使用してデータベースからPDFファイルを取得するには、3つのステップが必要です:データベーステーブルからバイナリBLOB列をクエリし、IronPDFを使用してバイトをFile()レスポンスを介してブラウザにバイトを戻します。 IronPDF はレンダリング、透かし、セキュリティ機能を処理するため、データ アクセス ロジックに集中できます。

IronPDF for ASP.NETをインストールするにはどうすればよいですか?

PDF 取得コードを書く前に、 NuGetパッケージ マネージャーを使用してIronPDF をプロジェクトに追加します。

PM > Install-Package IronPdf

インストール後は、任意のIronPDFメソッドを呼び出す前にappsettings.jsonでライセンスキーを設定します:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

IronPDF は、 .NET 10 、 .NET 8、 .NET 6、および.NET Framework 4.6.2+ をサポートしています。 追加の依存関係やヘッドレス ブラウザのインス​​トールを必要とせず、Windows、Linux、macOS で動作します。 評価用に無料の試用ライセンスが利用可能です。

SQL Server データベース テーブルをどのように設定しますか?

最も一般的なアプローチは、PDFファイルをバイナリデータとしてSQL ServerのVARBINARY(最大)列に保存することです。 これにより、ドキュメントとそのメタデータが 1 つのテーブルにまとめられ、バックアップが簡素化され、ファイル システム パスの管理が不要になります。

次の SQL スクリプトを使用してストレージ テーブルを作成します。

// SQL Server table definition (run this in SSMS or via EF migrations)
// CREATE TABLE PdfDocuments (
//     ID 国際アイデンティティ(1,1) PRIMARY KEY,
//     ファイル名 NVARCHAR(255) NOT NULL,
//     ファイルコンテンツ VARBINARY(最大) NOT NULL,
//     アップロード日時 日付時刻2 DEFAULT GETUTCDATE()
// );
C#

テーブルが存在したら、appsettings.jsonで接続文字列を設定します:

// appsettings.json snippet (not C# -- shown as reference)
// "ConnectionStrings": {
//   "DefaultConnection": "Server=localhost;Database=PdfStorage;Integrated Security=True;"
// }

接続文字列をProgram.csの依存性注入で登録します:

using Microsoft.Extensions.DependencyInjection;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddSingleton<IConfiguration>(builder.Configuration);

IronPdf.License.LicenseKey = builder.Configuration["IronPdf:LicenseKey"];

var app = builder.Build();
app.MapControllers();
app.Run();

ASP.NET Coreで SQL Server から PDF を取得するにはどうすればよいでしょうか?

取得パターンは3つのステップに従います:接続を開き、パラメータ化されたSELECTクエリを実行し、バイナリ列をbyte[]に読み込みます。 次にIronPDFは、その配列をクライアントにストリーミングする前にオプションで処理するために、PdfDocumentオブジェクトにロードします。

APIコントローラーの構築

インライン表示とファイルのダウンロードの両方に対して GET エンドポイントを公開するコントローラーを作成します。

using IronPdf;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Data.SqlClient;

[ApiController]
[Route("api/[controller]")]
public class PdfController : ControllerBase
{
    private readonly string _connectionString;

    public PdfController(IConfiguration configuration)
    {
        _connectionString = configuration.GetConnectionString("DefaultConnection")
            ?? throw new InvalidOperationException("Connection string not found.");
    }

    [HttpGet("{id}")]
    public async Task<IActionResult> GetPdf(int id)
    {
        byte[] pdfBytes = await RetrievePdfBytesAsync(id);
        if (pdfBytes is null || pdfBytes.Length == 0)
            return NotFound("PDF document not found.");

        // Load into IronPDF for validation or optional modification
        using var pdfDocument = new PdfDocument(pdfBytes);

        // Inline display -- browser opens PDF viewer
        Response.Headers.Append("Content-Disposition", "inline; filename=\"document.pdf\"");
        return File(pdfDocument.BinaryData, "application/pdf");
    }

    private async Task<byte[]> RetrievePdfBytesAsync(int documentID)
    {
        await using var connection = new SqlConnection(_connectionString);
        await connection.OpenAsync();

        const string query = "SELECT ファイルコンテンツ FROM PdfDocuments WHERE ID = @ID";
        await using var command = new SqlCommand(query, connection);
        command.Parameters.AddWithValue("@ID", documentID);

        var result = await command.ExecuteScalarAsync();
        return result as byte[] ?? Array.Empty<byte>();
    }
}
C#

このコントローラは、SQLインジェクションを防ぐためにパラメータ化されたクエリとSqlCommandを正しく破棄します。 PdfDocumentクラスはバイト配列を検証し、ストリーミングのためにBinaryDataプロパティを公開します。

ダウンロード用に名前付きファイルを返す

ユーザーがインラインで表示するのではなくドキュメントを保存する必要がある場合、attachmentに設定し、元のファイル名を渡します:

[HttpGet("download/{id}")]
public async Task<IActionResult> DownloadPdf(int id)
{
    await using var connection = new SqlConnection(_connectionString);
    await connection.OpenAsync();

    const string query = "SELECT ファイル名, ファイルコンテンツ FROM PdfDocuments WHERE ID = @ID";
    await using var command = new SqlCommand(query, connection);
    command.Parameters.AddWithValue("@ID", documentID);

    await using var reader = await command.ExecuteReaderAsync();
    if (!await reader.ReadAsync())
        return NotFound("Document not found.");

    var fileName = reader.GetString(reader.GetOrdinal("ファイル名"));
    var pdfBytes = (byte[])reader["ファイルコンテンツ"];

    using var pdfDocument = new PdfDocument(pdfBytes);
    return File(pdfDocument.BinaryData, "application/pdf", fileName);
}
C#

attachmentに自動的に設定されます。 ASP.NET Core は、スペースを含むファイル名を正しく引用符で囲みます。

取得した PDF に透かしを追加するにはどうすればよいでしょうか?

最も実用的な取得後の操作の 1 つは、ドキュメントを提供する前に各ページに透かしを刻印することです。 これは、機密レポート、ドラフト文書、または目に見えるセキュリティ マーキングが必要なファイルに役立ちます。

IronPDFで HTML 透かしを適用する

IronPDF の透かし API は任意の HTML 文字列を受け入れるため、インライン CSS を使用して透かしテキストのスタイルを設定できます。 下にあるコンテンツが読みやすい程度に不透明度を低く設定します。

[HttpGet("watermarked/{id}")]
public async Task<IActionResult> GetWatermarkedPdf(int id)
{
    byte[] pdfBytes = await RetrievePdfBytesAsync(id);
    if (pdfBytes is null || pdfBytes.Length == 0)
        return NotFound("PDF document not found.");

    using var pdfDocument = new PdfDocument(pdfBytes);

    // HTML watermark applied to every page
    string watermarkHtml = "<h2 style='color:red; opacity:0.4; font-family:Arial;'>CONFIDENTIAL</h2>";
    pdfDocument.ApplyWatermark(
        watermarkHtml,
        rotation: 30,
        verticalAlignment: VerticalAlignment.Middle,
        horizontalAlignment: HorizontalAlignment.Center
    );

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

ApplyWatermarkメソッドは標準のHTMLとCSSを受け入れるため、フォント、色、不透明度、および位置を自由に制御できます。 透かしはドキュメント内のすべてのページに自動的に適用されます。 画像へのスタンプ挿入、ヘッダーとフッターの追加、複数のドキュメントの結合など、 PDF操作に関するその他の機能については、 IronPDFのドキュメントを参照してください。

アップロードした PDF を SQL Server にどのように保存しますか?

ラウンドトリップを完了するには、受信したフォーム ファイルを読み取ってデータベースに書き込むアップロード エンドポイントが必要です。 これを上記の検索エンドポイントと組み合わせて、完全なドキュメント管理システムを形成します。

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

    if (!file.コンテンツタイプ.Equals("application/pdf", StringComparison.OrdinalIgnoreCase))
        return BadRequest("Only PDF files are accepted.");

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

    // Validate using IronPDF before storage
    using var pdfDocument = new PdfDocument(pdfBytes);

    await using var connection = new SqlConnection(_connectionString);
    await connection.OpenAsync();

    const string insertQuery = @"
        INSERT INTO PdfDocuments (ファイル名, ファイルコンテンツ)
        VALUES (@ファイル名, @ファイルコンテンツ);
        SELECT SCOPE_IDENTITY();";

    await using var command = new SqlCommand(insertQuery, connection);
    command.Parameters.AddWithValue("@ファイル名", file.ファイル名);
    command.Parameters.AddWithValue("@ファイルコンテンツ", pdfDocument.BinaryData);

    var newID = Convert.ToInt32(await command.ExecuteScalarAsync());
    return Ok(new { id = newID, fileName = file.ファイル名 });
}
C#

ストレージ前にPdfDocumentを使用して検証することで、解析可能で整形式なPDFファイルのみがデータベースに入ることを保証します。 バイト配列が破損または切り捨てられている場合、IronPDFは例外をスローし、それをキャッチして400 Bad Requestレスポンスとして返すことができます。

PDF ストレージの主要なテーブルと列の種類は何ですか?

使用するスキーマは、クエリのパフォーマンスとストレージ効率に影響します。 次の表は、SQL Server に推奨される列構成を示しています。

PDF BLOB ストレージに推奨される SQL Server スキーマ
データ型目的
ID国際アイデンティティ主キー、自動増分
ファイル名NVARCHAR(255)ダウンロードヘッダーの元のファイル名
ファイルコンテンツVARBINARY(最大)生の PDF バイナリ データ (BLOB)
コンテンツタイプNVARCHAR(100)MIME タイプ (例: application/pdf)
ファイルサイズバイトビッグイントクォータ管理のための保存サイズ
アップロード日時日付時刻2監査用のUTCタイムスタンプ
アップロード者NVARCHAR(100)アクセス制御のためのユーザーID

SQL Server ファイル ストリーミングが必要な大規模システムの場合、Microsoft は、T-SQL によるクエリが可能でありながら、大きな BLOB をファイル システムに格納する代替手段としてFILESTREAM 機能を文書化しています。 ただし、数百メガバイトまでのドキュメントを提供するほとんどのASP.NETアプリケーションの場合、VARBINARY(最大)のインローストレージはうまく機能し、展開を簡素化します。

エラーを処理してパフォーマンスを最適化するにはどうすればよいでしょうか?

運用環境で信頼性の高い PDF を取得するには、データベース、 IronPDF、HTTP 応答の各レイヤーでエラー処理が必要です。 以下の表は主要なプラクティスをまとめたものです。

PDF 取得のエラー処理とパフォーマンス パターン
懸念推奨事項理由
接続の破棄await usingステートメント接続プールの枯渇を防ぐ
Pdf文書の処分ステートメントusing管理されていないメモリを速やかに解放する
SQLインジェクションパラメータ化されたクエリのみ悪意のある入力によるクエリの変更を防止
ファイルタイプの検証MIMEタイプとマジックバイトを確認する保存前にPDF以外のアップロードをブロックします
大容量ファイルの処理FileStreamResultによるストリーム応答ファイル全体をサーバーメモリにロードすることを回避します
キャッシングIMemoryCacheまたはIDistributedCacheを使用するデータベースの繰り返しラウンドトリップを削減
非同期操作全体を通してasync / awaitディスクとネットワークの待機中にスレッドを空けておく

接続文字列管理のために、値をappsettings.jsonに保存し、ソースファイルにハードコードしないようにします。 ローカル開発中はASP.NET Core の組み込みシークレット管理を使用し、運用環境では Azure Key Vault または AWS Secrets Manager を使用します。 接続文字列またはライセンス キーをソース管理にコミットしないでください。

大きなPDFファイルを配信する場合、バイト配列全体をメモリにロードせず、FileStreamResultを返すことを検討してください。 非常に大きなドキュメント (100 MB を超える) の場合、 SQL Server FILESTREAM API を使用すると、ファイル システムから直接チャンク ストリーミングを実行できます。

頻繁にアクセスされるドキュメントのキャッシュ

特定のPDFファイルが繰り返し要求される場合(例えば、利用規約文書や商品カタログ)、IMemoryCacheにバイト配列をキャッシュすることで、データベースへの往復を防ぎます。 builder.Services.AddMemoryCache()とともに登録し、それをコントローラに注入し、データベースクエリを行う前にキャッシュを確認します。 ドキュメントの予想される更新頻度に一致する絶対的な有効期限を設定します。 ドキュメントが更新されると、キーによってキャッシュされたエントリが削除され、次のリクエストで新しいバージョンが取得されます。

複数のサーバーインスタンスを伴うロードバランス済みの配置などの分散シナリオの場合、IMemoryCacheをRedisやSQL ServerにバックアップされたIDistributedCacheに置き換えます。 ASP.NET Core の分散キャッシュ抽象化により、コントローラー コードはほぼ同じままになります。 Program.csでの登録だけが変更されます。

IronPDFを使用して PDF 取得をクロスプラットフォームで展開するにはどうすればよいですか?

IronPDF は、別途 Chromium をインストールしたり構成を変更したりすることなく、Linux、Windows、macOS で実行されます。 同じNuGetパッケージがすべてのプラットフォームをターゲットとするため、次のどちらにデプロイしても PDF コントローラーは同じように動作します。

  • IIS を搭載した Windows Server
  • Docker または Kubernetes 上の Ubuntu コンテナ
  • Azure App Service (Linux または Windows)
  • AWS エラスティック ビーンズトーク

DockerとLinuxへのデプロイ

Docker デプロイの場合は、Dockerfile にIronPDF の依存関係を追加してください。IronPDF Linux ドキュメントには、Debian および Alpine ベースイメージに必要な apt パッケージが記載されています。 典型的なマルチステージDockerfileは、ランタイムイメージステージでOSの依存関係をインストールし、その上に公開済みのASP.NETアプリケーションをコピーします。Azureを使用する場合は、 AzureデプロイガイドでApp Serviceの構成について説明されており、大規模なPDFレンダリングをサポートするためのメモリとCPUの設定も含まれています。

IronPDF には独自の Chromium ベースのレンダリング エンジンがバンドルされているため、サーバーに別のブラウザーをインストールする必要はありません。 これにより、システム レベルのブラウザーを必要とするソリューションと比較して、Linux コンテナーのセットアップが大幅に簡素化されます。 IronPDFチームは、リリースごとに最も一般的な Linux ベース イメージに対してテストを行っているため、Alpine または Debian コンテナーがすぐに動作することを信頼できます。

ADO .NETの代わりに Entity Framework Core を使用する

IronPDF は、生の ADO .NETの代替としてEntity Framework Coreとも統合されます。 プロジェクトがすでにEF Coreを使用している場合、byte[]プロパティにマップし、EFにクエリ生成を任せることができます。 このアプローチにより、定型文が大幅に削減され、EF の LINQ プロバイダーを通じてフィルタリング、ページ区切り、監査動作を簡単に追加できるようになります。

トレードオフは、EF Core がエンティティ グラフの一部として BLOB 全体をメモリに読み込むことです。 非常に大きなPDFファイルの場合は、FromSqlメソッドでフルエンティティではなくバイト配列列のみを選択する投影を使用して生のADO.NETまたはEF Coreを検討してください。

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

C#とIronPDFを使用したASP.NET CoreにおけるSQL ServerデータベースからのPDFファイルの取得は、明確なパターンに従います: パラメータ化されたSELECTでBLOB列をクエリし、バイトをContent-Dispositionヘッダーでバイナリデータを返します。 IronPDF は、ドキュメントがサーバーから送信される前に、ドキュメントを検証、透かし入れ、結合、または保護する機能を追加します。

IronPDF のドキュメント管理機能をさらに活用するには、次のリソースを参照してください。

無料のIronPDF試用ライセンスから始めて、すべての機能を制限なくテストしてください。 トライアルでは透かし入りの出力が生成されます。 有料ライセンス キーを適用して透かしを削除します。 この記事で使用されているすべてのメソッドの完全なAPI リファレンス ドキュメントとコード サンプルは、 IronPDF Web サイトで入手できます。

プロジェクトで既にEntity Framework Coreを使用している場合は、 IronPDF EF Core統合ガイドで、 IronPDFの処理パイプラインを維持しながら、生のADO .NETをエンティティモデルに置き換える方法を説明しています.NET 10と最新のASP.NET Core機能を使用しているチームの場合、ここで説明するパターンは変更なしでそのまま使用できます。IronPDFは、アクティブなすべて for .NET LTSおよびSTSリリースをサポートしています。

IronPDF の価格設定ページを確認して、導入環境に適したライセンス レベルを見つけてください。 単一の開発者ライセンスでローカル開発とテストがカバーされます。 再配布ライセンスは、SaaS 製品および複数のサーバーを備えたオンプレミス展開で利用できます。

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