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

2024-01-02

我正在尝试在 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:无法生成 PDF:管道损坏 ---> System.IO.IOException:管道损坏

我使用 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"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ASP.NET Core 中使用 wkhtmltopdf、docker 将 HTML 转换为 PDF 的相关文章

  • C++ 编译器可以对结构中的元素重新排序吗

    C 编译器 特别是 g 可以对结构体的内部元素重新排序吗 我看到一些奇怪的行为 其中我有一个包含如下内容的结构 Struct SomeStruct long someLong long someLongArray 25 unsigned l
  • Web API 复杂参数属性均为 null

    我有一个 Web API 服务调用可以更新用户的首选项 不幸的是 当我从 jQuery ajax 调用中调用此 POST 方法时 请求参数对象的属性始终为 null 或默认值 而不是传入的值 如果我使用 REST 客户端调用相同的方法 我使
  • 如何在 C++ 中的嵌套词法作用域可访问的作用域中声明静态信息?

    我想声明范围的标识符 该标识符将用于自动填充最内部范围内任何日志记录语句的字段 它们通常会 但并非总是如此 例如 lambda 使用 引入的块 匹配封闭块的 名称 用法看起来像这样 namespace app LOG CONTEXT app
  • 管理多个解决方案中存在的 C# 项目的 Nuget 包

    我现在正处于这样的阶段重构疯狂一个有很多的大项目遗留和不稳定的模块 我决定拆分解决方案目前 所有项目 大约有 20 个 而且由于下个月肯定会出现单元测试项目 还会有更多 链接在一起 使其更加独立和细化 通过这种方法 有一些模块 例如需要在多
  • 本机 C++ 通过代理 C++ 托管 dll 使用 C# dll

    这相当复杂 所以请耐心听我说 我有一个用本机 仅限 Win32 C 编码的第 3 方程序 目标 作为目标设计的一部分 它实现了一个 dll 插件系统 本机 DLL 当放置在程序的 ext 目录中时 由目标加载 然后 目标根据需要调用每个 D
  • 如何使用 Regsvr32 注册 .NET COM DLL?

    我有一个使用 COM DLL 的 VB6 应用程序 该DLL是用C 编写的 在 C 项目属性中 我检查了 Register for COM interop 选项 VB6 应用程序在我的开发机器上运行良好 C 代码完全遵循以下格式 CodeP
  • 使用 boost::asio 是否有一种可移植的方法来查找空闲端口号

    我目前正在尝试找出一种方法来查找空闲端口号以建立连接 最好使用 boost asio 然后 该端口号将用于侦听 只有这样我才能打开套接字 大致来说 有没有办法做到 tcp resolver query query localhost por
  • 带有 Prism 区域适配器的 AvalonDock

    我看到了一些关于 SO 的问题 但似乎没有一个适合我 我希望能够使用伟大的使用 Prism 4 但是 所有示例区域适配器均适用于 Avalondock 1 x 系列 我无法使其工作 有人有关于如何为 AvalonDock 的 LayoutD
  • 可以轻易移动,但不可轻易复制

    是否可以创建类类型 即 普通移动构造 但不是普通复制构造 但仍然可复制构造 普通复制构造 但不是普通移动构造 但仍然可移动构造 可以简单地复制分配 但不能简单地移动分配 但仍然可以移动分配 可以简单地移动分配 但不能简单地复制分配 但仍然可
  • WPF 中可选择的 TextBlock 或带有格式化文本的 TextBox

    我遇到一种情况 我需要显示格式化文本 正常 粗体 突出显示 并且还应该是可选择的 以便用户可以复制文本 我使用了文本块 我可以使用内联内容流元素应用多种格式 但不幸的是它的文本不可选择 虽然文本框允许选择文本并复制到剪贴板 但它不允许我设置
  • 在 .NET Core 上通过 MEF 将参数传递给插件构造函数?

    我花了几个小时试图弄清楚如何通过 MEF System Composition 将参数传递给插件构造函数 但一切都无济于事 不用说 相关文档很少 查看源代码也没有帮助 这曾经非常容易做到 使用 CompositionHost Compose
  • 将私有部分保留在 C++ 标头之外:纯虚拟基类与 pimpl

    我最近从 Java 和 Ruby 切换回 C 令我惊讶的是 当我更改私有方法的方法签名时 我必须重新编译使用公共接口的文件 因为私有部分也位于 h 文件中 我很快想出了一个解决方案 我想这对于 Java 程序员来说是典型的 接口 纯虚拟基类
  • 在浏览器中测试wcf服务

    我无法在浏览器中调用基本的 wcf web 方法 即使使用
  • 等效

    这是否保证始终为真 std numeric limits
  • 如何从 MongoDB 中的 ChangeStream 过滤对特定字段的更新

    我正在设置一个 ChangeStream 以便在集合中的文档发生更改时通知我 以便我可以将该文档的 LastModified 元素更新插入到事件发生的时间 由于此更新将导致 ChangeStream 上发生新事件 因此我需要过滤掉这些更新以
  • 从资源文件获取 DisplayName [重复]

    这个问题在这里已经有答案了 我在 App GlobalResources 文件夹中有特定于文化的资源文件 现在我需要从此资源文件中读取 DisplayName 属性的值 我在用 Display Name MerchantName Resou
  • System.IndexOutOfRangeException:索引超出了数组的范围[重复]

    这个问题在这里已经有答案了 我正在开发一个 ATM 软件作为家庭作业 我想知道今天处理的交易总量 为此我编写了以下代码 public decimal getDayTransaction int accountid string date s
  • 绑定未正确更新用户控件属性 MVVM

    编辑 删除旧代码 我将它放在 MainWindow xaml 上
  • 将整个单词与特殊字符匹配的正则表达式不起作用? [复制]

    这个问题在这里已经有答案了 我正在经历这个问题C Regex Match 整个单词 https stackoverflow com q 1209049 443568 它说要匹配整个单词使用 b模式 b 这对于匹配没有任何特殊字符的整个单词效
  • 在 C++11 中设置 std::thread 优先级的可移植方法

    在后 C 11 世界中设置 std thread 实例的优先级的正确方法是什么 是否有一种至少在 Windows 和 POSIX Linux 环境中有效的可移植方法 或者是获取句柄并使用可用于特定操作系统的任何本机调用的问题 无法通过 C

