
多くの Web アプリケーションにおいて、PDF ファイルは単なるダウンロード用の添付ファイルではありません。請求書、財務レポート、契約書、証明書、あるいは異なるデバイス間でもレイアウトを維持する必要のあるデータ出力など、PDF は業務フローの最終成果物として重要な役割を果たします。
ASP.NET 開発者にとって、サーバーサイドで PDF を直接生成することは非常に一般的な要件です。 従来の ASP.NET MVC アプリケーションを保守している場合でも、最新の ASP.NET Core サービスを構築している場合でも、コードによって PDF を生成することで、ドキュメントの構造・レイアウト・印刷結果を一貫して制御できます。
しかし、実際の開発現場では、ASP.NET における PDF 生成は必ずしも「すぐに使える」ものではなく、次のような課題に直面することが少なくありません。
- ドキュメントのレイアウトや改ページを正確に制御したい
- 日本語を含むテキストやフォントを正しく扱いたい
- 生成した PDF を効率よくブラウザへ返却したい
- ASP.NET Framework と ASP.NET Core の両方に対応したい
本記事では、これらの課題を踏まえつつ、Spire.PDF for .NET を使用して、ASP.NET および ASP.NET Core 環境で C# による PDF 生成を行う実践的な方法を体系的に解説します。MVC や Web API といった一般的なプロジェクト構成にも対応しており、実務にそのまま適用できる内容となっています。
この記事を読み終える頃には、ASP.NET における PDF 生成の仕組みを明確に理解し、実際の業務システムへスムーズに組み込めるようになるでしょう。
クイックナビゲーション
- ASP.NET PDF 生成の環境準備
- ASP.NET Framework で C# を使って PDF を作成する
- ASP.NET Core アプリケーションで PDF を生成する
- ASP.NET PDF 生成の応用シナリオ
- ASP.NET プロジェクトに適した PDF ライブラリの選び方
- ASP.NET で PDF を作成するために Spire.PDF を選ぶ理由
- よくある質問(FAQ)
1. ASP.NET PDF 生成の環境準備
ASP.NET または ASP.NET Core プロジェクトで PDF 生成を開始する前に、まず開発環境が正しく構成されていることを確認する必要があります。適切な環境設定を行うことで、実行時エラーや互換性の問題を未然に防ぐことができます。
1.1 .NET SDK の要件
ASP.NET Framework プロジェクトのターゲット フレームワークは .NET Framework 4.6.1 以上である必要があります。
ASP.NET Core プロジェクト要件に応じて .NET 6 または .NET 7 SDK をインストールしてください。
インストール済みの SDK バージョンは、次のコマンドで確認できます。
dotnet --version
1.2 Spire.PDF for .NET のインストール
PDF を生成するには、プロジェクトと互換性のある PDF ライブラリが必要です。Spire.PDF for .NET は、ASP.NET Framework と ASP.NET Core の両方をサポートする実績あるライブラリです。
- Visual Studio で NuGet を使用してインストールする場合:
Install-Package Spire.PDF
または、直接Spire.PDF for .NET をダウンロードして手動で追加することもできます。
- インストール後、プロジェクト内で Spire.Pdf.dll が正しく参照されていることを確認してください。
1.3 プロジェクトテンプレートに関する注意点
ASP.NET Framework
- MVC または Web Forms プロジェクトを使用するのがおすすめです
- System.Web など必要なアセンブリが参照されていることを確認してください
ASP.NET Core
- MVC または Web API プロジェクトを使用できます
- 必要に応じてサービスやミドルウェアを構成します
また、PDF をファイルとして保存する場合は、実行環境に書き込み権限があること、および日本語表示に必要なフォントが利用可能であることも確認しておきましょう。
2. ASP.NET Framework で C# を使って PDF を作成する
本章では、ASP.NET Framework アプリケーションにおいて C# を使用して PDF ファイルを生成する方法を紹介します。従来型の ASP.NET Web Forms および ASP.NET MVC プロジェクトのいずれにも適用可能です。
2.1 ASP.NET でシンプルな PDF を作成する
ASP.NET で PDF を生成する基本的な流れは次のとおりです。
- PdfDocument オブジェクトを作成する
- ページを追加し、テキストや図形などの内容を描画する
- PdfDocument.SaveToFile() でファイルとして保存、またはクライアントへ返却する
以下は、PDF を作成してサーバー側に保存するシンプルな例です。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
PdfDocument document = new PdfDocument();
PdfPageBase page = document.Pages.Add();
// 日本語表示に対応したフォント(Yu Gothic UI)を指定
PdfTrueTypeFont font = new PdfTrueTypeFont(
new Font("Yu Gothic UI", 12f, FontStyle.Regular),
true
);
page.Canvas.DrawString(
"本 PDF は、業務システムにより自動生成されたレポートです。",
font,
PdfBrushes.Black,
new PointF(40, 40)
);
// サーバー上に保存
document.SaveToFile(Server.MapPath("~/Output/Sample.pdf"));
document.Close();
この例では、ASP.NET 環境における PDF 生成の基本的な仕組みを示しています。PDF のページ構成、テキスト内容、配置位置はすべてコードで制御されているため、業務要件に応じてレイアウトを柔軟に調整できます。
必要に応じて、テキストだけでなく、表や画像を追加することで、請求書・帳票・報告書など、実用的な PDF ドキュメントを構築できます。
※ PDF に画像を挿入する方法については、次のチュートリアルを参照してください: C# を使用して PDF に画像を追加する方法
2.2 ASP.NET MVC で PDF を生成する
ASP.NET MVC プロジェクトでは、PDF は通常 Controller の Action メソッド内で生成され、 そのままブラウザへ返却されます。これにより、PDF を一時ファイルとして保存せず、オンライン表示やダウンロードを実現できます。
以下は、MVC コントローラーから PDF を返却する一般的な実装例です。
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;
using System.Web.Mvc;
namespace WebApplication.Controllers
{
public class DefaultController : Controller
{
public ActionResult GeneratePdf()
{
using (PdfDocument document = new PdfDocument())
{
PdfPageBase page = document.Pages.Add();
PdfTrueTypeFont font = new PdfTrueTypeFont(
new Font("Yu Gothic UI", 12f, FontStyle.Regular),
true
);
page.Canvas.DrawString(
"ASP.NET MVC で生成された業務用 PDF ドキュメントです。",
font,
PdfBrushes.Black,
new PointF(40, 40)
);
// メモリストリームに保存してブラウザへ返却
using (MemoryStream stream = new MemoryStream())
{
document.SaveToStream(stream);
return File(
stream.ToArray(),
"application/pdf",
"MvcSample.pdf"
);
}
}
}
}
}
生成された PDF の表示例は次のとおりです。

