Comment exécuter HTML to PDF avec .NET sur Azure ?

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

Oui. IronPDF peut être utilisé pour générer, manipuler et lire des documents PDF sur Azure. IronPDF a été minutieusement testé sur plusieurs plateformes Azure, notamment les sites web MVC, Azure Functions, et bien d'autres encore.

Azure Functions sur Docker

Si vous exécutez des Azure Functions dans un conteneur Docker, veuillez vous référer à ce tutoriel Azure Docker Linux à la place.


Comment faire Tutoriel

Mise en place du projet

Installation d'IronPDF pour commencer

La première étape consiste à installer IronPDF à l'aide de NuGet :

Install-Package IronPdf

Sinon, installez manuellement le fichier .dll en utilisant le lien IronPDF direct download package for Azure.

Sélectionner les options Azure correctes

Choisir le bon niveau d'hébergement Azure Tier

Azure Basic B1 est le niveau d'hébergement minimum requis pour les besoins de rendu de nos utilisateurs finaux. Si vous créez un système à haut débit, il peut être nécessaire de le mettre à niveau.

Avant de procéder
L'échec de la sélection d'un type de plan Service d'application peut entraîner l'échec de IronPdf lors du rendu des documents PDF.

Choisir le bon niveau d'hébergement Azure Tier

La case à cocher "Exécuter à partir d'un fichier paquet"

Lors de la publication de votre application Azure Functions, assurez-vous que Exécuter à partir du fichier de package n'est PAS sélectionné.

Décocher l'option Exécuter à partir d'un fichier de package

Configuration pour .NET 6

Microsoft a récemment supprimé les bibliothèques d'imagerie de .NET 6+, brisant ainsi de nombreuses API héritées. Il est donc nécessaire de configurer votre projet pour qu'il continue à autoriser ces appels d'API hérités.

  1. Sur Linux, définissez Installation.LinuxAndDockerDependenciesAutoConfig=true; pour s'assurer que libgdiplus est installé sur la machine

  2. Ajoutez ce qui suit au fichier .csproj pour votre projet .NET 6 : <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>

  3. Créez un fichier dans votre projet appelé runtimeconfig.template.json et remplissez-le avec ce qui suit :
{
      "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. Enfin, ajoutez la ligne suivante au début de votre programme : System.AppContext.SetSwitch("System.Drawing.EnableUnixSupport", true);

Utiliser Docker sur Azure

L'une des façons d'obtenir le contrôle, l'accès aux polices SVG et la possibilité de contrôler les performances sur Azure est d'utiliser les applications et les fonctions IronPDF à partir de conteneurs Docker.

Nous avons un tutoriel complet sur IronPDF Azure Docker pour les instances Linux et Windows, et il est recommandé de le lire.

Exemple de code de fonction Azure

Cet exemple génère automatiquement des entrées de journal dans le logger Azure intégré (voir 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

Problèmes connus

Le rendu des polices SVG n'est pas disponible sur les plans d'hébergement mutualisé

Une limitation que nous avons constatée est que la vue d'ensemble de la plateforme d'hébergement Azure ne prend pas en charge le chargement des polices SVG sur serveurs, telles que Google Fonts, dans leurs niveaux de web-app partagée les moins chers. En effet, pour des raisons de sécurité, ces plateformes d'hébergement partagé ne sont pas autorisées à accéder aux objets graphiques Windows GDI+.

Nous recommandons d'utiliser un guide de container Docker Windows ou Linux pour IronPDF ou peut-être un VPS sur Azure pour résoudre ce problème où le meilleur rendu des polices est nécessaire.

L'hébergement Azure gratuit est lent

Les niveaux gratuits et partagés d'Azure, ainsi que le plan de consommation, ne sont pas adaptés au rendu des PDF. Nous recommandons l'hébergement Azure B1/Plan Premium, que nous utilisons nous-mêmes. Le processus de HTML en PDF est un 'travail' considérable pour tout ordinateur - similaire à l'ouverture et au rendu d'une page web sur votre propre machine. Un véritable moteur de navigateur est utilisé, par conséquent, nous devons prévoir en conséquence et nous attendre à des temps de rendu similaires à ceux d'un ordinateur de bureau de puissance équivalente.

Création d'un ticket de demande d'assistance technique

Pour créer un ticket de demande, référez-vous au guide Comment faire une demande de support technique pour IronPDF.

Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il possède une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, une documentation améliorée et une expérience globale enrichie.