ASP.NETでプログラムでPDFファイルを印刷する方法
ASP.NETでC#を使用してデータベースからPDFファイルを取得するには、3つのステップが必要です:データベーステーブルからバイナリBLOB列をクエリし、IronPDFを使用してバイトをFile()レスポンスを介してブラウザにバイトを戻します。 IronPDF はレンダリング、透かし、セキュリティ機能を処理するため、データ アクセス ロジックに集中できます。
IronPDF for ASP.NETをインストールするにはどうすればよいですか?
PDF 取得コードを書く前に、 NuGetパッケージ マネージャーを使用してIronPDF をプロジェクトに追加します。
Install-Package IronPdf
インストール後は、任意のIronPDFメソッドを呼び出す前にappsettings.jsonでライセンスキーを設定します:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
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()
// );
// 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()
// );
' SQL Server table definition (run this in SSMS or via EF migrations)
' CREATE TABLE PdfDocuments (
' ID INT IDENTITY(1,1) PRIMARY KEY,
' ファイル名 NVARCHAR(255) NOT NULL,
' ファイルコンテンツ VARBINARY(MAX) NOT NULL,
' アップロード日時 DATETIME2 DEFAULT GETUTCDATE()
' );
テーブルが存在したら、appsettings.jsonで接続文字列を設定します:
// appsettings.json snippet (not C# -- shown as reference)
// "ConnectionStrings": {
// "DefaultConnection": "Server=localhost;Database=PdfStorage;Integrated Security=True;"
// }
// appsettings.json snippet (not C# -- shown as reference)
// "ConnectionStrings": {
// "DefaultConnection": "Server=localhost;Database=PdfStorage;Integrated Security=True;"
// }
' appsettings.json snippet (not VB.NET -- 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();
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();
Imports Microsoft.Extensions.DependencyInjection
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllers()
builder.Services.AddSingleton(Of IConfiguration)(builder.Configuration)
IronPdf.License.LicenseKey = builder.Configuration("IronPdf:LicenseKey")
Dim 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>();
}
}
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>();
}
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.Data.SqlClient
<ApiController>
<Route("api/[controller]")>
Public Class PdfController
Inherits ControllerBase
Private ReadOnly _connectionString As String
Public Sub New(configuration As IConfiguration)
_connectionString = configuration.GetConnectionString("DefaultConnection")
If _connectionString Is Nothing Then
Throw New InvalidOperationException("Connection string not found.")
End If
End Sub
<HttpGet("{id}")>
Public Async Function GetPdf(id As Integer) As Task(Of IActionResult)
Dim pdfBytes As Byte() = Await RetrievePdfBytesAsync(id)
If pdfBytes Is Nothing OrElse pdfBytes.Length = 0 Then
Return NotFound("PDF document not found.")
End If
' Load into IronPDF for validation or optional modification
Using 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")
End Using
End Function
Private Async Function RetrievePdfBytesAsync(documentID As Integer) As Task(Of Byte())
Await Using connection = New SqlConnection(_connectionString)
Await connection.OpenAsync()
Const query As String = "SELECT ファイルコンテンツ FROM PdfDocuments WHERE ID = @ID"
Await Using command = New SqlCommand(query, connection)
command.Parameters.AddWithValue("@ID", documentID)
Dim result = Await command.ExecuteScalarAsync()
Return If(TryCast(result, Byte()), Array.Empty(Of Byte)())
End Using
End Using
End Function
End Class
このコントローラは、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);
}
[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);
}
Imports System.Data.SqlClient
Imports Microsoft.AspNetCore.Mvc
<HttpGet("download/{id}")>
Public Async Function DownloadPdf(id As Integer) As Task(Of IActionResult)
Await Using connection As New SqlConnection(_connectionString)
Await connection.OpenAsync()
Const query As String = "SELECT ファイル名, ファイルコンテンツ FROM PdfDocuments WHERE ID = @ID"
Await Using command As New SqlCommand(query, connection)
command.Parameters.AddWithValue("@ID", id)
Await Using reader As SqlDataReader = Await command.ExecuteReaderAsync()
If Not Await reader.ReadAsync() Then
Return NotFound("Document not found.")
End If
Dim fileName As String = reader.GetString(reader.GetOrdinal("ファイル名"))
Dim pdfBytes As Byte() = CType(reader("ファイルコンテンツ"), Byte())
Using pdfDocument As New PdfDocument(pdfBytes)
Return File(pdfDocument.BinaryData, "application/pdf", fileName)
End Using
End Using
End Using
End Using
End Function
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");
}
[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");
}
Imports Microsoft.AspNetCore.Mvc
<HttpGet("watermarked/{id}")>
Public Async Function GetWatermarkedPdf(id As Integer) As Task(Of IActionResult)
Dim pdfBytes As Byte() = Await RetrievePdfBytesAsync(id)
If pdfBytes Is Nothing OrElse pdfBytes.Length = 0 Then
Return NotFound("PDF document not found.")
End If
Using pdfDocument As New PdfDocument(pdfBytes)
' HTML watermark applied to every page
Dim watermarkHtml As String = "<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")
End Using
End Function
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.ファイル名 });
}
[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.ファイル名 });
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports Microsoft.AspNetCore.Http
Imports Microsoft.AspNetCore.Mvc
Imports System.Data.SqlClient
Imports IronPdf
<HttpPost("upload")>
Public Async Function UploadPdf(file As IFormFile) As Task(Of IActionResult)
If file Is Nothing OrElse file.Length = 0 Then
Return BadRequest("No file uploaded.")
End If
If Not file.ContentType.Equals("application/pdf", StringComparison.OrdinalIgnoreCase) Then
Return BadRequest("Only PDF files are accepted.")
End If
Using memoryStream As New MemoryStream()
Await file.CopyToAsync(memoryStream)
Dim pdfBytes As Byte() = memoryStream.ToArray()
' Validate using IronPDF before storage
Using pdfDocument As New PdfDocument(pdfBytes)
Await Using connection As New SqlConnection(_connectionString)
Await connection.OpenAsync()
Const insertQuery As String = "
INSERT INTO PdfDocuments (ファイル名, ファイルコンテンツ)
VALUES (@ファイル名, @ファイルコンテンツ);
SELECT SCOPE_IDENTITY();"
Await Using command As New SqlCommand(insertQuery, connection)
command.Parameters.AddWithValue("@ファイル名", file.FileName)
command.Parameters.AddWithValue("@ファイルコンテンツ", pdfDocument.BinaryData)
Dim newID As Integer = Convert.ToInt32(Await command.ExecuteScalarAsync())
Return Ok(New With {.id = newID, .fileName = file.FileName})
End Using
End Using
End Using
End Using
End Function
ストレージ前にPdfDocumentを使用して検証することで、解析可能で整形式なPDFファイルのみがデータベースに入ることを保証します。 バイト配列が破損または切り捨てられている場合、IronPDFは例外をスローし、それをキャッチして400 Bad Requestレスポンスとして返すことができます。
PDF ストレージの主要なテーブルと列の種類は何ですか?
使用するスキーマは、クエリのパフォーマンスとストレージ効率に影響します。 次の表は、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 応答の各レイヤーでエラー処理が必要です。 以下の表は主要なプラクティスをまとめたものです。
| 懸念 | 推奨事項 | 理由 |
|---|---|---|
| 接続の破棄 | 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 のドキュメント管理機能をさらに活用するには、次のリソースを参照してください。
- HTMLからのIronPDF PDF生成- PDFを動的に生成し、データベースに直接保存します
- IronPDF のPDF の結合と分割- 取得したドキュメントを 1 つのレスポンスに結合します
- IronPDF のセキュリティと権限- 機密文書を提供する前にパスワード保護を追加します
- IronPDF HTML to PDF チュートリアル- Web ページのコンテンツをアーカイブ用の PDF に変換する
- IronPDF PDF スタンプ- 取得したファイルにテキストと画像のスタンプを適用します
- 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 製品および複数のサーバーを備えたオンプレミス展開で利用できます。
よくある質問
IronPDFとは?
IronPDFは.NETライブラリで、C#アプリケーションでPDFファイルの作成、編集、コンテンツの抽出を可能にします。
ASP.NETを使用してデータベースからPDFファイルを取得するにはどうすればよいですか?
ASP.NET で PDF フ ァ イ ルを デー タ ベース か ら 取得す る には、 C# コ ー ド を使っ てデー タ ベース に ク エ リ を実行 し 、 PDF デー タ をバ イ ト 配列に読み込みます。このバイト配列は必要に応じてIronPDFを使ってPDFをレンダリングしたり操作することができます。
なぜASP.NETアプリケーションでPDFを扱うのにIronPDFを使う必要があるのですか?
IronPDFは、PDFの生成、HTMLからの変換、操作を含む広範な機能を提供しており、ASP.NETと統合し、PDFを扱うための使いやすいAPIを提供しています。
ASP.NETでIronPDFを使うための前提条件は何ですか?
ASP.NETでIronPDFを使用するには、Visual Studioなど for .NET開発環境をセットアップし、NuGetパッケージマネージャ経由でプロジェクトにIronPDFライブラリをインクルードする必要があります。
IronPDFを使って既存のPDFファイルを編集できますか?
はい、IronPDFは既存のPDFファイルを編集するために使用することができます。テキストや画像の追加、ドキュメントのマージなどの修正が可能です。
IronPDFでHTMLをPDFに変換することは可能ですか?
IronPDFはHTMLコンテンツを直接PDFフォーマットに変換することができ、ウェブページや他のHTMLコンテンツから簡単にPDFを生成することができます。
IronPDFを使ってPDFのセキュリティ機能を扱うにはどうすればいいですか?
IronPDFはPDFの様々なセキュリティ機能をサポートしており、パスワード保護や文書へのアクセスや編集を制御するための権限設定などが可能です。
どのような種類のデータベースがIronPDFのPDF検索と互換性がありますか?
IronPDFはSQL Server、MySQL、PostgreSQLのようなバイナリデータを格納できるデータベースと連携し、PDFファイルを取得、操作することができます。

