Azure上で.NETを使用してHTMLからPDFを実行する方法は?

This article was translated from English: Does it need improvement?
Translated
View the article in English

はい。 IronPDFは、Azure上でPDFドキュメントを生成、操作、読み取るために使用できます。 IronPDFは、多くのAzureプラットフォーム上で、MVCウェブサイトやAzure Functionsなどを含めて徹底的にテストされています。

Docker 上の Azure Functions

Dockerコンテナ内でAzure Functionsを実行している場合は、こちらのAzure Docker Linuxチュートリアルを参照してください。


チュートリアルの方法

プロジェクトの設定

IronPDFをインストールして始めましょう

最初のステップは、NuGetを使用してIronPDFをインストールすることです。

Install-Package IronPdf

または、Azure用IronPDF直接ダウンロードパッケージリンクを使用して、.dllを手動でインストールします。

正しいAzureオプションを選択

Azureレベルのホスティングレベルを選択する

Azure Basic B1 は、エンドユーザーのレンダリングニーズに必要な最小ホスティングレベルです。 高スループットシステムを作成している場合、これをアップグレードする必要があるかもしれません。

続行する前に
App service plan のプランタイプを選択しないと、IronPdf が PDF ドキュメントのレンダリングに失敗する可能性があります。

Azureレベルのホスティングレベルを選択する

「パッケージファイルから実行」チェックボックス

Azure Functions アプリケーションを発行するときは、Run from package file選択されていない ことを確認してください。

パッケージファイルから実行オプションのチェックを外す

.NET 6 の構成

マイクロソフトは最近、イメージングライブラリを.NET 6+から削除し、多くのレガシーAPIを破壊しました。そのため、これらのレガシーAPI呼び出しを引き続き許可するようにプロジェクトを設定する必要があります。

  1. Linux では、マシンに libgdiplus がインストールされていることを確認するために Installation.LinuxAndDockerDependenciesAutoConfig=true; を設定します。

  2. .NET 6プロジェクトの.csprojファイルに以下を追加してください: <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>

  3. プロジェクトにruntimeconfig.template.jsonというファイルを作成し、次の内容で埋めてください。
{
      "configProperties": {
         "System.Drawing.EnableUnixSupport": true
      }
}
{
      "configProperties": {
         "System.Drawing.EnableUnixSupport": true
      }
}
If True Then
	  "configProperties":
	  If True Then
		 "System.Drawing.EnableUnixSupport": True
	  End If
End If
$vbLabelText   $csharpLabel
  1. 最後に、プログラムの先頭に次の行を追加します:System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

AzureでDockerを使用する

Azureでパフォーマンスを制御し、SVGフォントへのアクセスを得る一つの方法として、Dockerコンテナ内からIronPDFアプリケーションとFunctionsを使用することが挙げられます。

LinuxおよびWindowsインスタンス向けの包括的なIronPDF Azure Dockerチュートリアルがあり、おすすめの読み物です。

Azure Function コード例

この例では、ログエントリを自動的に組み込みのAzureロガーに出力します(ILogger logを参照してください):

[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log, ExecutionContext context)
{
    log.LogInformation("Entered PrintPdf API function...");
    // Apply license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
    // Enable log
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;

    IronPdf.Logging.Logger.EnableDebugging = false;
    // Configure IronPdf
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    try
    {
        log.LogInformation("About to render pdf...");
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Render PDF
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
        log.LogInformation("finished rendering pdf...");
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering pdf", e);
    }

    return new OkObjectResult("OK");
}
[FunctionName("PrintPdf")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
    ILogger log, ExecutionContext context)
{
    log.LogInformation("Entered PrintPdf API function...");
    // Apply license key
    IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01";
    // Enable log
    IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom;
    IronPdf.Logging.Logger.CustomLogger = log;

    IronPdf.Logging.Logger.EnableDebugging = false;
    // Configure IronPdf
    Installation.LinuxAndDockerDependenciesAutoConfig = false;
    Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled;
    try
    {
        log.LogInformation("About to render pdf...");
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        // Render PDF
        var pdf = renderer.RenderUrlAsPdf("https://www.google.com/");
        log.LogInformation("finished rendering pdf...");
        return new FileContentResult(pdf.BinaryData, "application/pdf") { FileDownloadName = "google.pdf" };
    }
    catch (Exception e)
    {
        log.LogError(e, "Error while rendering pdf", e);
    }

    return new OkObjectResult("OK");
}
<FunctionName("PrintPdf")>
Public Shared Async Function Run(<HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route := Nothing)> ByVal req As HttpRequest, ByVal log As ILogger, ByVal context As ExecutionContext) As Task(Of IActionResult)
	log.LogInformation("Entered PrintPdf API function...")
	' Apply license key
	IronPdf.License.LicenseKey = "IRONPDF-MYLICENSE-KEY-1EF01"
	' Enable log
	IronPdf.Logging.Logger.LoggingMode = IronPdf.Logging.Logger.LoggingModes.Custom
	IronPdf.Logging.Logger.CustomLogger = log

	IronPdf.Logging.Logger.EnableDebugging = False
	' Configure IronPdf
	Installation.LinuxAndDockerDependenciesAutoConfig = False
	Installation.ChromeGpuMode = IronPdf.Engines.Chrome.ChromeGpuModes.Disabled
	Try
		log.LogInformation("About to render pdf...")
		Dim renderer As New ChromePdfRenderer()
		' Render PDF
		Dim pdf = renderer.RenderUrlAsPdf("https://www.google.com/")
		log.LogInformation("finished rendering pdf...")
		Return New FileContentResult(pdf.BinaryData, "application/pdf") With {.FileDownloadName = "google.pdf"}
	Catch e As Exception
		log.LogError(e, "Error while rendering pdf", e)
	End Try

	Return New OkObjectResult("OK")
End Function
$vbLabelText   $csharpLabel

既知の問題

共有ホスティングプランではSVGフォントのレンダリングは利用できません。

我々が発見した制限事項の一つは、Azureホスティングプラットフォームの概要がGoogleフォントのようなSVGフォントを読み込むサーバーを、安価な共有ウェブアプリ層ではサポートしていないことです。 なぜなら、これらの共有ホスティング・プラットフォームは、セキュリティ上の理由からWindows GDI+グラフィックス・オブジェクトへのアクセスが許可されていないからです。

この問題に対処するために、Windows または Linux Docker コンテナのガイドを使用した IronPDF、あるいは Azure 上のVPSをお勧めします。最高のフォントレンダリングが求められる場合です。

Azureの無料ティアホスティングは遅いです。

Azureの無料および共有レベル、または従量課金プランは、PDFレンダリングには適していません。 私たちは、自分たち自身で使用しているAzure B1ホスティング/プレミアムプランを推奨します。 HTML to PDF のプロセスは、コンピューターにとって重要な「作業」であり、自分のマシンでウェブページを開いてレンダリングするのと似ています。実際のブラウザエンジンが使用されるため、それに応じて準備し、同様の性能を持つデスクトップマシンと同等のレンダリング時間を想定する必要があります。

技術サポートリクエストチケットの作成

リクエストチケットを作成するには、IronPDFのエンジニアリングサポートリクエストの作成方法ガイドを参照してください。

チャクニット・ビン
ソフトウェアエンジニア
ChaknithはIronXLとIronBarcodeで作業しています。彼はC#と.NETに深い専門知識を持ち、ソフトウェアの改善と顧客サポートを支援しています。ユーザーとの対話から得た彼の洞察は、より良い製品、文書、および全体的な体験に貢献しています。