在 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 的相关文章

  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 经常提交 docker 容器是一个好习惯吗?

    我在里面使用WebSphere Liberty 由于 WebSphere Liberty 需要频繁的 xml 编辑 这对于 Dockerfile 命令来说是不可能的 我必须不时地对容器进行 docker commit 以便其他人可以使用我的
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 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