MVC プロジェクトにおける実践的なポイント
- Controller から FileResult を直接返却することで、PDF を最終レスポンスとして扱えます
- 一時的に生成する PDF の場合、ローカルファイルではなく MemoryStream を使用することで、ディスク I/O を削減できます
- PDF サイズが大きい場合や同時アクセス数が多い場合は、メモリ使用量を考慮した設計が必要です
- この方式は、ユーザー操作に応じて即時生成される帳票(売上レポート、請求書のダウンロードなど)に適しています
ヒント:ブラウザ上で PDF を直接プレビューしたい場合は、Spire.PDFViewer for ASP.NET を使用すると、Web ページ内で PDF を表示できます。
3. ASP.NET Core アプリケーションで PDF を生成する
ASP.NET Core で PDF を生成する際、基本的な API の使い方は ASP.NET Framework とほぼ同じですが、ファイルの返却方法・パスの扱い・実行環境の前提条件には明確な違いがあります。
たとえば、ASP.NET Core では System.Web に依存せず、物理パスへの直接出力も推奨されていません。そのため、PDF は ストリーム(Stream)ベースで生成・返却する実装が一般的です。
本章では、ASP.NET Core MVC および ASP.NET Core Web API プロジェクトにおいて、C# を使って PDF を生成し、クライアントへ返却する方法を具体例とともに解説します。この方式は、クロスプラットフォーム環境やクラウド/コンテナ環境との親和性も高いのが特徴です。
3.1 ASP.NET Core MVC アプリで PDF を生成する
ASP.NET Core MVC では、PDF は Controller の Action メソッド内で生成され、ファイルレスポンスとしてそのまま返却されるのが一般的です。
以下の例では、ASP.NET Core Web App(MVC)プロジェクトを作成し、Controllers フォルダーに PdfController を追加して PDF を生成します。
using Microsoft.AspNetCore.Mvc;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;
namespace CoreWebApplication.Controllers
{
public class PdfController : Controller
{
public IActionResult CreatePdf()
{
using (PdfDocument document = new PdfDocument())
{
PdfPageBase page = document.Pages.Add();
PdfTrueTypeFont font = new PdfTrueTypeFont(
new Font("Yu Gothic UI", 14f, FontStyle.Bold),
true
);
page.Canvas.DrawString(
"ASP.NET Core で生成された業務レポート(PDF)です。",
font,
PdfBrushes.DarkRed,
new PointF(40, 40)
);
using (MemoryStream stream = new MemoryStream())
{
document.SaveToStream(stream);
return File(
stream.ToArray(),
"application/pdf",
"AspNetCoreSample.pdf"
);
}
}
}
}
}
生成される PDF の表示例は次のとおりです。

