IRONPDFの使用 .NET PDF API .NET開発者のためのチュートリアル カーティス・チャウ 公開日:12月 18, 2025 IronPDF をダウンロード NuGet ダウンロード DLL ダウンロード Windows 版 無料トライアル LLM向けのコピー LLM向けのコピー LLM 用の Markdown としてページをコピーする ChatGPTで開く このページについてChatGPTに質問する ジェミニで開く このページについてGeminiに問い合わせる ジェミニで開く このページについてGeminiに問い合わせる 困惑の中で開く このページについてPerplexityに問い合わせる 共有する Facebook で共有 Xでシェア(Twitter) LinkedIn で共有 URLをコピー 記事をメールで送る How to Build a Centralized PDF Generation Service with ASP.NET Core and IronPDF. 最新のアプリケーションで作業する場合、.NET開発者は一元化されたPDF生成サービスを構築する必要性に気づくかもしれません。請求書、報告書、証明書、契約書のいずれを生成する場合でも、専用の.NET PDF APIを持つことは、PDFファイルを効率的に管理するために有益です。 では、PDF生成タスクをどのように改善することができるのでしょうか? これは、デスクトップおよびWebアプリケーション全体で一貫性、保守性、拡張性を提供することによって実現されます。 これまでにないほど、ドキュメントのコンテンツ、PDFページ、PDFフォームフィールドを管理することが簡単になりました。 このチュートリアルでは、ASP.NET Coreと強力な.NET PDFライブラリであるIronPDFを使用して、プロダクション対応のPDF APIを構築する方法を学びます。 HTMLからPDFを生成したり、文書をマージしたり、透かしを追加したり、Web APIでのさまざまな実践的なPDF生成シナリオを処理できるRESTfulエンドポイントを作成します。 専用PDF APIを構築する理由 .NET PDF API .NET開発者のためのチュートリアル:イメージ1 - PDF APIアーキテクチャ図。 コードに飛び込む前に、専用PDF APIを作成する意義を理解しましょう: ロジックの一元化:すべてのPDF生成ロジックが一箇所に集約されているため、メンテナンスや更新が容易です。 マイクロサービス・アーキテクチャ:異なるアプリケーションがPDF機能を必要とするサービス指向アーキテクチャに最適です。 パフォーマンスの最適化:大きなPDFファイル、複数のページ、動的なデータに対して、専用サービスの拡張と最適化を容易にします。 言語にとらわれない:どのようなクライアントアプリケーションでも、プログラミング言語に関係なくAPIを利用できます。 一貫した出力:組織全体のすべてのPDF文書が、一貫した文書レイアウト、段落書式、PDFコンテンツを維持するようにします。 構築開始の準備はできましたか? IronPDFの無料トライアルをダウンロードして、このチュートリアルに従って、.NET FrameworkプロジェクトでPDFファイルをプログラムで作成する方法を学びましょう。 IronPDF: 完全な.NET PDFライブラリ .NET PDF API .NET開発者のためのチュートリアル:画像2 - .NET PDF API a tutorial for .NET developers に関連する7件の画像中2件目。 IronPDFは、.NET開発者のための最高のPDFライブラリとして際立っており、Web APIプロジェクトでのPDF生成を簡単で信頼性の高いものにする包括的な機能のセットを提供しています。 Chromeのレンダリングエンジン上に構築されているため、ピクセルパーフェクトなHTMLからPDFへの変換が可能です。 すべてのスタイリング、JavaScript実行、レスポンシブレイアウトを維持しながら、これを実行します。 IronPDFが.NET PDF API開発に理想的な理由となる主な機能: Chromeベースのレンダリング:Google Chromeのレンダリングエンジンを活用し、HTMLコンテンツからPDFドキュメントを正確に変換し、埋め込まれた画像やその他のWeb資産を完全にサポートします。 豊富な機能セット:デジタル署名、PDF フォーム、注釈、暗号化、圧縮など、新規および既存の文書の編集をサポートします。 セキュアなPDFドキュメントの作成:暗号化、電子署名、文書保護により、機密性の高い PDF コンテンツを管理します。 複数の入力フォーマット:HTML、URL、画像、Office文書を使用してPDF文書を作成します。 高度な操作:PDF ページの結合、ドキュメントの分割、透かしの適用、インタラクティブな PDF フォームの作成、プログラムによる PDF ファイルの操作。 クロスプラットフォーム サポート: Windows、 Linux 、macOS、 Docker 、クラウド プラットフォームで動作します。 パフォーマンスの最適化:非同期操作、効率的なメモリ管理、高速レンダリング。 PDFドキュメントAPIプロジェクトのセットアップ方法 新しいASP.NET Core Web APIプロジェクトを作成し、必要なパッケージをインストールするところから始めましょう。 前提条件 .NET 6.0 SDK以降 Visual Studio 2022またはVisual Studio Code Postmanまたは類似のAPIテストツールを使ったPDF REST APIのテスト プロジェクトの作成 まず、PDF生成ツールを構築するプロジェクトを作成しましょう。 dotnet new webapi -n PdfApiService cd PdfApiService dotnet new webapi -n PdfApiService cd PdfApiService SHELL IronPDFのインストール 次のステップは、NuGetを介してIronPDFをプロジェクトに追加することです。 dotnet add package IronPDF dotnet add package IronPDF SHELL または、Visual StudioのNuGetパッケージマネージャーコンソールを使用して: Install-Package IronPDF プロジェクト構造 C#開発の重要な側面は、クリーンでよく構造化されたプロジェクトフォルダを維持することです。 例えば: .NET PDF API .NET開発者のためのチュートリアル:イメージ3 - プロジェクトフォルダ構造。 最初のPDFエンドポイントを作成する方法 HTMLをPDF形式に変換するシンプルなエンドポイントを構築しましょう。 まず、サービスインターフェースと実装を作成します: PDFサービスの作成 まず、IPdfService.csファイルに以下を追加します: public interface IPdfService { byte[] GeneratePdfFromHtml(string htmlContent); byte[] GeneratePdfFromUrl(string url); } public interface IPdfService { byte[] GeneratePdfFromHtml(string htmlContent); byte[] GeneratePdfFromUrl(string url); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel PdfService.csファイルに、次のように追加します: using IronPdf; public class PdfService : IPdfService { private readonly ChromePdfRenderer _renderer; public PdfService() { _renderer = new ChromePdfRenderer(); // Configure rendering options for optimal PDF generation in .NET _renderer.RenderingOptions.MarginTop = 20; _renderer.RenderingOptions.MarginBottom = 20; _renderer.RenderingOptions.PrintHtmlBackgrounds = true; } public byte[] GeneratePdfFromHtml(string htmlContent) { // Generate PDF from HTML using the .NET PDF API var pdf = _renderer.RenderHtmlAsPdf(htmlContent); return pdf.BinaryData; } public byte[] GeneratePdfFromUrl(string url) { // Convert URL to PDF in the REST API var pdf = _renderer.RenderUrlAsPdf(url); return pdf.BinaryData; } } using IronPdf; public class PdfService : IPdfService { private readonly ChromePdfRenderer _renderer; public PdfService() { _renderer = new ChromePdfRenderer(); // Configure rendering options for optimal PDF generation in .NET _renderer.RenderingOptions.MarginTop = 20; _renderer.RenderingOptions.MarginBottom = 20; _renderer.RenderingOptions.PrintHtmlBackgrounds = true; } public byte[] GeneratePdfFromHtml(string htmlContent) { // Generate PDF from HTML using the .NET PDF API var pdf = _renderer.RenderHtmlAsPdf(htmlContent); return pdf.BinaryData; } public byte[] GeneratePdfFromUrl(string url) { // Convert URL to PDF in the REST API var pdf = _renderer.RenderUrlAsPdf(url); return pdf.BinaryData; } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel PdfServiceは、HTMLをPDFに変換するコアプロセスを処理します。 IronPDFのChromePdfRendererを利用して、このクラスはページマージンや背景レンダリングのような賢明なデフォルトを設定し、洗練された最終ドキュメントを作成します。 コントローラーが生のHTMLを通過させると、サービスはIronPDFを使用してそれをプロフェッショナル品質のPDFにレンダリングし、その結果をダウンロード準備が整ったバイトデータとして返します。 また、URLを直接PDFに変換して、ウェブページ全体を処理することも可能です。 コントローラの作成 次に、APIのコントローラを作成する時が来ました。 これにより、HTMLからPDFファイルを生成するAPIエンドポイントが提供されます。 その後、PDFドキュメントをシステムにダウンロードして保存し、さらなる使用や共有が可能です。 // Controllers/PdfController.cs using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class PdfController : ControllerBase { private readonly IPdfService _pdfService; public PdfController(IPdfService pdfService) { _pdfService = pdfService; } [HttpPost("html-to-pdf")] public IActionResult ConvertHtmlToPdf([FromBody] HtmlRequest request) { try { var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent); // Return as downloadable file return File(pdfBytes, "application/pdf", "document.pdf"); } catch (Exception ex) { return BadRequest($"Error generating PDF: {ex.Message}"); } } } // Controllers/PdfController.cs using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/[controller]")] public class PdfController : ControllerBase { private readonly IPdfService _pdfService; public PdfController(IPdfService pdfService) { _pdfService = pdfService; } [HttpPost("html-to-pdf")] public IActionResult ConvertHtmlToPdf([FromBody] HtmlRequest request) { try { var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent); // Return as downloadable file return File(pdfBytes, "application/pdf", "document.pdf"); } catch (Exception ex) { return BadRequest($"Error generating PDF: {ex.Message}"); } } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 次に、HtmlRequest.csファイルに、次のように追加します: // Models/HtmlRequest.cs public class HtmlRequest { public string HtmlContent { get; set; } public string FileName { get; set; } = "document.pdf"; } // Models/HtmlRequest.cs public class HtmlRequest { public string HtmlContent { get; set; } public string FileName { get; set; } = "document.pdf"; } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 最初のファイルでは、HTMLをダウンロード可能なPDFに変換するシンプルなAPIエンドポイントを設定します。 誰かが単純なPOSTリクエストでapi/pdf/html-to-pdfルートにHTMLコンテンツを送信すると、PdfControllerはそれをPDFに変換する仕事を専用のサービスに渡します。 PDFが作成されると、コントローラはそれをすぐにダウンロードできるファイルとしてユーザーに返します。リクエスト自体は、HtmlRequestモデルを使用して構造化され、生のHTMLと最終ドキュメントのオプションのファイル名の両方を運びます。 要するに、このセットアップにより、クライアントはHTMLを送信してすぐに洗練されたPDFを取得することが容易になります。 サービスの登録 PDFサービスを登録するために、Program.csを更新してください: var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Register PDF service builder.Services.AddSingleton<IPdfService, PdfService>(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.MapControllers(); app.Run(); var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Register PDF service builder.Services.AddSingleton<IPdfService, PdfService>(); var app = builder.Build(); if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.MapControllers(); app.Run(); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel さまざまなレスポンスタイプの処理方法 APIは、クライアントのニーズに基づいてPDFを返すさまざまな方法をサポートすべきです: [HttpPost("generate")] public IActionResult GeneratePdf([FromBody] PdfRequest request) { var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent); switch (request.ResponseType?.ToLower()) { case "base64": return Ok(new { data = Convert.ToBase64String(pdfBytes), filename = request.FileName }); case "inline": return File(pdfBytes, "application/pdf"); default: // download return File(pdfBytes, "application/pdf", request.FileName); } } [HttpPost("generate")] public IActionResult GeneratePdf([FromBody] PdfRequest request) { var pdfBytes = _pdfService.GeneratePdfFromHtml(request.HtmlContent); switch (request.ResponseType?.ToLower()) { case "base64": return Ok(new { data = Convert.ToBase64String(pdfBytes), filename = request.FileName }); case "inline": return File(pdfBytes, "application/pdf"); default: // download return File(pdfBytes, "application/pdf", request.FileName); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel ここで、コントローラにより柔軟なPDF生成エンドポイントを追加しました。 常にファイルのダウンロードを強制する代わりに、GeneratePdfメソッドでは、クライアントがどのように結果を返したいかを選択できます。 このオプションは柔軟性を提供し、PDFをさまざまな形式で表示できるようにします:ダウンロード可能なファイルとして、ブラウザ内で直接表示、またはAPIで簡単に使用できるBase64文字列として。 リクエストはPdfRequestモデルで定義され、以前のHtmlRequestをベースに、ResponseTypeオプションが追加されています。 要するに、これにより、ユーザーがPDFを受け取る方法に関する制御が強まり、APIがもっと多様性を持ち、ユーザーフレンドリーになります。 今プログラムを実行すると、Swaggerでこの出力が表示されます。 .NET PDF API .NET開発者のためのチュートリアル:画像4 - Swagger UI. 共通のPDF操作を実装する方法 さまざまなPDF生成シナリオを処理するために、サービスを拡張しましょう: URLからPDFへの変換 [HttpPost("url-to-pdf")] public async Task<IActionResult> ConvertUrlToPdf([FromBody] UrlRequest request) { try { var pdfBytes = await Task.Run(() => _pdfService.GeneratePdfFromUrl(request.Url)); return File(pdfBytes, "application/pdf", $"{request.FileName ?? "website"}.pdf"); } catch (Exception ex) { return BadRequest($"Failed to convert URL: {ex.Message}"); } } public class UrlRequest { public string Url { get; set; } public string FileName { get; set; } } [HttpPost("url-to-pdf")] public async Task<IActionResult> ConvertUrlToPdf([FromBody] UrlRequest request) { try { var pdfBytes = await Task.Run(() => _pdfService.GeneratePdfFromUrl(request.Url)); return File(pdfBytes, "application/pdf", $"{request.FileName ?? "website"}.pdf"); } catch (Exception ex) { return BadRequest($"Failed to convert URL: {ex.Message}"); } } public class UrlRequest { public string Url { get; set; } public string FileName { get; set; } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel このエンドポイントは、クライアントがURLを送信すると、そのウェブページのダウンロード可能なPDFを返します。 POST /api/pdf/url-to-pdf リクエストが来ると、コントローラは _pdfService を使用して、与えられた URL をバックグラウンドで PDF バイトに変換し、ファイルのダウンロードとして返します。 変換中に何かがうまくいかなかった場合、明確なエラーメッセージで優雅に応答します。 "https://www.apple.com/nz" のURLを使用してPOSTリクエストを試してみましょう。以下は取得した出力です。 出力 .NET PDF API .NET開発者のためのチュートリアル:画像5 - URL PDF出力。 カスタム透かしの追加 public byte[] AddWatermarkFromFile(string filePath, string watermarkText) { // Load PDF directly from file var pdf = PdfDocument.FromFile(filePath); pdf.ApplyWatermark( $"<h1 style='color:red;font-size:72px;'>{watermarkText}</h1>", 75, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center ); return pdf.BinaryData; } public byte[] AddWatermarkFromFile(string filePath, string watermarkText) { // Load PDF directly from file var pdf = PdfDocument.FromFile(filePath); pdf.ApplyWatermark( $"<h1 style='color:red;font-size:72px;'>{watermarkText}</h1>", 75, IronPdf.Editing.VerticalAlignment.Middle, IronPdf.Editing.HorizontalAlignment.Center ); return pdf.BinaryData; } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel ここでは、テスト目的のためにローカルファイルを手動で読み込んでいます。 ただし、PDF APIでPDFドキュメントを生成し、それにカスタムの透かしを適用するよう調整することができます。 透かしの出力 .NET PDF API .NET開発者のためのチュートリアル:画像6 - 上記のコード例からの透かし出力。 テンプレートで動的データを追加する方法 実際の世界のアプリケーションでは、動的データを含むテンプレートからPDFを生成する必要がよくあります: [HttpPost("from-template")] public IActionResult GenerateFromTemplate([FromBody] TemplateRequest request) { // Simple template replacement var html = request.Template; foreach (var item in request.Data) { html = html.Replace($"{{{{{item.Key}}}}}", item.Value); } var pdfBytes = _pdfService.GeneratePdfFromHtml(html); return File(pdfBytes, "application/pdf", request.FileName); } public class TemplateRequest { public string Template { get; set; } public Dictionary<string, string> Data { get; set; } public string FileName { get; set; } = "document.pdf"; } [HttpPost("from-template")] public IActionResult GenerateFromTemplate([FromBody] TemplateRequest request) { // Simple template replacement var html = request.Template; foreach (var item in request.Data) { html = html.Replace($"{{{{{item.Key}}}}}", item.Value); } var pdfBytes = _pdfService.GeneratePdfFromHtml(html); return File(pdfBytes, "application/pdf", request.FileName); } public class TemplateRequest { public string Template { get; set; } public Dictionary<string, string> Data { get; set; } public string FileName { get; set; } = "document.pdf"; } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel Razor、Handlebars、他のエンジンを使用した高度なテンプレートシナリオについては、IronPDFのHTMLからPDFへのドキュメンテーションをご確認ください。 また、MVCアプリケーションでのCSHTMLからPDF変換や、BlazorアプリケーションでのRazorからPDF変換を探索することもできます。 パフォーマンスを最適化する方法 本番PDF APIを構築する際には、パフォーマンスが重要です。 最適化のための重要な戦略は以下の通りです: 非同期オペレーション I/Oオペレーションを含むプロジェクトを構築する際には、非同期コーディングを使用するのが賢明です。 これは特に、PDFコンテンツが外部リソースから来る場合に役立ちます: HTML ページのダウンロード (RenderUrlAsPdf<//code>) 画像、CSS、フォントのHTTPによる取得 ディスクやクラウドストレージへの読み込み/書き込み これらのオペレーションはスレッドをブロックする可能性がありますが、非同期を使用することでAPIスレッドが待機状態になることを防ぎます。 例: public async Task<byte[]> GeneratePdfFromHtmlAsync(string htmlContent) { return await Task.Run(() => { var pdf = _renderer.RenderHtmlAsPdf(htmlContent); return pdf.BinaryData; }); } public async Task<byte[]> GeneratePdfFromHtmlAsync(string htmlContent) { return await Task.Run(() => { var pdf = _renderer.RenderHtmlAsPdf(htmlContent); return pdf.BinaryData; }); } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel レンダリングオプション IronPDFを最適なパフォーマンスに設定します: _renderer.RenderingOptions.EnableJavaScript = false; // If JS not needed _renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; _renderer.RenderingOptions.RenderDelay = 0; // Remove if no JS _renderer.RenderingOptions.Timeout = 30; // Set reasonable timeout _renderer.RenderingOptions.EnableJavaScript = false; // If JS not needed _renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print; _renderer.RenderingOptions.RenderDelay = 0; // Remove if no JS _renderer.RenderingOptions.Timeout = 30; // Set reasonable timeout IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel PDF APIをセキュリティで守る方法 セキュリティは、どの本番APIにおいても不可欠です。 シンプルなAPIキーベースの認証アプローチは以下の通りです: // Middleware/ApiKeyMiddleware.cs public class ApiKeyMiddleware { private readonly RequestDelegate _next; private const string ApiKeyHeader = "X-API-Key"; public ApiKeyMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { if (!context.Request.Headers.TryGetValue(ApiKeyHeader, out var apiKey)) { context.Response.StatusCode = 401; await context.Response.WriteAsync("API Key required"); return; } // Validate API key (in production, check against database) var validApiKey = context.RequestServices .GetRequiredService<IConfiguration>()["ApiKey"]; if (apiKey != validApiKey) { context.Response.StatusCode = 403; await context.Response.WriteAsync("Invalid API Key"); return; } await _next(context); } } // In Program.cs app.UseMiddleware<ApiKeyMiddleware>(); // Middleware/ApiKeyMiddleware.cs public class ApiKeyMiddleware { private readonly RequestDelegate _next; private const string ApiKeyHeader = "X-API-Key"; public ApiKeyMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { if (!context.Request.Headers.TryGetValue(ApiKeyHeader, out var apiKey)) { context.Response.StatusCode = 401; await context.Response.WriteAsync("API Key required"); return; } // Validate API key (in production, check against database) var validApiKey = context.RequestServices .GetRequiredService<IConfiguration>()["ApiKey"]; if (apiKey != validApiKey) { context.Response.StatusCode = 403; await context.Response.WriteAsync("Invalid API Key"); return; } await _next(context); } } // In Program.cs app.UseMiddleware<ApiKeyMiddleware>(); IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 高度な認証シナリオを検討してください: JWT認証 - API認証の業界標準 OAuth 2.0 - サードパーティ統合向け Azure AD統合 - エンタープライズ認証 APIレート制限 - 乱用を防ぎ公平な利用を確保 実践例: 請求書生成API 完全な実装を示す実用的な請求書生成エンドポイントを構築しましょう。 この例はどのように本番環境の.NET PDF APIが動的データを持つプロフェッショナルな請求書を生成できるか示しています。 今IronPDFを始めましょう。 無料で始める まず、Modelsフォルダ内に新しいファイルを作成します。 ここでは、Invoice.csとしました。 その後、新しいファイルに次のコードを追加します。 public class Invoice { public string InvoiceNumber { get; set; } public DateTime Date { get; set; } public string CustomerName { get; set; } public string CustomerAddress { get; set; } public List<InvoiceItem> Items { get; set; } public decimal Tax { get; set; } } public class InvoiceItem { public string Description { get; set; } public int Quantity { get; set; } public decimal UnitPrice { get; set; } public decimal Total => Quantity * UnitPrice; } public class Invoice { public string InvoiceNumber { get; set; } public DateTime Date { get; set; } public string CustomerName { get; set; } public string CustomerAddress { get; set; } public List<InvoiceItem> Items { get; set; } public decimal Tax { get; set; } } public class InvoiceItem { public string Description { get; set; } public int Quantity { get; set; } public decimal UnitPrice { get; set; } public decimal Total => Quantity * UnitPrice; } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 次に、請求書ジェネレーターのための新しいサービスファイルを作成する必要があります。 Servicesフォルダ内に次のコードを追加します。 私の場合は、InvoiceService.csという新しいファイルを作りました。 このコードはInvoice PDFファイルのスタイリングとレイアウトの処理をします。 public class InvoiceService { private readonly ChromePdfRenderer _renderer; public InvoiceService() { _renderer = new ChromePdfRenderer(); _renderer.RenderingOptions.MarginTop = 10; _renderer.RenderingOptions.MarginBottom = 10; _renderer.RenderingOptions.PrintHtmlBackgrounds = true; } public byte[] GenerateInvoice(Invoice invoice) { var html = BuildInvoiceHtml(invoice); // Add footer with page numbers _renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { MaxHeight = 15, HtmlFragment = "<center><i>{page} of {total-pages}</i></center>", DrawDividerLine = true }; var pdf = _renderer.RenderHtmlAsPdf(html); return pdf.BinaryData; } private string BuildInvoiceHtml(Invoice invoice) { var subtotal = invoice.Items.Sum(i => i.Total); var taxAmount = subtotal * (invoice.Tax / 100); var total = subtotal + taxAmount; var itemsHtml = string.Join("", invoice.Items.Select(item => $@"<tr> <td>{item.Description}</td> <td class='text-center'>{item.Quantity}</td> <td class='text-right'>${item.UnitPrice:F2}</td> <td class='text-right'>${item.Total:F2}</td> </tr>")); return $@" <!DOCTYPE html> <html> <head> <style> body {{ font-family: Arial, sans-serif; }} .invoice-header {{ background-color: #f8f9fa; padding: 20px; margin-bottom: 20px; }} table {{ width: 100%; border-collapse: collapse; }} th, td {{ padding: 10px; border-bottom: 1px solid #ddd; }} th {{ background-color: #007bff; color: white; }} .text-right {{ text-align: right; }} .text-center {{ text-align: center; }} .total-section {{ margin-top: 20px; text-align: right; }} </style> </head> <body> <div class='invoice-header'> <h1>Invoice #{invoice.InvoiceNumber}</h1> <p>Date: {invoice.Date:yyyy-MM-dd}</p> </div> <div> <h3>Bill To:</h3> <p>{invoice.CustomerName}<br/>{invoice.CustomerAddress}</p> </div> <table> <thead> <tr> <th>Description</th> <th>Quantity</th> <th>Unit Price</th> <th>Total</th> </tr> </thead> <tbody> {itemsHtml} </tbody> </table> <div class='total-section'> <p>Subtotal: ${subtotal:F2}</p> <p>Tax ({invoice.Tax}%): ${taxAmount:F2}</p> <h3>Total: ${total:F2}</h3> </div> </body> </html>"; } } public class InvoiceService { private readonly ChromePdfRenderer _renderer; public InvoiceService() { _renderer = new ChromePdfRenderer(); _renderer.RenderingOptions.MarginTop = 10; _renderer.RenderingOptions.MarginBottom = 10; _renderer.RenderingOptions.PrintHtmlBackgrounds = true; } public byte[] GenerateInvoice(Invoice invoice) { var html = BuildInvoiceHtml(invoice); // Add footer with page numbers _renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter { MaxHeight = 15, HtmlFragment = "<center><i>{page} of {total-pages}</i></center>", DrawDividerLine = true }; var pdf = _renderer.RenderHtmlAsPdf(html); return pdf.BinaryData; } private string BuildInvoiceHtml(Invoice invoice) { var subtotal = invoice.Items.Sum(i => i.Total); var taxAmount = subtotal * (invoice.Tax / 100); var total = subtotal + taxAmount; var itemsHtml = string.Join("", invoice.Items.Select(item => $@"<tr> <td>{item.Description}</td> <td class='text-center'>{item.Quantity}</td> <td class='text-right'>${item.UnitPrice:F2}</td> <td class='text-right'>${item.Total:F2}</td> </tr>")); return $@" <!DOCTYPE html> <html> <head> <style> body {{ font-family: Arial, sans-serif; }} .invoice-header {{ background-color: #f8f9fa; padding: 20px; margin-bottom: 20px; }} table {{ width: 100%; border-collapse: collapse; }} th, td {{ padding: 10px; border-bottom: 1px solid #ddd; }} th {{ background-color: #007bff; color: white; }} .text-right {{ text-align: right; }} .text-center {{ text-align: center; }} .total-section {{ margin-top: 20px; text-align: right; }} </style> </head> <body> <div class='invoice-header'> <h1>Invoice #{invoice.InvoiceNumber}</h1> <p>Date: {invoice.Date:yyyy-MM-dd}</p> </div> <div> <h3>Bill To:</h3> <p>{invoice.CustomerName}<br/>{invoice.CustomerAddress}</p> </div> <table> <thead> <tr> <th>Description</th> <th>Quantity</th> <th>Unit Price</th> <th>Total</th> </tr> </thead> <tbody> {itemsHtml} </tbody> </table> <div class='total-section'> <p>Subtotal: ${subtotal:F2}</p> <p>Tax ({invoice.Tax}%): ${taxAmount:F2}</p> <h3>Total: ${total:F2}</h3> </div> </body> </html>"; } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 最後に、新しい請求書をAPIを通じて作成およびアクセスするための新しいコントローラーを作成する必要があります。 [ApiController] [Route("api/[controller]")] public class InvoiceController : ControllerBase { private readonly InvoiceService _invoiceService; public InvoiceController(InvoiceService invoiceService) { _invoiceService = invoiceService; } [HttpPost("generate")] public IActionResult GenerateInvoice([FromBody] Invoice invoice) { try { ```cs public IActionResult GeneratePDF(Invoice invoice) { try { var pdfBytes = _invoiceService.GenerateInvoice(invoice); var fileName = $"Invoice_{invoice.InvoiceNumber}.pdf"; return File(pdfBytes, "application/pdf", fileName); } catch (Exception ex) { return StatusCode(500, $"Error generating invoice: {ex.Message}"); } } [ApiController] [Route("api/[controller]")] public class InvoiceController : ControllerBase { private readonly InvoiceService _invoiceService; public InvoiceController(InvoiceService invoiceService) { _invoiceService = invoiceService; } [HttpPost("generate")] public IActionResult GenerateInvoice([FromBody] Invoice invoice) { try { ```cs public IActionResult GeneratePDF(Invoice invoice) { try { var pdfBytes = _invoiceService.GenerateInvoice(invoice); var fileName = $"Invoice_{invoice.InvoiceNumber}.pdf"; return File(pdfBytes, "application/pdf", fileName); } catch (Exception ex) { return StatusCode(500, $"Error generating invoice: {ex.Message}"); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 請求書の出力 .NET PDF API .NET開発者のためのチュートリアル:画像7 - PDF請求書出力。 コンテナーデプロイメントの考慮 このチュートリアルはローカル開発に焦点を当てていますが、PDF APIをコンテナ化する簡単な概要は以下の通りです: 基本的なDockerfile FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["PdfApiService.csproj", "."] RUN dotnet restore COPY . . RUN dotnet build -c Release -o /app/build FROM build AS publish RUN dotnet publish -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . # IronPDF requires additional dependencies on Linux RUN apt-get update && apt-get install -y \ libgdiplus \ libc6-dev \ libx11-dev \ && rm -rf /var/lib/apt/lists/* ENTRYPOINT ["dotnet", "PdfApiService.dll"] あなたの.NET PDF APIのための詳細なデプロイメントガイドはこちら: IronPDF Dockerドキュメント - 完全なコンテナ化ガイド IronPDF Azureデプロイ - Azure FunctionsおよびApp Service IronPDF AWSデプロイ - LambdaおよびEC2デプロイ IronPDF Linuxセットアップ - Linux特定の設定 エラーハンドリングのベストプラクティス より耐障害性のあるプログラムを作成するために、以下のような一貫したエラーレスポンスのためのグローバルエラーハンドラーを実装することがベストプラクティスです: // Middleware/ErrorHandlingMiddleware.cs public class ErrorHandlingMiddleware { private readonly RequestDelegate _next; public ErrorHandlingMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (Exception ex) { await HandleExceptionAsync(context, ex); } } private static async Task HandleExceptionAsync(HttpContext context, Exception ex) { context.Response.ContentType = "application/json"; context.Response.StatusCode = 500; var response = new { error = "An error occurred processing your request", message = ex.Message }; await context.Response.WriteAsync(JsonSerializer.Serialize(response)); } } // Middleware/ErrorHandlingMiddleware.cs public class ErrorHandlingMiddleware { private readonly RequestDelegate _next; public ErrorHandlingMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (Exception ex) { await HandleExceptionAsync(context, ex); } } private static async Task HandleExceptionAsync(HttpContext context, Exception ex) { context.Response.ContentType = "application/json"; context.Response.StatusCode = 500; var response = new { error = "An error occurred processing your request", message = ex.Message }; await context.Response.WriteAsync(JsonSerializer.Serialize(response)); } } IRON VB CONVERTER ERROR developers@ironsoftware.com $vbLabelText $csharpLabel 特定のIronPDFトラブルシューティングシナリオについては、IronPDFトラブルシューティングガイドを参照してください。 結論 これで、ASP.NET CoreおよびIronPDFを使用した強力な.NET PDF APIを構築し、さまざまなドキュメント生成のシナリオを処理できるようになりました。 このREST APIは、アプリケーション全体で集中管理されたPDF操作のための堅牢な基盤を提供します。 主なポイント: IronPdfはChromeベースのレンダリングにより、Web APIプロジェクトでのPDF生成を簡単にします。 IronPDFの高度な編集ツールを使って、既存のPDFドキュメントを編集するためのWeb APIを簡単に調整することができます。 RESTful設計の原則は、PDF APIが直感的で保守可能であることを保証します。 適切なエラー処理とセキュリティ対策は、本番環境では不可欠です。 非同期操作とキャッシュによるパフォーマンスの最適化により、スケーラビリティが向上します。 スケーラブルなドキュメントソリューションで、デスクトップおよびウェブアプリケーションをサポートしていただきます。 IronPDFは開発者にPDFドキュメントを作成し、PDFファイルを保存し、HTMLを効率的に変換させることで、現代の.NET Frameworkアプリケーションに必須のPDFドキュメントAPIを提供します。 次のステップ 本番用.NET PDF APIにIronPDFを実装する準備はできましたか? 次のアクションはこちらです: 1.無料トライアルを開始 - IronPDFの全機能を開発環境でテストしてください。 2.高度な機能を探求する - デジタル署名、PDFフォーム、およびその他の高度なPDF機能をチェックしてください。 3.自信を持って拡張する - 本番APIのニーズのために、ライセンスオプションを確認してください。 あなたの.NET PDF APIを今日構築して、アプリケーション全体のドキュメント生成をIronPDFで合理化してください! よくある質問 IronPDFは.NETアプリケーションで何に使われていますか? IronPDFは.NETアプリケーション内でPDFを生成、操作、変換するために使用され、集中型PDFサービスの作成に理想的です。 IronPDF はどのようにASP.NET Coreと統合できますか? IronPDF NuGetパッケージをインストールすることで、IronPDFをASP.NET Coreに統合し、集中型のPDF生成サービスを構築することができます。 PDF生成のためのIronPdfの主な機能は何ですか? IronPDFの主な機能には、HTMLからPDFへの変換、PDFの結合と分割、ヘッダーとフッターの追加、テキストと画像の抽出などがあります。 IronPdfは複雑なPDFレイアウトに対応できますか? IronPDFはHTMLやCSSのコンテンツを正確にレンダリングされたPDFドキュメントに変換するため、複雑なPDFレイアウトを扱うことができます。 IronPDFでPDF作成をカスタマイズすることは可能ですか? はい、IronPdfはPDFの作成において、ページサイズや余白の設定、透かしや注釈の追加などのカスタマイズが可能です。 IronPDFはPDFのセキュリティ機能をサポートしていますか? IronPDFは生成されたPDFドキュメントを保護するためにパスワード保護や暗号化などのPDFセキュリティ機能をサポートしています。 IronPDFはどのようなフォーマットをPDFに変換できますか? IronPdfはHTML、URL、ASPXファイルを含む様々なフォーマットをPDFに変換することができます。 IronPDFはどのように大規模なPDF生成に対応していますか? IronPDFはパフォーマンスのために最適化されており、.NETアプリケーション内で大規模なPDF生成タスクを効率的に処理することができます。 IronPDFはクラウドベースのアプリケーションで使用できますか? はい、IronPdfはクラウドベースのアプリケーションで使用することができ、スケーラブルなPDFサービスのためにAzureやAWSのようなプラットフォームへのデプロイをサポートします。 IronPDFはどのバージョンの.NETをサポートしていますか? IronPDFは.NET Coreと.NET Frameworkを含む複数の.NETバージョンをサポートし、幅広いプロジェクトとの互換性を保証します。 カーティス・チャウ 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 公開日 12月 18, 2025 Aspose C#とIronPDFを使ってPDFを作成する方法 開発者向けにデザインされたこのステップバイステップのガイドで、Aspose C#とIronPDFを使ってPDFを作成する方法を学んでください。 詳しく読む 公開日 12月 18, 2025 IronPDF .NET Core PDFジェネレータの作成 IronPDFを使用して.NET Coreで強力なPDFジェネレーターを構築します。HTMLをPDFに変換し、請求書を作成し、ピクセルパーフェクトレンダリングでレポートを生成します。 詳しく読む 公開日 12月 18, 2025 C#でIronPDFを使って2つのPDFバイト配列をマージする方法 IronPDFを使用してC#で2つのPDFバイト配列をマージします。バイト配列、メモリストリーム、データベースから複数のPDFファイルを組み合わせる方法を簡単なコード例で学びましょう。 詳しく読む IronPDF .NET Core PDFジェネレ...
公開日 12月 18, 2025 Aspose C#とIronPDFを使ってPDFを作成する方法 開発者向けにデザインされたこのステップバイステップのガイドで、Aspose C#とIronPDFを使ってPDFを作成する方法を学んでください。 詳しく読む
公開日 12月 18, 2025 IronPDF .NET Core PDFジェネレータの作成 IronPDFを使用して.NET Coreで強力なPDFジェネレーターを構築します。HTMLをPDFに変換し、請求書を作成し、ピクセルパーフェクトレンダリングでレポートを生成します。 詳しく読む
公開日 12月 18, 2025 C#でIronPDFを使って2つのPDFバイト配列をマージする方法 IronPDFを使用してC#で2つのPDFバイト配列をマージします。バイト配列、メモリストリーム、データベースから複数のPDFファイルを組み合わせる方法を簡単なコード例で学びましょう。 詳しく読む