随机推荐

  • Java 应用程序的零停机部署

    我正在尝试构建非常轻量级的解决方案 以实现 Java 应用程序的零停机部署 为了简单起见 我们假设我们有两台服务器 我的解决方案是使用 在 前面 一些负载均衡器 软件 我在这里考虑 HAProxy 在 背面 两台服务器 都运行 Tomcat
  • 创建用于集成测试的 oauth-token

    我们希望创建一个 持久 的令牌用于集成测试目的 我们通常使用 keycloak 来创建令牌 但我不认为有可能创建没有过期的令牌 以便可以在开发阶段不间断地进行重复的集成测试 对于这种关于 oauth 的自动重复测试 您有何建议 所有访问令牌
  • 无论“delay”参数如何,Vue 异步组件都会毫无延迟地加载

    我在用高级异步组件 https v2 vuejs org v2 guide components html Advanced Async Components加载async component加载应用程序后 所以我尝试了以下代码 索引 vu
  • R SVM alpha 系数

    我正在尝试从 PMML 文件在 R 中重新创建 SVM 对象 但无法理解 R 如何存储 alpha 系数 我目前正在 iris 数据集上测试它 并使用以下命令生成了一个 R SVM 对象 library e1071 data iris mo
  • Android 通过 AT 命令与 HFP 设备通信

    我正在尝试通过 Android 中的 HFP 免提配置文件 控制具有振动功能的蓝牙手环 我已经能够连接到手环并访问输入和输出流 我的目标是模拟来电 以便蓝牙手环开始振动 这似乎是唯一的方法 为此 我使用 AT 命令 在蓝牙规格中https
  • Xcode 5.1:缺少所需的架构 arm64

    刚升级到Xcode 5 1 出现以下错误 忽略文件 依赖项 SalesforceNetworkSDK libSalesforceNetworkSDK a 文件中缺少所需的架构 arm64 依赖项 SalesforceNetworkSDK l
  • MD5解码。他们是如何做到的?

    我认为 不可能解码 md5 哈希值 但我找到了可以解码它们的工具here http md5 web max ca 但我不知道他们是如何在这么短的时间内做到这一点的 大约需要一秒钟 请帮助我理解它 Thanks 它不会解码 MD5 哈希值 它
  • 当无效值传递给 Props 时,TypeScript 不会抛出错误

    const enum ColumnValues one 1 two 2 three 3 interface Props style StyleProp
  • 无法加载,因为未找到支持的源。播放 HTML5 音频元素时[重复]

    这个问题在这里已经有答案了 我有 HTML5 音频元素
  • 如何从数组中获取多个键之间的最大值

    如何从数组中获取多个键之间的最大值 我已经尝试过以下方法只有三个 不是多个 钥匙 getMaxValuefromkeys values any key1 string key2 string key3 string var val1 Mat
  • 保存/加载 iPhone 游戏数据的最佳方式

    我正在开发一款益智游戏 游戏引擎拥有复杂的对象层次结构 从游戏演员到矢量再到过渡动画 根据游戏状态 它们的总数可能从 10 到 1000 在极端情况下 我一直在推迟这个时刻 直到我必须致力于保存和加载所有这些混乱的事情 因为我在这方面没有经
  • java 邮件轮询从邮件中读取内联或嵌入图像(笑脸)

    我是java邮件轮询的新手 我已经创建了一种类型的对话应用程序 如果用户互相发送邮件 然后我从他们那里读取邮件并将其作为对话中的新消息发布 现在的问题是 如果有表情符号 内联或嵌入图像该怎么办 例如 在 gmail 邮件中 我们现在也可以发
  • 如何在 Maven 项目中使用 -Xlint:unchecked 进行编译?

    在 NetBeans 7 2 中 我无法找到如何在 Maven 项目中使用 Xlint unchecked 进行编译 在 Ant 项目下 您可以通过转到 项目属性 gt 编译 来更改编译器标志 但 Maven 项目似乎没有任何此类选项 有什
  • Rails 4 多文件上传解决方案

    有人有解决方案吗 你能给我指出一个不是的吗 http railscasts com episodes 381 jquery file upload http railscasts com episodes 381 jquery file u
  • 如何解析格式错误的 HTML 文件?

    我必须解析一系列网页才能将数据导入应用程序 每种类型的网页都提供相同类型的数据 问题在于每个页面的 HTML 不同 因此数据的位置也不同 另一个问题是 HTML 代码的格式很差 导致无法使用类似 XML 的解析器 到目前为止 我能想到的最好
  • pom.xml 和 web.xml 的 Web 项目之间的区别

    具有 pom xml 和 web xml 的 Java 项目有什么区别 项目可以同时拥有这两种配置吗 它们完全兼容 事实上 他们执行完全不相关的任务 pom xml is the Maven 项目的配置文件 http maven apach
  • Chrome 打印空白页

    如果用户单击缩略图 我有一个旧的 JavaScript 代码可以打印图像 它曾经工作得很好 但最近 仅在 Chrome 中 预览中有一个空白页面 下面是 JsBin 中的演示 http jsbin com yehefuwaso 7 http
  • 在 PySpark 中以可扩展的方式链接多个 WHEN 条件

    我有一本字典 变量pats 与许多when参数 条件和值 from pyspark sql import functions as F df spark createDataFrame 2 col1 pats r d digit r p L
  • ion-button Click在ionic 4中未启动功能

    我的 ionic 4 代码中有一个按钮和一个函数 理想情况下 单击按钮时 该功能应该启动 但事实并非如此 MY HTML
  • 在 ASP.NET Core 中使用 wkhtmltopdf、docker 将 HTML 转换为 PDF

    我正在尝试在 ASP NET Core 应用程序中使用 wkhtmltopdf 将 HTML 转换为 PDF 我已将 wkhtmltopdf exe 添加到我的项目中 并标记为 始终复制到输出 这是我的代码 var htmlContent