
.NET Core用PDF API:C#でPDFを生成および編集する
PDF ドキュメントを Web ブラウザーに直接表示することは、最新のASP.NET Coreアプリケーションの一般的な要件です。 請求書、レポート、契約書などを作成する場合でも、ユーザーはファイルをダウンロードしたり、Adobe Acrobat Reader などのサードパーティ製プラグインをインストールしたりすることなく、スムーズに PDF を表示できることを期待しています。 IronPDF は、Chrome ベースのレンダリング エンジンを介してサーバー側で PDF を生成し、ストリーミングすることで、外部のビューアに依存することなく、これを簡単に実現します。
このチュートリアルでは、 IronPDFを使用してASP.NET Coreで PDF ファイルを表示、保存、印刷する方法について説明します。 また、ライブラリがコンテナとクラウドのデプロイメントをどのように処理し、本番環境の DevOps パイプラインにとって信頼できる選択肢となるかについても学習します。

ブラウザは PDF ファイルをインラインでどのように表示するのでしょうか?
現代のブラウザには、application/pdf MIMEタイプの応答を受け取るとアクティブになる、組み込みのPDFビューアーが含まれています。 ASP.NET Coreコントローラーが正しい Content-Type ヘッダーを持つ PDF を返すと、ブラウザーはそれを自動的にインラインでレンダリングします。プラグインのインストールは必要ありません。 MDN Web Docsによれば、ブラウザがファイル応答を処理する方法を制御するには、正しい MIME タイプ構成が不可欠です。
IronPDF は、完全なChromiumエンジンを埋め込んだChromePdfRendererクラスを使用してサーバー側でPDFを生成します。これにより、ドキュメントはCSS、JavaScript、ウェブフォント、デジタル署名の完全なサポートでレンダリングされます。これはGoogle Chromeを駆動するのと同じレンダリングパイプラインを意味します。 結果的に、クライアント側のビューア ライブラリなしでブラウザがインラインで表示するピクセルパーフェクトな出力が得られます。
コンテナ化された環境では、このアーキテクチャは特に価値があります。 レンダラーは、外部のヘッドレス ブラウザ プロセスを生成したり、リモート サービスに依存したりすることなく、完全にインプロセスで実行されます。 リソースのクリーンアップは自動的に行われるため、長時間実行されるASP.NET Coreサービスでのメモリ リークを防止できます。 利用可能なレンダリング機能全体を理解するには、 IronPDF の全機能セットを確認してください。

サーバーサイドレンダリングで一貫した結果が得られるのはなぜですか?
サーバー側レンダリングにより、PDF 生成プロセスからブラウザの変動性が排除されます。 PDF がクライアント側で生成される場合、出力品質はエンドユーザーのブラウザのバージョン、オペレーティング システム、インストールされているフォントによって異なります。 IronPDF を使用すると、Windows、Linux、Docker コンテナーなど、すべてのサーバーで同じ Chromium エンジンが実行され、コンプライアンス ドキュメント、請求書、署名済み契約書の同一の出力が保証されます。
Chrome エンジンは、単純な HTML から PDF へのコンバーターと比べて何を提供しますか?
単純な HTML から PDF へのコンバーターでは、 JavaScript の実行がスキップされたり、CSS メディア クエリが無視されたり、不適切なタイポグラフィが生成されたりすることがよくあります。 IronPDFのChromeエンジンは、JavaScriptが完了するのを待ち、@media printスタイルを尊重し、SVGグラフィックを処理し、国際的なコンテンツのためのUTF-8文字エンコーディングをサポートします。 この忠実度は、ユーザーが印刷したりアーカイブしたりするドキュメントを表示するときに重要になります。
ASP.NET CoreプロジェクトにIronPDFをインストールするにはどうすればよいでしょうか?
新しいASP.NET Coreプロジェクトを作成するには、コマンドを 1 つ実行します。 ターミナルを開いて次のコマンドを実行します:
dotnet new mvc -n PdfViewerApp
cd PdfViewerApp
次に、IronPDF NuGetパッケージをインストールします。 パッケージ マネージャー コンソールまたは.NET CLI のいずれかを使用できます。
PM > Install-Package IronPdf
これにより、Chrome エンジン、PDF 処理ライブラリ、およびすべてのプラットフォーム固有の依存関係など、必要なものがすべてインストールされます。 IronPDF は、追加のフレームワーク構成なしで.NET 6、7、8、9、10 をサポートします。 IronPDF のドキュメントでは、 AWS Lambdaなどのサイズが制限されたデプロイメント向けのスリム パッケージを含む高度なインストール オプションについて説明しています。

