Cette page peut contenir du texte traduit automatiquement.
Convertir HTML en PDF dans Azure Functions et Azure App Services
Docotic.Pdf fournit un complément gratuit pour la conversion HTML en PDF dans .NET. Le complément utilise Chromium pendant la conversion. Cela aide à obtenir une excellente qualité de conversion. Cependant, il y a un inconvénient : vous avez besoin d'autorisations pour exécuter Chromium dans un environnement cible.
En général, vous avez un contrôle total sur des serveurs dédiés ou virtuels. Mais les environnements sans serveur ou isolés comme Azure Functions ou AWS Lambda sont une autre histoire. Il peut être difficile d'y installer des dépendances ou d'y exécuter Chromium.
Cet article explique comment utiliser le complément HTML en PDF pour la bibliothèque Docotic.Pdf dans Azure Functions et Azure App Services sous Linux.

Exécuter la conversion HTML en PDF dans Azure sous Linux
Azure Functions et App Services s'exécutent dans un bac à sable. Vous devrez effectuer les opérations suivantes pour convertir HTML en PDF dans Azure sous Linux :
- Préinstaller les dépendances Chromium
- Faire exécuter le complément Chromium avec le sandbox désactivé
- Faire télécharger le navigateur par le complément vers un chemin personnalisé
Installer les dépendances Chromium sous Linux
Depuis août 2021, les environnements Linux pour Azure Functions et Azure App Services incluent des dépendances Chromium préinstallées. Vous n'avez donc rien à installer.
Si nécessaire, vous pouvez utiliser les commandes suivantes pour installer les dépendances Chromium dans différentes distributions Linux.
# Debian
apt-get -y install chromium
# CentOS
yum -y install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc
Faire exécuter le complément Chromium avec le sandbox désactivé
Vous obtiendrez l'erreur
Failed to launch browser! Running as root without --no-sandbox is not supported
si vous exécutez le code de conversion HTML en PDF par défaut dans Azure sous Linux :
using var converter = await HtmlConverter.CreateAsync();
// ...
Définissez la propriété HtmlEngineOptions.UseSandbox à false et le complément lancera Chromium sans le sandbox :
var engineOptions = new HtmlEngineOptions
{
UseSandbox = false
};
using var converter = await HtmlConverter.CreateAsync(engineOptions);
using var pdf = await converter.CreatePdfAsync(url);
pdf.Save("output.pdf");
Notez qu'il n'est pas recommandé de désactiver le sandbox Chromium. Lorsque le sandbox est désactivé, Chromium peut potentiellement exécuter des exploits malveillants basés sur Javascript. Dans notre cas, Chromium s'exécute dans le sandbox Azure, ce qui réduit le risque d'attaque. Vous pouvez faire ce qui suit pour réduire davantage les risques :
- Traiter uniquement des modèles HTML locaux et des sites Web de confiance.
- Exécuter la conversion HTML en PDF dans Azure Functions/App Services isolés des autres services.
Faire télécharger le navigateur par le complément vers un chemin personnalisé
Azure Functions et App Services s'exécutent souvent directement à partir d'un package ZIP. Dans ce cas, vous devez spécifier un chemin où le complément placera Chromium téléchargé. C'est nécessaire parce que le complément ne peut pas télécharger Chromium dans le répertoire de l'application ni le lancer depuis celui-ci. Utilisez la propriété HtmlEngineOptions.Path pour spécifier un chemin personnalisé pour Chromium téléchargé. Cet exemple de code C# montre comment télécharger Chromium dans le dossier temporaire de l'utilisateur actuel :
var engineOptions = new HtmlEngineOptions
{
Path = System.IO.Path.GetTempPath(),
UseSandbox = false
};
using var converter = await HtmlConverter.CreateAsync(engineOptions);
using var pdf = await converter.CreatePdfAsync(url);
pdf.Save("output.pdf");
C'est tout ! Utilisez le code ci-dessus pour convertir HTML en PDF dans Azure sous Linux avec le complément Docotic.Pdf.HtmlToPdf.
Exécuter la conversion HTML en PDF dans Azure sous Windows
Actuellement (février 2024), Azure Functions et Azure App Services sur Windows ne permettent pas d'exécuter Chromium. Vous obtiendrez l'erreur suivante au lancement :
System.ComponentModel.Win32Exception (14001): The application has failed to start because its
side-by-side configuration is incorrect. Please see the application event log or use the
command-line sxstrace.exe tool for more detail.
Ainsi, Azure Functions et Azure App Services sur Windows ne sont pour l'instant pas pris en charge par le complément.
Convertir HTML en PDF dans un conteneur Docker
Il existe une autre option pour utiliser le complément HTML en PDF dans Azure. Vous pouvez exécuter la conversion dans un conteneur Docker. Installez simplement les dépendances dans un Dockerfile et désactivez le sandbox Chromium dans le code C#. Voici un exemple de Dockerfile pour la conversion HTML en PDF dans une application ASP.NET Core :
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
RUN apt-get update && apt-get install -y chromium
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["HtmlToPdfWebApp/HtmlToPdfWebApp.csproj", "HtmlToPdfWebApp/"]
RUN dotnet restore "HtmlToPdfWebApp/HtmlToPdfWebApp.csproj"
COPY . .
WORKDIR "/src/HtmlToPdfWebApp"
RUN dotnet build "HtmlToPdfWebApp.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "HtmlToPdfWebApp.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "HtmlToPdfWebApp.dll"]
Et voici un exemple de Dockerfile pour une application Azure Function similaire :
FROM mcr.microsoft.com/azure-functions/dotnet:3.0 AS base
WORKDIR /home/site/wwwroot
EXPOSE 80
RUN apt-get update && apt-get install -y chromium
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY ["HtmlToPdfFunction/HtmlToPdfFunction.csproj", "HtmlToPdfFunction/"]
RUN dotnet restore "HtmlToPdfFunction/HtmlToPdfFunction.csproj"
COPY . .
WORKDIR "/src/HtmlToPdfFunction"
RUN dotnet build "HtmlToPdfFunction.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "HtmlToPdfFunction.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /home/site/wwwroot
COPY --from=publish /app/publish .
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AzureFunctionsJobHost__Logging__Console__IsEnabled=true