IronPDF を使用した Azure PDF ジェネレーターの作成 (.NET 10 ガイド)
IronPDF のプロフェッショナル レンダリング エンジンと Azure の柔軟なクラウド インフラストラクチャを組み合わせると、Azure PDF の生成が簡単になります。 このガイドでは、HTML 変換から複雑なドキュメント操作まですべてを処理する、本番環境対応の PDF ジェネレーターを構築、展開、調整する方法を説明します。
クラウドベースの信頼性の高いPDFジェネレーターを構築することは、独自の課題を提示します。 サンドボックスの制限、メモリの制限、分散システムの複雑さなどにより、多くの開発者は本番環境に対応したソリューションを見つけるのに苦労しています。 ここでAzureとIronPDF がうまく連携します。IronPDFは、基本的な機能を維持しながら、ワークロードに合わせて拡張できるプロフェッショナルなPDF 生成を提供します。
このガイドでは、請求書やレポートを生成する場合や、Web コンテンツを PDF に変換する場合など、信頼性の高い Azure PDF ジェネレーターを構築する方法を説明します。 パフォーマンスとコストを調整しながら、単純なHTML 変換から複雑なドキュメント操作まですべてを処理します。
無料のIronPDFトライアルを開始し、手順に従ってクラウド PDF ソリューションを構築してください。
優れたAzure PDFジェネレーターの特徴とは?
すべての PDF ソリューションがクラウド環境で適切に動作するわけではありません。 実稼働対応の Azure PDF ジェネレーターは、基本的なドキュメント作成を超えた重要な要件を満たす必要があります。 Azure Functions のデプロイ オプションを理解することで、成功が保証されます。
クラウド PDF 生成においてパフォーマンスが重要な理由
パフォーマンスとスケーラビリティがソリューションの成功を決定します。 ジェネレーターは、ボトルネックなしで同時リクエストを処理し、ピーク時に自動的にスケーリングし、複雑なドキュメントで一貫した応答時間を維持する必要があります。 サーバーレス アーキテクチャのニュアンスを理解しているクラウド環境向けに構築されたライブラリを選択します。
考慮すべき Azure 固有の制約は何ですか?
Azure のプラットフォームには特定の考慮事項があります。 アプリサービス サンドボックスでは Win32/グラフィックス API が制限されており、デスクトップ グラフィックス スタックを使用するライブラリは失敗する可能性があります。 消費プランのメモリ制約により、大きなドキュメントでは障害が発生します。 分散型の性質により、効率的なステートレス操作が必要になります。 Azure デプロイの詳細なトラブルシューティングについては、完全なトラブルシューティング ドキュメントを参照してください。
必須のエンタープライズ機能はどれですか?
エンタープライズ アプリケーションでは、HTML 変換以上のものが必要です。 最新の PDF ジェネレーターは、 JavaScriptレンダリングをサポートし、複雑な CSS を処理し、暗号化やデジタル署名などのセキュリティ機能を提供する必要があります。 IronPDF はChrome ベースのレンダリング エンジンでこれらの問題に対処しており、Azure での展開に最適です。
Azure アプリサービスs と Azure Functions の違いは何ですか?
Azure アプリサービスs と Azure Functions はどちらもクラウド アプリケーションをホストしますが、目的は異なります。 適切なものを選択すると、アーキテクチャ、コスト モデル、展開アプローチに影響します。
Azure アプリサービスs をどのように選択しますか?
Azure アプリサービスs は、 Web アプリ、REST API、モバイル バックエンドの完全に管理されたホスティングを提供します。 永続的なリソースを提供し、長時間実行されるプロセスをサポートし、組み込みのスケーリング、デプロイメント スロット、CI/CD 統合を備えています。 これらの機能により、継続的に実行されるアプリケーションに最適です。
Azure Functions がより良い選択であると判断するにはどうすればよいでしょうか?
Azure Functions は、イベント ドリブンの短命タスクにサーバーレス コンピューティングを提供します。 関数はトリガー(HTTPリクエスト、タイマー、またはメッセージキュー)された場合にのみ実行され、実行時間に対してのみ課金されます。バックグラウンドジョブ、データ処理、自動化スクリプト、そしてホストを常時実行することなくマイクロサービスを実行するのに最適です。
| 特徴 | アプリサービス | Azure Functions |
|---|---|---|
| 課金モデル | 月額固定 | 実行ごと |
| アイドルコスト | 常に請求される | アイドリング時のゼロ |
| コールドスタートリスク | 最小限 | はい(消費プラン) |
| 長時間実行されるPDF | サポートされています | タイムアウト制限が適用されます |
| カスタムコンテナ | サポートされています | プレミアム/専用のみ |
Azure Functions にIronPDFをインストールするにはどうすればよいでしょうか?
Azure Functions でIronPDFをセットアップするには、適切なパッケージを選択する必要があります。 ライブラリは、Windows 環境と Linux 環境向けのオプションを提供します。 適切なパッケージを選択すると、最適なパフォーマンスが保証され、互換性の問題を回避できます。
どのIronPDFパッケージをインストールする必要がありますか?
Windows ベースの Azure Functions の場合は、 NuGetで入手できる標準のIronPDFパッケージを使用します。 Linuxコンテナでは、コールドスタートを高速化するために、IronPdf.Linux@をrun-from-packageデプロイメントで使用してください。
# NuGet Package Manager (Windows / アプリサービス)
Install-Package IronPdf
# .NET CLI (cross-platform)
dotnet add package IronPdf
# NuGet Package Manager (Windows / アプリサービス)
Install-Package IronPdf
# .NET CLI (cross-platform)
dotnet add package IronPdf
# Linux / container deployments
Install-Package IronPdf.Linux
# .NET CLI alternative
dotnet add package IronPdf.Linux
# Linux / container deployments
Install-Package IronPdf.Linux
# .NET CLI alternative
dotnet add package IronPdf.Linux
Azure Functions 用にIronPDFを構成するにはどうすればよいですか?
以下は、トップレベルのステートメントを使用して.NET 10 用に適切に構成された PDF 生成を処理する完全な Azure 関数です。
using IronPdf;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System.Net;
// Configure IronPDF once at startup
License.LicenseKey = Environment.GetEnvironmentVariable("IronPdfLicenseKey") ?? string.Empty;
Installation.LinuxAndDockerDependenciesAutoConfig = true;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
Installation.CustomDeploymentDirectory = "/tmp";
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.Build();
host.Run();
// Azure Function class
public class PdfGeneratorFunction
{
private readonly ILogger _logger;
public PdfGeneratorFunction(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<PdfGeneratorFunction>();
}
[Function("GeneratePdf")]
public async Task<HttpResponseData> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "generate-pdf")] HttpRequestData req)
{
string htmlContent = await req.ReadAsStringAsync() ?? string.Empty;
var response = req.CreateResponse(HttpStatusCode.OK);
if (string.IsNullOrWhiteSpace(htmlContent))
{
response.StatusCode = HttpStatusCode.BadRequest;
await response.WriteStringAsync("HTML content is required.");
return response;
}
try
{
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
MarginTop = 10,
MarginBottom = 10,
MarginLeft = 10,
MarginRight = 10,
EnableJavaScript = true
}
};
using var pdf = renderer.RenderHtmlAsPdf(htmlContent);
response.Headers.Add("Content-Type", "application/pdf");
await response.WriteBytesAsync(pdf.BinaryData);
_logger.LogInformation("Generated PDF with {PageCount} pages.", pdf.PageCount);
return response;
}
catch (Exception ex)
{
_logger.LogError(ex, "Error generating PDF.");
response.StatusCode = HttpStatusCode.InternalServerError;
await response.WriteStringAsync($"PDF generation failed: {ex.Message}");
return response;
}
}
}
using IronPdf;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using Microsoft.Extensions.Logging;
using System.Net;
// Configure IronPDF once at startup
License.LicenseKey = Environment.GetEnvironmentVariable("IronPdfLicenseKey") ?? string.Empty;
Installation.LinuxAndDockerDependenciesAutoConfig = true;
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
Installation.CustomDeploymentDirectory = "/tmp";
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.Build();
host.Run();
// Azure Function class
public class PdfGeneratorFunction
{
private readonly ILogger _logger;
public PdfGeneratorFunction(ILoggerFactory loggerFactory)
{
_logger = loggerFactory.CreateLogger<PdfGeneratorFunction>();
}
[Function("GeneratePdf")]
public async Task<HttpResponseData> Run(
[HttpTrigger(AuthorizationLevel.Function, "post", Route = "generate-pdf")] HttpRequestData req)
{
string htmlContent = await req.ReadAsStringAsync() ?? string.Empty;
var response = req.CreateResponse(HttpStatusCode.OK);
if (string.IsNullOrWhiteSpace(htmlContent))
{
response.StatusCode = HttpStatusCode.BadRequest;
await response.WriteStringAsync("HTML content is required.");
return response;
}
try
{
var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
MarginTop = 10,
MarginBottom = 10,
MarginLeft = 10,
MarginRight = 10,
EnableJavaScript = true
}
};
using var pdf = renderer.RenderHtmlAsPdf(htmlContent);
response.Headers.Add("Content-Type", "application/pdf");
await response.WriteBytesAsync(pdf.BinaryData);
_logger.LogInformation("Generated PDF with {PageCount} pages.", pdf.PageCount);
return response;
}
catch (Exception ex)
{
_logger.LogError(ex, "Error generating PDF.");
response.StatusCode = HttpStatusCode.InternalServerError;
await response.WriteStringAsync($"PDF generation failed: {ex.Message}");
return response;
}
}
}
Imports IronPdf
Imports Microsoft.Azure.Functions.Worker
Imports Microsoft.Azure.Functions.Worker.Http
Imports Microsoft.Extensions.Logging
Imports System.Net
' Configure IronPDF once at startup
License.LicenseKey = If(Environment.GetEnvironmentVariable("IronPdfLicenseKey"), String.Empty)
Installation.LinuxAndDockerDependenciesAutoConfig = True
Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
Installation.CustomDeploymentDirectory = "/tmp"
Dim host = New HostBuilder() _
.ConfigureFunctionsWorkerDefaults() _
.Build()
host.Run()
' Azure Function class
Public Class PdfGeneratorFunction
Private ReadOnly _logger As ILogger
Public Sub New(loggerFactory As ILoggerFactory)
_logger = loggerFactory.CreateLogger(Of PdfGeneratorFunction)()
End Sub
<Function("GeneratePdf")>
Public Async Function Run(
<HttpTrigger(AuthorizationLevel.Function, "post", Route:="generate-pdf")> req As HttpRequestData) As Task(Of HttpResponseData)
Dim htmlContent As String = Await req.ReadAsStringAsync() OrElse String.Empty
Dim response = req.CreateResponse(HttpStatusCode.OK)
If String.IsNullOrWhiteSpace(htmlContent) Then
response.StatusCode = HttpStatusCode.BadRequest
Await response.WriteStringAsync("HTML content is required.")
Return response
End If
Try
Dim renderer = New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
.MarginTop = 10,
.MarginBottom = 10,
.MarginLeft = 10,
.MarginRight = 10,
.EnableJavaScript = True
}
}
Using pdf = renderer.RenderHtmlAsPdf(htmlContent)
response.Headers.Add("Content-Type", "application/pdf")
Await response.WriteBytesAsync(pdf.BinaryData)
_logger.LogInformation("Generated PDF with {PageCount} pages.", pdf.PageCount)
Return response
End Using
Catch ex As Exception
_logger.LogError(ex, "Error generating PDF.")
response.StatusCode = HttpStatusCode.InternalServerError
Await response.WriteStringAsync($"PDF generation failed: {ex.Message}")
Return response
End Try
End Function
End Class
これらの構成設定が重要なのはなぜですか?
構成設定により、Azure のデプロイが成功します。 CODE-1469は、Chromeの依存関係を正しく設定し、GPUモードを無効にすることで、サーバーレスレンダリングの問題を防ぎます。 デプロイメントディレクトリを/tmpに設定すると、制限されたAzure Functions環境での書き込みアクセスが可能になります。
例の出力PDFファイル
売上メトリクス、地域データ表、会社のハイライトを示すAzure Functionによって生成された月次レポートPDF(プロフェッショナルな緑色のヘッダー付き)。
PDF 生成にはどの Azure ホスティング レベルを選択すべきですか?
IronPDFを使用した PDF 生成には、軽いワークロードよりも多くのコンピューティングとグラフィック サポートが必要です。 Microsoft とIronPDF はどちらも、GDI+ の制限、共有コンピューティングの制限、およびメモリ不足のため、Free、Shared、および Consumption 層を避けることを推奨しています。
| ティア | GDI+サポート | PDFに適しています | 注意事項 |
|---|---|---|---|
| 無料 / 共有 | なし | なし | 制限付きサンドボックス |
| 消費(機能) | 制限あり | 制限あり | メモリ上限が適用されます |
| ベーシック / スタンダード | はい | はい | 最低限の推奨 |
| プレミアム / 隔離 | はい | はい(ベスト) | フル機能アクセス |
大容量のワークロードの場合、Premium または Isolated レベルでは、専用のコンピューティング、VNET 統合が提供され、コールド スタートの遅延はありません。これらはすべて、PDF のスループットと信頼性を直接向上させる要素です。
Azure Functions を使用してサーバーレス PDF API を構築する方法
Azure Functions を使用してサーバーレス PDF API を構築すると、自動スケーリング、従量課金制、最小限のインフラストラクチャ管理が実現します。 以下の関数は、オプションのセキュリティ設定を含む JSON リクエストを受け入れ、PDF バイト ストリームを返します。
制作 PDF API をどのように構成しますか?
using IronPdf;
using IronPdf.Editing;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.Net;
using System.Text.Json;
public class PdfApiFunction
{
private static readonly ChromePdfRenderer Renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
PrintHtmlBackgrounds = true,
CreatePdfFormsFromHtml = true,
CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
}
};
[Function("ConvertUrlToPdf")]
public async Task<HttpResponseData> ConvertUrl(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
var body = await req.ReadAsStringAsync() ?? "{}";
var request = JsonSerializer.Deserialize<ConvertUrlRequest>(body);
if (string.IsNullOrEmpty(request?.Url))
{
var bad = req.CreateResponse(HttpStatusCode.BadRequest);
await bad.WriteStringAsync("URL is required.");
return bad;
}
using var pdf = Renderer.RenderUrlAsPdf(request.Url);
if (request.AddWatermark)
{
pdf.ApplyWatermark(
"<h2>CONFIDENTIAL</h2>",
30,
VerticalAlignment.Middle,
HorizontalAlignment.Center);
}
if (request.ProtectWithPassword && !string.IsNullOrEmpty(request.Password))
{
pdf.SecuritySettings.UserPassword = request.Password;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
}
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "application/pdf");
await response.WriteBytesAsync(pdf.BinaryData);
return response;
}
}
public class ConvertUrlRequest
{
public string Url { get; set; } = string.Empty;
public bool AddWatermark { get; set; }
public bool ProtectWithPassword { get; set; }
public string Password { get; set; } = string.Empty;
}
using IronPdf;
using IronPdf.Editing;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
using System.Net;
using System.Text.Json;
public class PdfApiFunction
{
private static readonly ChromePdfRenderer Renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
PrintHtmlBackgrounds = true,
CreatePdfFormsFromHtml = true,
CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
}
};
[Function("ConvertUrlToPdf")]
public async Task<HttpResponseData> ConvertUrl(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
var body = await req.ReadAsStringAsync() ?? "{}";
var request = JsonSerializer.Deserialize<ConvertUrlRequest>(body);
if (string.IsNullOrEmpty(request?.Url))
{
var bad = req.CreateResponse(HttpStatusCode.BadRequest);
await bad.WriteStringAsync("URL is required.");
return bad;
}
using var pdf = Renderer.RenderUrlAsPdf(request.Url);
if (request.AddWatermark)
{
pdf.ApplyWatermark(
"<h2>CONFIDENTIAL</h2>",
30,
VerticalAlignment.Middle,
HorizontalAlignment.Center);
}
if (request.ProtectWithPassword && !string.IsNullOrEmpty(request.Password))
{
pdf.SecuritySettings.UserPassword = request.Password;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
}
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "application/pdf");
await response.WriteBytesAsync(pdf.BinaryData);
return response;
}
}
public class ConvertUrlRequest
{
public string Url { get; set; } = string.Empty;
public bool AddWatermark { get; set; }
public bool ProtectWithPassword { get; set; }
public string Password { get; set; } = string.Empty;
}
Imports IronPdf
Imports IronPdf.Editing
Imports Microsoft.Azure.Functions.Worker
Imports Microsoft.Azure.Functions.Worker.Http
Imports System.Net
Imports System.Text.Json
Public Class PdfApiFunction
Private Shared ReadOnly Renderer As New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
.PaperSize = IronPdf.Rendering.PdfPaperSize.A4,
.PrintHtmlBackgrounds = True,
.CreatePdfFormsFromHtml = True,
.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
}
}
<Function("ConvertUrlToPdf")>
Public Async Function ConvertUrl(
<HttpTrigger(AuthorizationLevel.Function, "post")> req As HttpRequestData) As Task(Of HttpResponseData)
Dim body As String = Await req.ReadAsStringAsync() ?? "{}"
Dim request As ConvertUrlRequest = JsonSerializer.Deserialize(Of ConvertUrlRequest)(body)
If String.IsNullOrEmpty(request?.Url) Then
Dim bad As HttpResponseData = req.CreateResponse(HttpStatusCode.BadRequest)
Await bad.WriteStringAsync("URL is required.")
Return bad
End If
Using pdf = Renderer.RenderUrlAsPdf(request.Url)
If request.AddWatermark Then
pdf.ApplyWatermark(
"<h2>CONFIDENTIAL</h2>",
30,
VerticalAlignment.Middle,
HorizontalAlignment.Center)
End If
If request.ProtectWithPassword AndAlso Not String.IsNullOrEmpty(request.Password) Then
pdf.SecuritySettings.UserPassword = request.Password
pdf.SecuritySettings.AllowUserCopyPasteContent = False
End If
Dim response As HttpResponseData = req.CreateResponse(HttpStatusCode.OK)
response.Headers.Add("Content-Type", "application/pdf")
Await response.WriteBytesAsync(pdf.BinaryData)
Return response
End Using
End Function
End Class
Public Class ConvertUrlRequest
Public Property Url As String = String.Empty
Public Property AddWatermark As Boolean
Public Property ProtectWithPassword As Boolean
Public Property Password As String = String.Empty
End Class
この構造により、明確な分離を維持しながら柔軟性が確保されます。 この関数は JSON リクエストを受け入れ、エラー処理で処理し、オプションのセキュリティを備えた PDF を返します。 透かしを追加したり、パスワード保護を実装したり、デジタル署名を適用したりできます。
プロダクションPDF生成のベストプラクティスは何ですか?
実稼働 PDF の生成には、パフォーマンス、信頼性、およびリソース管理に細心の注意を払う必要があります。 これらのベスト プラクティスにより、同時リクエスト全体で実際の条件下で最適なパフォーマンスが保証されます。
メモリとリソースをどのように管理しますか?
同時リクエストではメモリ管理が重要になります。 PDF オブジ ェ ク ト は必ず using 文を使っ て廃棄 し て く だ さ い。 大きなドキュメントの場合は、PDF 全体をメモリに読み込むのではなく、出力をストリーミングします。 トラフィックの急増時にメモリが枯渇するのを防ぐために、リクエスト スロットリングを実装します。
using IronPdf;
using Microsoft.Extensions.Logging;
public static class PdfProductionService
{
// Limit concurrent PDF operations to avoid memory exhaustion
private static readonly SemaphoreSlim Throttle = new SemaphoreSlim(5);
public static async Task<byte[]> GeneratePdfAsync(string html, ILogger log)
{
await Throttle.WaitAsync();
try
{
using var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
Timeout = 60,
UseMarginsOnHeaderAndFooter = UseMargins.なしne
}
};
renderer.RenderingOptions.WaitFor.RenderDelay(1000);
using var pdf = renderer.RenderHtmlAsPdf(html);
log.LogInformation(
"PDF generated: {Pages} pages, {Bytes} bytes",
pdf.PageCount,
pdf.BinaryData.Length);
return pdf.BinaryData;
}
finally
{
Throttle.Release();
}
}
}
using IronPdf;
using Microsoft.Extensions.Logging;
public static class PdfProductionService
{
// Limit concurrent PDF operations to avoid memory exhaustion
private static readonly SemaphoreSlim Throttle = new SemaphoreSlim(5);
public static async Task<byte[]> GeneratePdfAsync(string html, ILogger log)
{
await Throttle.WaitAsync();
try
{
using var renderer = new ChromePdfRenderer
{
RenderingOptions = new ChromePdfRenderOptions
{
Timeout = 60,
UseMarginsOnHeaderAndFooter = UseMargins.なしne
}
};
renderer.RenderingOptions.WaitFor.RenderDelay(1000);
using var pdf = renderer.RenderHtmlAsPdf(html);
log.LogInformation(
"PDF generated: {Pages} pages, {Bytes} bytes",
pdf.PageCount,
pdf.BinaryData.Length);
return pdf.BinaryData;
}
finally
{
Throttle.Release();
}
}
}
Imports IronPdf
Imports Microsoft.Extensions.Logging
Imports System.Threading
Public Module PdfProductionService
' Limit concurrent PDF operations to avoid memory exhaustion
Private ReadOnly Throttle As New SemaphoreSlim(5)
Public Async Function GeneratePdfAsync(html As String, log As ILogger) As Task(Of Byte())
Await Throttle.WaitAsync()
Try
Using renderer As New ChromePdfRenderer With {
.RenderingOptions = New ChromePdfRenderOptions With {
.Timeout = 60,
.UseMarginsOnHeaderAndFooter = UseMargins.None
}
}
renderer.RenderingOptions.WaitFor.RenderDelay(1000)
Using pdf = renderer.RenderHtmlAsPdf(html)
log.LogInformation("PDF generated: {Pages} pages, {Bytes} bytes", pdf.PageCount, pdf.BinaryData.Length)
Return pdf.BinaryData
End Using
End Using
Finally
Throttle.Release()
End Try
End Function
End Module
PDF 生成の健全性をどのように監視しますか?
モニタリングにより、PDF ジェネレーターの状態を可視化できます。 Application Insights を使用して、生成時間、障害率、リソース消費量を追跡します。 エラーの増加や応答の低下などの異常に対してアラートを設定します。 トラブルシューティングのために各リクエストの詳細情報をログに記録します。
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
// Track custom metrics using Application Insights
var telemetry = new TelemetryClient(TelemetryConfiguration.CreateDefault());
var sw = System.Diagnostics.Stopwatch.StartNew();
var pdfBytes = await PdfProductionService.GeneratePdfAsync(html, logger);
sw.Stop();
telemetry.TrackMetric("PdfGenerationTimeMs", sw.Elapsed.TotalMilliseconds);
telemetry.TrackMetric("PdfFileSizeBytes", pdfBytes.Length);
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
// Track custom metrics using Application Insights
var telemetry = new TelemetryClient(TelemetryConfiguration.CreateDefault());
var sw = System.Diagnostics.Stopwatch.StartNew();
var pdfBytes = await PdfProductionService.GeneratePdfAsync(html, logger);
sw.Stop();
telemetry.TrackMetric("PdfGenerationTimeMs", sw.Elapsed.TotalMilliseconds);
telemetry.TrackMetric("PdfFileSizeBytes", pdfBytes.Length);
Imports Microsoft.ApplicationInsights
Imports Microsoft.ApplicationInsights.Extensibility
Imports System.Diagnostics
' Track custom metrics using Application Insights
Dim telemetry As New TelemetryClient(TelemetryConfiguration.CreateDefault())
Dim sw As Stopwatch = Stopwatch.StartNew()
Dim pdfBytes = Await PdfProductionService.GeneratePdfAsync(html, logger)
sw.Stop()
telemetry.TrackMetric("PdfGenerationTimeMs", sw.Elapsed.TotalMilliseconds)
telemetry.TrackMetric("PdfFileSizeBytes", pdfBytes.Length)
Azure で高度な PDF 機能をどのように処理しますか?
IronPDF の高度な機能により、PDF ジェネレーターは基本的な作成機能を超えて拡張されます。 これらの機能は Azure で完全にサポートされており、プロフェッショナルなドキュメント処理ワークフローを実現します。
暗号化と権限を使用して PDF をどのように保護しますか?
IronPDF は、きめ細かなドキュメント制御のためにパスワード保護と権限管理をサポートしています。 PDF の権限とパスワード機能は AES-256 暗号化を適用します。
using IronPdf;
// Load or generate the PDF
using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Secure Report</h1>");
// Apply password protection
pdf.SecuritySettings.UserPassword = "view-password";
pdf.SecuritySettings.OwnerPassword = "admin-password";
// Restrict permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SaveAs("azure-secure-report.pdf");
using IronPdf;
// Load or generate the PDF
using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Secure Report</h1>");
// Apply password protection
pdf.SecuritySettings.UserPassword = "view-password";
pdf.SecuritySettings.OwnerPassword = "admin-password";
// Restrict permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserAnnotations = false;
pdf.SaveAs("azure-secure-report.pdf");
Imports IronPdf
' Load or generate the PDF
Using pdf = New ChromePdfRenderer().RenderHtmlAsPdf("<h1>Secure Report</h1>")
' Apply password protection
pdf.SecuritySettings.UserPassword = "view-password"
pdf.SecuritySettings.OwnerPassword = "admin-password"
' Restrict permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserAnnotations = False
pdf.SaveAs("azure-secure-report.pdf")
End Using
暗号化とデジタル署名を組み合わせて、否認不可能で改ざん防止機能を備えた文書を作成できます。
ヘッダー、フッター、透かしを追加するにはどうすればよいですか?
動的なページ番号とカスタム透かしを含むヘッダーとフッターの追加は、Azure でも他の.NET環境と同じように機能します。
using IronPdf;
using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Report content goes here.</p>");
// Add dynamic header with page numbers
var header = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right;font-size:10px'>Page {page} of {total-pages}</div>",
Height = 15
};
pdf.AddHTMLHeaders(header);
// Apply a draft watermark when needed
pdf.ApplyWatermark(
"<h1 style='color:gray;opacity:0.3'>DRAFT</h1>",
45,
IronPdf.Editing.VerticalAlignment.Middle,
IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs("report-with-header.pdf");
using IronPdf;
using var pdf = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Report content goes here.</p>");
// Add dynamic header with page numbers
var header = new HtmlHeaderFooter
{
HtmlFragment = "<div style='text-align:right;font-size:10px'>Page {page} of {total-pages}</div>",
Height = 15
};
pdf.AddHTMLHeaders(header);
// Apply a draft watermark when needed
pdf.ApplyWatermark(
"<h1 style='color:gray;opacity:0.3'>DRAFT</h1>",
45,
IronPdf.Editing.VerticalAlignment.Middle,
IronPdf.Editing.HorizontalAlignment.Center);
pdf.SaveAs("report-with-header.pdf");
Imports IronPdf
Using pdf = New ChromePdfRenderer().RenderHtmlAsPdf("<h1>Monthly Report</h1><p>Report content goes here.</p>")
' Add dynamic header with page numbers
Dim header As New HtmlHeaderFooter With {
.HtmlFragment = "<div style='text-align:right;font-size:10px'>Page {page} of {total-pages}</div>",
.Height = 15
}
pdf.AddHTMLHeaders(header)
' Apply a draft watermark when needed
pdf.ApplyWatermark(
"<h1 style='color:gray;opacity:0.3'>DRAFT</h1>",
45,
IronPdf.Editing.VerticalAlignment.Middle,
IronPdf.Editing.HorizontalAlignment.Center)
pdf.SaveAs("report-with-header.pdf")
End Using
また、 PDF を結合または分割したり、テキストを抽出したり、 PDF を画像に変換したり、 PDF フォームを操作したりすることもできます。
どのような一般的なエラーに注意する必要がありますか?
適切にセットアップした場合でも、PDF ジェネレーターを Azure にデプロイするときに特定の問題が発生することがよくあります。 これらの問題を理解することで、貴重なトラブルシューティングの時間を節約できます。
"アクセス拒否"エラーが発生するのはなぜですか?
IronPDF が一時ファイルを書き込めない場合、 "パスへのアクセスが拒否されました"というエラーが発生します。 書き込みアクセスを確実にするために、Installation.CustomDeploymentDirectory = "/tmp"を設定してください。 Run-from-Packageデプロイメントを使用する場合、/home/site/wwwroot@はそのモードでは読み取り専用なので、アプリが書き込み可能な別のパスを持っていることを確認してください。
タイムアウトとレンダリングの問題をどのように解決しますか?
複雑なドキュメントのレンダリングが Azure の関数のタイムアウトを超えると、タイムアウト例外が発生します。 レンダラーのタイムアウトを増やしたり、JavaScript を多用するページにレンダリング遅延を追加したり、大きなジョブを永続的なタスク キューにオフロードしたりします。
フォント レンダリングの問題は、フォントが見つからないか正しくないという形で現れます。 Base64 エンコードを使用してフォントを埋め込んだり、Azure がネイティブでサポートする Web セーフ フォントを使用したり、コンテナー デプロイに切り替えてフォントを完全に制御したりできます。
PDF 生成中にメモリ例外が発生する原因は何ですか?
メモリ例外は、 PDF 生成のメモリ集約型の性質により発生します。 一般的な問題としては、大規模なリクエストや同時リクエスト中に発生するメモリ不足例外などがあります。
ベストプラクティスは次のとおりです。
- オブジェクトは、
usingステートメントを使用して直ちに処分してください。 - 本番サービスの例に示すように、
SemaphoreSlim@で同時リクエストを制限してください。 - 大きなPDFには、バイト配列全体を読み込むのではなく、ストリームベースの出力を使用します。
- メモリ割り当てを予測可能にするために、消費プランからプレミアムまたは専用プランにアップグレードします。
Azure PDF ジェネレーターをどのようにデプロイおよび監視しますか?
堅実な展開戦略により、PDF ジェネレーターは安定し、監視可能になり、更新も容易になります。 次のプラクティスは、Azure アプリサービス または Azure Functions のどちらを対象とする場合でも適用されます。
どのような展開のベストプラクティスに従う必要がありますか?
*自動化された CI/CD:* Azure DevOps またはGitHub Actions を使用して、繰り返し実行可能で監査可能なデプロイメントを実現します。 ライセンス キー:** IronPDFライセンスをソース管理や環境変数ではなく Azure Key Vault に保存します。
- 書き込み可能なパス: アプリケーション起動時にIronPdfのテンポラリフォルダ(Linuxコンテナでは
/tmp)を設定する。 - パッケージの選択: コンテナベースのデプロイメントには、
IronPdf.Linuxを使用してください; Windows アプリサービスの標準IronPdf@パッケージを使用してください。
監視とメトリクスをどのように設定しますか?
Application Insightsは、Azure Functionsおよびアプリサービスと直接統合されています。PDF生成イベントごとにカスタムメトリクスを追跡するには、TelemetryClient@を使用します:
using Microsoft.ApplicationInsights;
var telemetryClient = new TelemetryClient();
telemetryClient.TrackMetric("PdfGenerationTimeMs", generationTime.TotalMilliseconds);
telemetryClient.TrackMetric("PdfPageCount", pdfPageCount);
telemetryClient.TrackMetric("PdfFileSizeBytes", fileSizeBytes);
using Microsoft.ApplicationInsights;
var telemetryClient = new TelemetryClient();
telemetryClient.TrackMetric("PdfGenerationTimeMs", generationTime.TotalMilliseconds);
telemetryClient.TrackMetric("PdfPageCount", pdfPageCount);
telemetryClient.TrackMetric("PdfFileSizeBytes", fileSizeBytes);
Imports Microsoft.ApplicationInsights
Dim telemetryClient As New TelemetryClient()
telemetryClient.TrackMetric("PdfGenerationTimeMs", generationTime.TotalMilliseconds)
telemetryClient.TrackMetric("PdfPageCount", pdfPageCount)
telemetryClient.TrackMetric("PdfFileSizeBytes", fileSizeBytes)
Azure ポータルでメトリック ベースのアラートを設定すると、生成時間が許容可能なしきい値を超えた場合やエラー率が急上昇した場合に通知されます。
今すぐ Azure PDF Generation を開始するにはどうすればよいですか?
これで、適切な Azure 層の選択と正しいNuGetパッケージのインストールから、クラウド環境向けのレンダラーの構成、セキュリティ、監視、リソース調整の追加まで、運用対応の Azure PDF ジェネレーターを構築するための全体像が把握できました。
Azure のクラウド インフラストラクチャと IronPDF の Chrome ベースのレンダリング エンジンを組み合わせることで、ニーズに合わせて拡張できる PDF プラットフォームが実現します。 1 時間あたりに数個のドキュメントを処理する場合でも、数千個のドキュメントを処理する場合でも、ジェネレーターは予測可能なコストで一貫したパフォーマンスを維持します。
まずIronPDF の機能の概要から始めて、利用可能な機能の全範囲を理解し、次に API の詳細についてはドキュメントを参照してください。 展開の準備ができたら、ドキュメントごとの料金なしでフル機能をテストできる無料試用ライセンスを有効化してください。 ライセンス オプションを確認して、運用ワークロードに適したプランを選択します。
その他の文書処理オプションについては、IronPDF NuGetインストールガイドとIronSoftware製品パッケージをご覧ください。
よくある質問
Azure で PDF 生成する際に IronPDF を使用する利点は何ですか?
IronPDF は、スケーラビリティと信頼性を保証する Azure とシームレスに統合され、企業規模の PDF 生成機能を提供します。クラウド環境でよくあるサンドボックス制限やメモリ制限といった課題を克服します。
IronPDF は Azure 環境でのメモリ制限をどのように処理しますか?
IronPDF は、利用可能なリソースを超えることなく、PDF を生成するための効率的な処理技術を使用して、Azure のメモリ制約内で動作するよう最適化されています。
IronPDF は Azure Functions と一緒に使用できますか?
はい、IronPDF は Azure Functions と統合してサーバーレス PDF 生成ソリューションを作成することができ、自動スケーリングとコスト効果のある実行の利点があります。
IronPDF を Azure と一緒に使用する際のセキュリティに関する考慮事項は何ですか?
IronPDF は、Azure のセキュリティ基準に準拠し、転送中および保管時のデータ保護のベストプラクティスを遵守することにより、安全な PDF 生成をサポートします。
IronPDF を Azure App Service にデプロイすることは可能ですか?
もちろん、IronPDF は Azure App Service にデプロイでき、開発者が管理ホスティング環境内でその機能を活用することができます。
IronPDF は Azure での PDF 機能のカスタマイズをサポートしますか?
はい、IronPDF は、Azure で実行中にレイアウト、デザイン、インタラクティビティを含む PDF 生成のための広範なカスタマイズオプションを提供します。
IronPDF は分散 Azure システムで高性能をどのように確保しますか?
IronPDF は、Azure のインフラストラクチャを活用して高いパフォーマンスと信頼性を維持しながら、分散システム全体で簡単に拡張できるように設計されています。
IronPDF は、Azure PDF 生成で .NET 10 をサポートしていますか?
はい、IronPDFはAzure環境(Functions、App Services、コンテナー展開を含む)全体で.NET 10と完全に互換性があります。特別な回避策を必要とせず、すぐにシームレスなサポートを提供します。IronPDFのプラットフォーム要件では、サポート対象のランタイムとして.NET 10が明示的に記載されています。(ironpdf.com)
IronPDF はどの .NET バージョンをサポートしていますか? また、.NET 10 との互換性によってパフォーマンスはどのように向上しますか?
IronPDF は、.NET 6、7、8、9、10 を含む幅広い .NET バージョンをサポートしています。.NET 10 を使用すると、最新のランタイム最適化、ガベージ コレクションの改善、Azure でのパフォーマンス強化といったメリットが得られます (特にサーバーレスまたはコンテナーベースの PDF 生成の場合)。ironpdf.com では、「C# PDF ライブラリ」機能リストで .NET 10 のサポートが確認されています。