どのパッケージバリアントを選択すべきでしょうか?
標準的なデプロイメントにはIronPdfを使用してください。 AWS Lambda やエッジ関数のような厳しいサイズ制限のある環境には、IronPdf.Slimパッケージが初期ダウンロードのフットプリントを削減します。 どちらのバリアントも同じ API を公開するため、切り替え時にコードを変更する必要はありません。
コンテナ環境における一般的なインストールの問題は何ですか?
Linux コンテナーでは、グラフィックス操作のために追加のシステム ライブラリが必要になる場合があります。 最小限の Dockerfile セットアップには以下が含まれます。
apt-get update && apt-get install -y libgdiplus libc6-dev libx11-dev
Windows コンテナーは通常、追加の依存関係なしで動作します。 トラブルシューティングを行うには、IronPDF の組み込みログ記録を有効にして、レンダリング エラーが HTTP 500 応答として表示される前にそれをキャプチャします。
ブラウザで PDF をインラインで表示するにはどうすればよいですか?
ブラウザ内でインライン表示するPDFを返すには、3つのステップが必要です:PDFを生成し、application/pdf MIMEタイプを設定し、File()結果からファイル名パラメータを省略します。 完全なコントローラーアクションは次のとおりです。
using IronPdf;
using Microsoft.AspNetCore.Mvc;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
var app = builder.Build();
app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
// PdfController.cs
public class PdfController : Controller
{
public IActionResult ViewPdf()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.RenderDelay = 100;
var html = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; padding: 20px; }
h1 { color: #2c3e50; }
.content { line-height: 1.6; }
</style>
</head>
<body>
<h1>Invoice #12345</h1>
<div class='content'>
<p>Date: " + DateTime.Now.ToString("yyyy-MM-dd") + @"</p>
<p>Thank you for your business!</p>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
// Omitting the filename tells the browser to display inline
return File(pdf.BinaryData, "application/pdf");
}
}Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Dim builder = WebApplication.CreateBuilder(args)
builder.Services.AddControllersWithViews()
Dim app = builder.Build()
app.MapControllerRoute(name:="default", pattern:="{controller=Home}/{action=Index}/{id?}")
app.Run()
' PdfController.vb
Public Class PdfController
Inherits Controller
Public Function ViewPdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PrintHtmlBackgrounds = True
renderer.RenderingOptions.CreatePdfFormsFromHtml = True
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.RenderDelay = 100
Dim html = "
<html>
<head>
<style>
body { font-family: Arial, sans-serif; padding: 20px; }
h1 { color: #2c3e50; }
.content { line-height: 1.6; }
</style>
</head>
<body>
<h1>Invoice #12345</h1>
<div class='content'>
<p>Date: " & DateTime.Now.ToString("yyyy-MM-dd") & "</p>
<p>Thank you for your business!</p>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Omitting the filename tells the browser to display inline
Return File(pdf.BinaryData, "application/pdf")
End Function
End ClassキーはContent-Disposition: inlineが設定され、ブラウザの組み込みPDFビューアーがトリガーされます。 ファイル名を追加するとContent-Disposition: attachmentに切り替わり、ダウンロードがトリガーされます。 その他の HTML 変換パターンについては、 HTML 文字列から PDF へのガイドを参照してください。
トラフィック量の多いアプリケーションでは、スレッドのブロックを回避するために非同期レンダリング メソッドを使用します。
public async Task<IActionResult> ViewPdfAsync()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.Timeout = 60;
var html = await GetHtmlContentAsync();
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
return File(pdf.BinaryData, "application/pdf");
}Imports System.Threading.Tasks
Public Async Function ViewPdfAsync() As Task(Of IActionResult)
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.Timeout = 60
Dim html = Await GetHtmlContentAsync()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
Return File(pdf.BinaryData, "application/pdf")
End Function
非同期 PDF 生成はいつ使用すべきですか?
非同期生成は、同時リクエストを受信するエンドポイントにとって重要です。 同期生成はASP.NET Coreスレッド プールのスレッドをブロックし、アプリケーションが処理できる同時要求の数を減らします。 早めに非同期メソッドに切り替えてください。API サーフェスは同一なので、移行は簡単です。
他にレンダリングできる HTML ソースは何ですか?
HTML 文字列以外にも、 IronPDF はURL、ディスク上の HTML ファイル、 Razorビューからレンダリングします。 renderer.RenderHtmlFileAsPdf("wwwroot/templates/invoice.html")はローカルファイルシステムから読み取ります。 この柔軟性により、個別の HTML ファイルを維持することなく、既存のRazorテンプレートを PDF テンプレートとして再利用できます。 IronPDFのNuGetギャラリ一覧は、現在のパッケージバージョンとリリースノートを示しています。
ASP.NET Coreで PDF ファイルのダウンロードを有効にするにはどうすればよいでしょうか?
インライン表示の代わりにファイルのダウンロードをトリガーするのは、単一のパラメータの変更です。 attachmentに設定されます:
public IActionResult DownloadPdf()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.ImageQuality = 85;
var html = @"<h1>Quarterly Report</h1>
<p>Revenue this quarter exceeded projections by 12%.</p>";
var pdf = renderer.RenderHtmlAsPdf(html, @"wwwroot/images");
// Compress images to reduce download size
pdf.CompressImages(30);
// The filename parameter triggers download instead of inline view
return File(pdf.BinaryData, "application/pdf", "quarterly-report-2026.pdf");
}Public Function DownloadPdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.ImageQuality = 85
Dim html As String = "<h1>Quarterly Report</h1>
<p>Revenue this quarter exceeded projections by 12%.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html, "wwwroot/images")
' Compress images to reduce download size
pdf.CompressImages(30)
' The filename parameter triggers download instead of inline view
Return File(pdf.BinaryData, "application/pdf", "quarterly-report-2026.pdf")
End Function多数のユーザーに提供される大きなドキュメントの場合、ストリーミングによりピーク時のメモリ消費量が削減されます。
public IActionResult StreamPdf()
{
var renderer = new ChromePdfRenderer();
var html = "<h1>Large Report</h1><p>Content spanning many pages.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
var stream = pdf.Stream;
stream.Position = 0;
// Stream directly without buffering the full byte array
return File(stream, "application/pdf", "report.pdf");
}Imports IronPdf
Public Function StreamPdf() As IActionResult
Dim renderer As New ChromePdfRenderer()
Dim html As String = "<h1>Large Report</h1><p>Content spanning many pages.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Dim stream = pdf.Stream
stream.Position = 0
' Stream directly without buffering the full byte array
Return File(stream, "application/pdf", "report.pdf")
End Functionストリーミングは PDF データを段階的に送信するため、同時ユーザーに大きなファイルを提供するときにピーク時のメモリ使用量が大幅に削減されます。 その他のエクスポート パターンについては、 PDF の結合と分割、およびPDF からのテキストの抽出に関するガイドを参照してください。