ASP.NET Framework との主な違い
- Server.MapPath のようなサーバーパス変換 API は使用しません
- PDF は物理ファイルではなく、メモリ上のストリームとして生成・返却するのが基本です
- 無状態(ステートレス)な Web アーキテクチャと相性が良く、Docker やクラウド環境でもファイルシステム依存の問題を回避できます
- ASP.NET Core は Windows / Linux の両方で動作するため、フォントパスや OS 固有リソースへの依存は極力避ける必要があります
このようなストリームベースの PDF 生成方式は、社内管理画面や業務システムでの帳票出力など、「ユーザー操作に応じて即時ダウンロードする PDF」に非常に適しています。
PDF 内に表形式のデータを出力したい場合は、ASP.NET Core で C# を使用して PDF テーブルを生成する方法もあわせて参照してください。
3.2 ASP.NET Core Web API で PDF を生成する
フロントエンドとバックエンドを分離したアーキテクチャでは、PDF 生成処理を ASP.NET Core Web API として提供するケースが一般的です。
この場合、API は PDF を **バイナリデータ(byte 配列)**として返却し、Web フロントエンド、モバイルアプリ、または他のサービスから利用されます。
以下は、Web API で PDF を生成する基本的な実装例です。
using Microsoft.AspNetCore.Mvc;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System.IO;
[ApiController]
[Route("api/pdf")]
public class PdfApiController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
PdfDocument document = new PdfDocument();
PdfPageBase page = document.Pages.Add();
PdfTrueTypeFont font = new PdfTrueTypeFont(
new Font("Yu Gothic UI", 14f, FontStyle.Bold),
true
);
page.Canvas.DrawString(
"ASP.NET Core Web API により生成された PDF ドキュメントです。",
font,
PdfBrushes.BlueViolet,
new PointF(40, 40)
);
using (MemoryStream stream = new MemoryStream())
{
document.SaveToStream(stream);
document.Close();
return File(
stream.ToArray(),
"application/pdf",
"ApiGenerated.pdf"
);
}
}
}
生成された PDF のプレビュー例は次のとおりです。

Web API シナリオでの注意点
- Web API では、PDF は 画面表示用ではなくデータとして返却されます
- 同期 API では、PDF 生成処理が長時間実行されないよう注意が必要です
- 大量ページや複雑な帳票を生成する場合は、非同期処理やバックグラウンドジョブとして実装することが推奨されます
- マイクロサービス構成では、PDF 生成は「自動処理・定期処理・サービス間連携」の一部として組み込まれることが多くなります
このように、PDF 生成を Web API として提供することで、フロントエンドの実装とドキュメント生成ロジックを明確に分離でき、システム全体の保守性と拡張性を高めることができます。
4. ASP.NET における PDF 生成の応用シナリオ
これまでの例では、PDF を作成するための基本的な流れを紹介してきました。しかし、実際の業務システムでは、PDF は固定文書ではなく、実行時のデータに基づいて動的に生成されるケースがほとんどです。
また、データ量の増加に伴い、レイアウトの維持や改ページ制御も重要な要件となります。本章では、代表的な応用シナリオを通して、ASP.NET アプリケーションで安定した構造を持つ PDF を生成する方法を解説します。
4.1 動的データを PDF に出力する
業務用 PDF では、データベースや Web API から取得した情報をもとに、受注一覧、売上レポート、明細表などを生成することが一般的です。
このようなケースでは、ループ処理でデータを描画しながら、縦位置(Y 座標)と改ページのタイミングを明示的に制御する必要があります。
以下の例では、簡易的な「受注レポート」を PDF として出力します。
PdfDocument document = new PdfDocument();
PdfPageBase page = document.Pages.Add();
PdfTrueTypeFont headerFont = new PdfTrueTypeFont(
new Font("Yu Gothic UI", 12f, FontStyle.Bold),
true
);
PdfTrueTypeFont bodyFont = new PdfTrueTypeFont(
new Font("Yu Gothic UI", 10f, FontStyle.Regular),
true
);
float startY = 40;
float y = startY;
float pageHeight = page.Canvas.ClientSize.Height - 40;
// タイトル
page.Canvas.DrawString(
"受注一覧レポート",
headerFont,
PdfBrushes.Black,
40,
y
);
y += 30;
// 動的データ(サンプル)
string[] orders =
{
"受注番号:A-1001 金額:¥250,000",
"受注番号:A-1002 金額:¥180,000",
"受注番号:A-1003 金額:¥320,000"
};
foreach (string order in orders)
{
// 改ページ判定
if (y > pageHeight)
{
page = document.Pages.Add();
y = startY;
}
page.Canvas.DrawString(
order,
bodyFont,
PdfBrushes.Black,
40,
y
);
y += 20;
}
document.SaveToFile("OrderReport.pdf");
document.Close();
出力結果のイメージ:

