c# - 在 ASP.NET Core 中使用 wkhtmltopdf、docker 将 HTML 转换为 PDF

标签 c# docker asp.net-core docker-compose wkhtmltopdf

我正在尝试在 ASP.NET Core 应用程序中使用 wkhtmltopdf 将 HTML 转换为 PDF。 我已将 wkhtmltopdf.exe 添加到我的项目中,并标记为“始终复制到输出”。

这是我的代码:

var htmlContent = receiptBody;
var wkhtmltopdf = new FileInfo(@"/app/Configuration/Wkhtmltopdf/wkhtmltopdf.exe");
var converter = new HtmlToPdfConverter(wkhtmltopdf);
var pdfBytes = converter.ConvertToPdf(htmlContent);

该文件已创建,但位于:

var pdfBytes = converter.ConvertToPdf(htmlContent);

我收到错误:

System.Exception: Cannot generate PDF: Broken pipe ---> System.IO.IOException: Broken pipe

我使用 Docker 运行我的应用程序,这是我的 dockerfile:

FROM microsoft/aspnetcore:1.1.2 ARG source WORKDIR /app 
ENV ASPNETCORE_URLS http://project-test:80 
EXPOSE 80 
COPY ${source:-obj/Docker/publish} . 
RUN apt-get update 
RUN apt-get install-y libgdiplus 
ENTRYPOINT ["dotnet", "ProjectTest.dll"]

也许应该以某种方式为 Linux 安装 wkhtmltopdf?

最佳答案

这段代码对于我来说在最新的 .net core 6.0.1 镜像上工作得很好:

FROM mcr.microsoft.com/dotnet/aspnet:6.0.1-bullseye-slim AS base
RUN apt update
RUN apt install -y libgdiplus
RUN ln -s /usr/lib/libgdiplus.so /lib/x86_64-linux-gnu/libgdiplus.so
RUN apt-get install -y --no-install-recommends zlib1g fontconfig libfreetype6 libx11-6 libxext6 libxrender1 wget gdebi
RUN wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb
RUN gdebi --n wkhtmltox_0.12.5-1.stretch_amd64.deb
RUN apt install libssl1.1
RUN ln -s /usr/local/lib/libwkhtmltox.so /usr/lib/libwkhtmltox.so

WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0.1 AS build
WORKDIR /src
COPY ["docgen/docgen.csproj", "docgen/"]
RUN dotnet restore "docgen/docgen.csproj"
COPY . .
WORKDIR "/src/docgen"
RUN dotnet build "docgen.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "docgen.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "docgen.dll"]

关于c# - 在 ASP.NET Core 中使用 wkhtmltopdf、docker 将 HTML 转换为 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44002004/

相关文章:

c# - 将 List<string> 绑定(bind)到 asp.net 中的 Grid View 的一列

c# - 在 Controller ApiController 上未找到任何操作

docker - 未设置失败的JAVA_HOME的CloudBuild faSTLane任务,并且在PATH中找不到 'java'命令

azure - 如何设置两个都使用 https 端口的微服务?

c# - 使用 FreeImage 对 JPEG 进行无损优化

c# - 如何使用 Process.UseShellExecute=false 的系统路径?

docker - 在 Openshift Online 上运行 RStudio 服务器

docker - Docker基础镜像和扩展架构

c# - Hangfire 作业插入对应用程序 API 性能的影响

c# - 通过依赖注入(inject)获取 dbcontexts 背后的 10 多个 razor 页面代码