さまざまなドキュメント タイプに最適な圧縮設定は何ですか?
テキストの多い PDF は、視覚的な影響を最小限に抑えながら、70 ~ 80% の画質で適切に圧縮されます。 マーケティングパンフレットなどの画像を多く含むドキュメントでは、鮮明さを保つために 85 ~ 95% の品質が必要です。 チャートを含む財務レポートでは、グラフの読みやすさを維持するために、85% 以上を維持する必要があります。 実稼働環境に展開する前に、代表的なドキュメントに対して圧縮レベルをテストします。
ASP.NET Coreで印刷可能な PDF を生成するにはどうすればよいでしょうか?
印刷対応PDFには特定のページ設定が必要です:印刷CSSメディアタイプ、定義された余白、明示的な用紙サイズ。IronPDFはRenderingOptionsを通じてこれらすべてを提供します:
public IActionResult PrintablePdf()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 25;
renderer.RenderingOptions.MarginBottom = 25;
renderer.RenderingOptions.MarginLeft = 25;
renderer.RenderingOptions.MarginRight = 25;
// Add headers and footers for professional print output
renderer.RenderingOptions.TextHeader = new TextHeaderFooter
{
CenterText = "Confidential Document",
DrawDividerLine = true
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter
{
CenterText = "Page {page} of {total-pages}",
FontSize = 10
};
var html = @"
<style>
@media print {
.no-print { display: none; }
.page-break { page-break-after: always; }
}
</style>
<h1>Print-Ready Document</h1>
<p>This document is formatted for A4 printing with standard margins.</p>
<div class='page-break'></div>
<h2>Page 2</h2>
<p>Content continues on the second page.</p>";
var pdf = renderer.RenderHtmlAsPdf(html);
return File(pdf.BinaryData, "application/pdf");
}Imports System.Web.Mvc
Public Function PrintablePdf() As ActionResult
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Portrait
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 25
renderer.RenderingOptions.MarginBottom = 25
renderer.RenderingOptions.MarginLeft = 25
renderer.RenderingOptions.MarginRight = 25
' Add headers and footers for professional print output
renderer.RenderingOptions.TextHeader = New TextHeaderFooter With {
.CenterText = "Confidential Document",
.DrawDividerLine = True
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter With {
.CenterText = "Page {page} of {total-pages}",
.FontSize = 10
}
Dim html = "
<style>
@media print {
.no-print { display: none; }
.page-break { page-break-after: always; }
}
</style>
<h1>Print-Ready Document</h1>
<p>This document is formatted for A4 printing with standard margins.</p>
<div class='page-break'></div>
<h2>Page 2</h2>
<p>Content continues on the second page.</p>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Return File(pdf.BinaryData, "application/pdf")
End Function@media print CSSルールがアクティブになります。 これにより、ナビゲーション バー、サイドバー、その他の画面のみの要素が非表示になります。 ユーザーは、標準のキーボード ショートカットを使用して、ブラウザーの組み込みビューアから PDF を印刷し、プリンターの選択とコピー数を完全に制御できます。 高度なヘッダーとフッターのパターンについては、ヘッダーとフッターのガイドを参照してください。
印刷されたドキュメントにウォーターマークを追加したり、配信前にデジタル署名したり、パスワードと権限設定で保護したりできます。 これらの機能は PdfDocument APIを通じて直接統合され、別の処理ステップを必要としません。

どのようなページ構成でプリンタ間の互換性が保証されますか?
20 ~ 25 mm の余白を持つ標準の A4 またはレター サイズは、すべてのプリンター モデルで確実に動作します。 展開が既知のプリンター群を対象としている場合を除き、カスタム用紙サイズは使用しないでください。 独自のページ区切り方法の代わりに、CSS page-break-before と page-break-after プロパティを使用してください。 W3C CSS Paged Media 仕様では、これらのプロパティが詳細に定義されています。 これらの標準 CSS プロパティは、Chrome レンダリング エンジンと物理プリンター間で一貫して機能します。
ASP.NET Core PDF ビューアーを Docker にデプロイするにはどうすればよいですか?
IronPDF は、コードを変更することなく Linux および Windows コンテナー上で実行されます。 以下の Dockerfile で使用されるベース イメージは、定期的なセキュリティ パッチでメンテナンスされるMicrosoft の公式.NETコンテナー イメージから取得されます。 以下の Docker 構成では、必要なシステム ライブラリがインストールされ、最小限のイメージ サイズでマルチステージ ビルドが生成されます。
FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
WORKDIR /app
RUN apt-get update && apt-get install -y \
libgdiplus \
libc6-dev \
libx11-dev \
&& rm -rf /var/lib/apt/lists/*
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY ["PdfViewerApp.csproj", "./"]
RUN dotnet restore "PdfViewerApp.csproj"
COPY . .
RUN dotnet build "PdfViewerApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "PdfViewerApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "PdfViewerApp.dll"]
Kubernetes デプロイメントの場合、PDF 生成をエンドツーエンドで検証するヘルスチェック エンドポイントを追加します。
builder.Services.AddHealthChecks()
.AddCheck("pdf_generation", () =>
{
try
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Health check</p>");
return pdf.PageCount > 0
? HealthCheckResult.Healthy()
: HealthCheckResult.Unhealthy("PDF generation returned empty document");
}
catch (Exception ex)
{
return HealthCheckResult.Unhealthy(ex.Message);
}
});Imports System
Imports Microsoft.Extensions.DependencyInjection
Imports Microsoft.Extensions.Diagnostics.HealthChecks
builder.Services.AddHealthChecks().AddCheck("pdf_generation", Function()
Try
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<p>Health check</p>")
Return If(pdf.PageCount > 0, HealthCheckResult.Healthy(), HealthCheckResult.Unhealthy("PDF generation returned empty document"))
Catch ex As Exception
Return HealthCheckResult.Unhealthy(ex.Message)
End Try
End Function)このヘルスチェックにより、Kubernetes はユーザーがエラーに遭遇する前に、正常でないポッドを検出して置き換えることができます。 また、標準のASP.NET Coreヘルス監視ミドルウェアとも統合されます。 IronPDF試用ライセンスには、制限なしで Docker テストの完全な機能が含まれています。
インプロセス レンダラーの展開の利点は何ですか?
以下の表は、IronPDF のインプロセス アプローチと、サーバー側での PDF 生成に一般的に使用されるヘッドレス ブラウザー サーバー設定を比較したものです。
| 要素 | IronPDF (進行中) | ヘッドレスブラウザサーバー |
|---|---|---|
| 展開の複雑さ | NuGetパッケージのみ | 別個のプロセスまたはサービス |
| ネットワーク遅延 | なし(処理中) | リクエストごとのHTTPラウンドトリップ |
| コンテナフットプリント | 単一コンテナ | 最低2つのコンテナ |
| 健康モニタリング | 標準のASP.NET Coreミドルウェア | 個別のサービスヘルスチェック |
| レンダリングの一貫性 | Chromeエンジン、ロックバージョン | ブラウザのバージョンによって異なります |
ビューアに高度な PDF 機能を追加するにはどうすればよいですか?
IronPDF は、基本的な表示やダウンロードをはるかに超えた機能を備えています。 HTMLをPDFにレンダリングする同じライブラリは、PDFフォームの処理、カスタムウォーターマーク、デジタル署名、およびPDFから画像への変換も提供します。追加のパッケージを必要とせずにすべてを実現します。
ドキュメント管理ワークフローでは、アップロードされたファイルを PDF に変換し、インデックス作成用のテキストを抽出し、ドキュメントに注釈を付けて、ユーザーに返すといった操作をすべて単一のASP.NET Coreコントローラー内で実行できます。 IronPDF の機能ページでは、各機能領域のコード サンプルを含む完全な機能の概要が提供されています。
ビューア アプリケーションで注目すべき主な機能:
-テキスト抽出- 検索やコンプライアンス アーカイブのために PDF コンテンツをインデックスします -結合と分割- 複数のドキュメントを結合したり、特定のページを抽出したりします -透かし- 文書を表示する前に機密保持通知やブランドをスタンプします -デジタル署名- ブラウザにストリーミングする前に生成された PDF に署名します -ヘッダーとフッター- ページ番号、文書タイトル、区切り線を追加します
PDF のセキュリティとアクセス制御をどのように処理しますか?
機密性の高いドキュメントを表示するアプリケーションには、ASP.NET Coreの承認ミドルウェアとIronPDFのパスワードおよび権限機能を組み合わせてください。 コントローラー アクションを認証を要求するように設定し、PDF をストリーミングします。ドキュメントはファイル システムや認証されていないエンドポイントに触れることはありません。
監査証跡の要件を満たすには、ストリーミングする前に PDF にデジタル署名します。 署名は署名タイムスタンプを記録し、文書の整合性を検証します。これは、ブラウザ ビューアで表示される財務文書や法律文書にとって重要です。
どのようなライセンス オプションが利用可能ですか?
IronPDF のライセンスは、 Docker および Kubernetes 環境での開発、ステージング、概念実証作業に適した完全な機能を備えた無料トライアルから始まります。 実稼働ライセンスは、単一の開発者による展開から無制限のサーバー展開まで、さまざまな展開シナリオをカバーします。
IronPDF のドキュメントには、詳細な API リファレンス、 .NETバージョン間のアップグレードのための移行ガイド、Windows、Linux、macOS、AWS、Azure のプラットフォーム固有のセットアップ手順が記載されています。

IronPDFを使用すると、 ASP.NET Coreに PDF ビューアを組み込むのに数分しかかかりません。 ChromeベースのレンダリングエンジンはHTMLからPDFへの変換の複雑さを処理し、ASP.NET CoreのFile()結果はインラインとダウンロードの動作を処理し、同じパッケージで印刷、透かし、デジタル署名、コンテナデプロイメントをカバーします。 まずは無料トライアルから始めて、要件の拡大に合わせて高度なドキュメント機能を追加してください。

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.
Related Articles


