このページには自動翻訳されたテキストを含めることができます。
Azure Functions および Azure App Services で HTML を PDF に変換する
Docotic.Pdf は .NET での HTML から PDF への変換 用の無料アドオンを提供しています。このアドオンは変換時に Chromium を使用します。これにより高品質な変換が可能になります。ただし、欠点として、対象環境で Chromium を実行する権限が必要です。
通常、専用サーバーや仮想サーバーは完全に制御できます。しかし、Azure Functions や AWS Lambda のようなサーバーレス環境やサンドボックス化された環境では事情が異なります。そこで依存関係をインストールしたり Chromium を実行したりするのは難しい場合があります。
この記事では、Linux 上の Azure Functions および Azure App Services で Docotic.Pdf ライブラリの HTML to PDF アドオンをどのように使用できるかを説明します。

Azure の Linux で HTML を PDF に変換する
Azure Functions と App Services は サンドボックス 内で実行されます。Azure の Linux で HTML を PDF に変換するには、次の操作が必要です。
- Chromium の依存関係を事前にインストールする
- アドオンがサンドボックスを無効にした Chromium を実行するようにする
- アドオンがブラウザーをカスタムパスにダウンロードするようにする
Linux に Chromium の依存関係をインストールする
2021 年 8 月以降、Azure Functions と Azure App Services の Linux 環境には Chromium の依存関係があらかじめインストールされています。そのため、何もインストールする必要はありません。
必要に応じて、さまざまな Linux ディストリビューションで Chromium の依存関係をインストールするために次のコマンドを使用できます。
# 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
アドオンがサンドボックスを無効にした Chromium を実行するようにする
Azure の Linux で既定の HTML から PDF への変換コードを実行すると、次のエラーが発生します。
Failed to launch browser! Running as root without --no-sandbox is not supported
using var converter = await HtmlConverter.CreateAsync();
// ...
HtmlEngineOptions.UseSandbox プロパティを false に設定すると、アドオンはサンドボックスなしで Chromium を起動します。
var engineOptions = new HtmlEngineOptions
{
UseSandbox = false
};
using var converter = await HtmlConverter.CreateAsync(engineOptions);
using var pdf = await converter.CreatePdfAsync(url);
pdf.Save("output.pdf");
Chromium のサンドボックス を無効にすることは推奨されません。サンドボックスが無効の場合、Chromium は悪意のある JavaScript ベースの攻撃を実行する可能性があります。今回のケースでは、Chromium は Azure のサンドボックス内で実行されるため、攻撃リスクは低減されます。リスクをさらに下げるには、次のことを行えます。
- ローカルの HTML テンプレートと信頼できる Web サイトのみを処理する。
- Azure Functions/App Services で、他のサービスから分離して HTML から PDF への変換を実行する。
アドオンがブラウザーをカスタムパスにダウンロードするようにする
Azure Functions と App Services は、ZIP パッケージから直接実行されることがよくあります。このような場合は、ダウンロードした Chromium をアドオンが配置するパスを指定する必要があります。これは、アドオンが Chromium をアプリケーション ディレクトリにダウンロードしたり、そこから起動したりできないためです。HtmlEngineOptions.Path プロパティを使用して、ダウンロードした Chromium のカスタムパスを指定します。次の C# サンプルコードは、Chromium を現在のユーザーの一時フォルダーにダウンロードする方法を示しています。
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");
以上です。上記のコードを使用して、Docotic.Pdf.HtmlToPdf アドオン を使い、Azure の Linux で HTML を PDF に変換できます。
Azure の Windows で HTML を PDF に変換する
現在(2024 年 2 月)、Windows 上の Azure Functions および Azure App Services では Chromium を実行できません。起動時に次のエラーが発生します。
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.
そのため、現時点では Windows 上の Azure Functions および Azure App Services はアドオンでサポートされていません。
Docker コンテナーで HTML を PDF に変換する
Azure で HTML to PDF アドオンを使用する別の方法があります。Docker コンテナー内で変換を実行できます。Dockerfile に依存関係をインストールし、C# コードで Chromium のサンドボックスを無効にするだけです。以下は、ASP.NET Core アプリケーションで HTML を PDF に変換するためのサンプル Dockerfile です。
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"]
次は、同様の Azure Function アプリ向けのサンプル Dockerfile です。
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