如何在Linux环境的Azure Function中运行DinkToPdf?
解决Linux Azure Function中PDF生成的libwkhtmltox.so加载问题
问题核心分析
你遇到的错误源于libwkhtmltox.so依赖缺失或文件路径配置错误,同时当前Dockerfile存在冗余复制步骤——将base层的空目录复制到Debug路径,但实际使用的是Release发布模式。
修复后的Dockerfile
FROM mcr.microsoft.com/azure-functions/dotnet:4 AS base WORKDIR /home/site/wwwroot # 安装wkhtmltopdf及完整依赖 RUN apt-get update && apt-get install -y --no-install-recommends \ wkhtmltopdf \ libglib2.0-0 \ libgdiplus \ libnss3 \ libatk1.0-0 \ libatk-bridge2.0-0 \ ca-certificates \ fonts-liberation \ libappindicator3-1 \ libasound2 \ libcairo2 \ libcups2 \ libdbus-1-3 \ libexpat1 \ libfontconfig1 \ libgbm1 \ libgcc1 \ libgtk-3-0 \ libnspr4 \ libpango-1.0-0 \ libpangocairo-1.0-0 \ libstdc++6 \ libx11-6 \ libx11-xcb1 \ libxcb1 \ libxcomposite1 \ libxcursor1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxi6 \ libxrandr2 \ libxrender1 \ libxss1 \ libxtst6 \ lsb-release \ xdg-utils \ && rm -rf /var/lib/apt/lists/* # 清理缓存减小镜像体积 EXPOSE 80 FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build WORKDIR /src COPY ["MP.AzureFunctions/MP.AzureFunctions.csproj", "MP.AzureFunctions/"] RUN dotnet restore "MP.AzureFunctions/MP.AzureFunctions.csproj" COPY . . WORKDIR "/src/MP.AzureFunctions" RUN dotnet build "MP.AzureFunctions.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "MP.AzureFunctions.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /home/site/wwwroot COPY --from=publish /app/publish . # 若项目自带libwkhtmltox.so,添加以下命令(根据实际路径调整): # COPY --from=publish /app/publish/bin/libwkhtmltox.so /usr/lib/ # RUN ldconfig ENV AzureWebJobsScriptRoot=/home/site/wwwroot \ AzureFunctionsJobHost__Logging__Console__IsEnabled=true
关键修复点
- 安装官方wkhtmltopdf包:直接通过apt安装,自带
libwkhtmltox.so,避免手动管理库文件的麻烦。 - 删除冗余复制步骤:移除了无意义的Debug路径复制操作,与Release发布模式保持一致。
- 优化依赖安装:用
--no-install-recommends减少冗余依赖,同时清理apt缓存缩小镜像体积。 - 项目自带库的适配:如果项目手动引入
libwkhtmltox.so,需将其复制到系统库目录(如/usr/lib/)并执行ldconfig更新缓存,确保系统能识别。
代码层面检查
- 确认PDF生成代码中
libwkhtmltox.so的路径配置:- apt安装的wkhtmltopdf默认路径为
/usr/lib/x86_64-linux-gnu/libwkhtmltox.so,代码可直接引用该路径或让系统自动查找。 - 若为项目自带库,需保证代码指定路径与Dockerfile中的复制路径一致。
- apt安装的wkhtmltopdf默认路径为
内容的提问来源于stack exchange,提问作者Oleh Deyneka
相关产品推荐
相关产品推荐

