このページには自動翻訳されたテキストを含めることができます。
Azure Functions と Azure App Services で HTML を PDF に変換する
Docotic.Pdf は、.NET での HTML から PDF への変換 用の無料アドオンを提供します。 アドオンは変換中に Chromium を使用します。 これは、優れた変換品質を得るのに役立ちます。 ただし、 ターゲット環境で Chromium を実行するには権限が必要という欠点があります。
9.5.17615-dev 9.5.17615-dev14,813人が合格 NuGet の合計ダウンロード数 4,924,084
通常、専用サーバーまたは仮想サーバーを完全に制御できます。 ただし、Azure Functions や AWS Lambda な どのサーバーレス環境やサンドボックス環境では話が異なります。 そこで依存関係をインストールした り、Chromium を実行したりするのは難しい場合があります。
この記事では、Linux 上の Azure Functions および Azure App Services で Docotic.Pdf ライブラリの HTML to PDF アドオンを使用する方法について説明します。
Linux 上の Azure で HTML から PDF への変換を実行する
Azure Functions と App Services は サンドボック ス で実行されます。 Linux 上の Azure で 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 で実行する
エラーが発生します
Failed to launch browser! Running as root without --no-sandbox is not supported
Linux 上の Azure でデフォルトの HTML から PDF への変換コードを実行する場合:
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(..))
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(..))
pdf.Save("output.pdf");
}
それでおしまい! 上記のコードを使用して、Docotic.Pdf.HtmlToPdf アドオ ン を使用して Linux 上の Azure で HTML を PDF に変換します。
Windows 上の Azure で 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