このように、コードで描画位置を管理することで、データ件数が変動してもレイアウトが崩れない PDF を生成できます。特に、帳票・一覧表・レポート系の出力では、この方法が非常に有効です。
4.2 PDF のスタイルとレイアウトを制御する
コードベースで PDF を生成する場合、HTML のように自動でレイアウトが調整されることはありません。 そのため、ヘッダー・フッター・余白・行間などを明示的に定義する必要があります。
以下は、ページヘッダーとフッターを追加するシンプルな例です。
PdfPageBase page = document.Pages.Add();
PdfTrueTypeFont font = new PdfTrueTypeFont(
new Font("Yu Gothic UI", 10f),
true
);
// ヘッダー
page.Canvas.DrawString(
"社内資料(機密)",
font,
PdfBrushes.Gray,
new PointF(40, 15)
);
// フッター(ページ番号)
page.Canvas.DrawString(
"Page 1",
font,
PdfBrushes.Gray,
new PointF(
page.Canvas.ClientSize.Width - 60,
page.Canvas.ClientSize.Height - 30
)
);
出力結果のイメージ:

多ページの PDF ドキュメントを生成する場合、縦方向の位置計算を一元的に管理し、コンテンツを書き込む前に残りのスペースを判定することで、データが単一ページの容量を超えた際にも安全に新しいページへ切り替えることができます。
また、ヘッダー、行間、改ページのルールを集中的に管理することで、ページをまたいだレイアウトの一貫性を保ち、画面表示にも印刷にも適したドキュメントを生成できます。
4.3 その他の C# による PDF 生成方法
ASP.NET アプリケーションでは、 直接 PDF を生成する方法以外にも、用途に応じた変換処理が利用されます。
以下の関連チュートリアルも参考にしてください。
5. ASP.NET プロジェクトに適した PDF ライブラリの選び方
ASP.NET または ASP.NET Core アプリケーションで PDF 生成を実装する際、どの PDF ライブラリを選択するかは、開発効率・保守性・実行時の安定性に直結します。
単に「機能が多いかどうか」だけで判断するのではなく、実際の運用シーンを想定した観点から評価することが重要です。
PDF ライブラリ選定時の主なポイント
1. API の分かりやすさと拡張性
優れた PDF ライブラリは、次のような特徴を備えています。
- ドキュメント、ページ、フォント、描画オブジェクトなどが明確なオブジェクトモデルとして整理されている
- テキスト描画やレイアウト指定が直感的に行える
- 一般的な操作に多くのボイラープレートコードを必要としない
PDF 出力ロジックは、帳票追加やレイアウト変更などにより長期的に拡張されることが多いため、API の理解しやすさは非常に重要です。
2. ASP.NET / ASP.NET Core への対応状況
多くの開発現場では、次のような環境が混在しています。
- 既存の ASP.NET Framework アプリケーション
- 新規開発の ASP.NET Core サービス
- MVC と Web API の併用構成
そのため、同一の API で両環境に対応できる PDF ライブラリを選択することで、 移行コストや学習コストを大幅に削減できます。
3. パフォーマンスと安定性
本番環境での PDF 生成は、次のような条件下で実行されることが一般的です。
- ユーザー操作により即時生成される帳票
- バックグラウンドジョブや定期バッチ
- 同時アクセス数の多い Web サービス
そのため、大量ページの PDF を安定して生成できるか、メモリ使用量が適切に制御されているかといった点も重要な評価基準となります。
HTML 変換型とコード生成型の違い
ASP.NET における PDF 生成ライブラリは、大きく次の 2 種類に分けられます。
- HTML をレンダリングして PDF に変換する方式
- C# コードで直接 PDF を生成する方式
HTML 変換型は、既存の Web ページをそのまま PDF 化できる一方で、ブラウザ依存やレイアウトの再現性に課題が生じることがあります。一方、コード生成型PDFライブラリは、ページ構造、ページ分割、印刷効果を精密に制御でき、レポート、請求書、報告書、契約書などの業務文書生成シーンに特に適しています。
ASP.NET で PDF 生成を行う場合、「簡単に作れるか」よりも 「安定して運用できるか」 を重視して PDF ライブラリを選定することが、長期的には大きなメリットになります。
6. ASP.NET の PDF 生成に Spire.PDF を選ぶ理由
数ある .NET 向け PDF ライブラリの中でも、Spire.PDF for .NET は、ASP.NET および ASP.NET Core 環境において業務用途の PDF 生成に特化した機能と設計を備えています。
以下では、実際の開発・運用の視点から、その主な特長を整理します。
6.1 直感的で一貫性のある API 設計
Spire.PDF は、PDF ドキュメントを構成する各要素を 明確なクラス構造として提供しています。
- PdfDocument:PDF 全体の管理
- PdfPageBase:ページ単位の操作
- PdfFont / PdfTrueTypeFont:フォント設定
- PdfBrush / PdfPen:描画スタイル
- PdfStringFormat:文字配置・行揃え制御
- そのほか、C# による PDF 操作を行うための多数の API
これにより、レイアウト意図をコード上で明確に表現できるため、帳票やレポートのような複雑な構成でも保守性を維持しやすくなります。
6.2 日本語を含む多言語フォントへの対応
業務システムでは、日本語・英語・中国語など複数言語を含む PDF 出力が求められるケースが少なくありません。
Spire.PDF では、TrueType フォントを直接指定できるため、
- Yu Gothic UI
- MS Gothic
- Meiryo
などの 日本語フォントを正しく埋め込んだ PDF を生成できます。
これにより、
- 文字化けの防止
- 印刷結果の一貫性
- 環境依存の回避
といった点で、大きなメリットがあります。
6.3 ASP.NET / ASP.NET Core 両対応
Spire.PDF for .NET は、
- ASP.NET Framework
- ASP.NET Core
- .NET 6 / .NET 7 以降
といった複数の実行環境に対応しており、同一のコードベースで PDF 生成処理を共通化できます。
これにより、
- 既存システムの段階的移行
- 新旧サービスの併用
- 将来的な .NET バージョンアップ
にも柔軟に対応可能です。
6.4 帳票・レポート向けの実用機能が豊富
Spire.PDF は、単なるテキスト出力にとどまらず、 実務で必要とされる機能を幅広くサポートしています。
- 表(テーブル)の描画
- 画像・ロゴの挿入
- 図形・罫線の描画
- ページヘッダー/フッター
- 自動改ページ処理
これにより、 請求書・見積書・業務レポートなどの PDF を コードベースで安定して生成できます。
7. よくある質問(FAQ)
MVC を使用せずに ASP.NET Core で PDF を生成できますか?
可能です。ASP.NET Core での PDF 生成は MVC に依存する必要はありません。MVC コントローラー以外でも、以下のような場面で PDF を生成して返すことができます:
- ASP.NET Core Web API コントローラー
- Minimal API
- バックグラウンドサービス
返却する内容が有効な PDF バイト列であり、Content-Type を正しく設定していれば、正常に動作します。
ASP.NET と ASP.NET Core での PDF 生成にはどのような違いがありますか?
PDF 作成の基本的なロジックは共通していますが、いくつかの差異があります:
- ASP.NET Framework は System.Web に依存(例:Server.MapPath)
- ASP.NET Core はストリームベースのファイル処理方式を採用
- ASP.NET Core はクロスプラットフォーム対応で、モダンなデプロイ環境に適している
PDF API の観点から見ると、大部分のコードロジックは共通して再利用可能です。
ASP.NET で C# コードだけで PDF を完全に生成できますか?
可能です。多くの実運用システムでは、C# コードのみで PDF を生成しています。この方法には以下の利点があります:
- HTML レンダリングによる表示の不一致を回避
- レイアウトを正確に制御可能
- 帳票や請求書などの構造化文書に最適
一貫性と信頼性を重視する ASP.NET PDF ソリューションでは、この実装方式が非常に一般的です。
まとめ
ASP.NET および ASP.NET Core アプリケーションにおいて、PDF ファイルを生成することは非常に一般的な要件であり、特に帳票、請求書、データエクスポートなどのシーンで有用です。C# コードを直接用いて PDF を生成することで、文書の構造、レイアウト、出力挙動を完全に制御できます。
本記事では、ASP.NET Framework と ASP.NET Core における PDF 生成方法を体系的に解説し、MVC や Web API の各シナリオ、動的データ出力、基本的なレイアウト制御をカバーしました。また、実際のプロジェクト要件に応じて適切な PDF ライブラリを選択するポイントについても触れています。
実際のプロジェクト環境でこれらのサンプルを制限なく試したい場合は、試用ライセンスを申請 することで、評価段階で全機能を利用できます。






