wkhtmltopdf 与 .Net Core
wkhtmltopdf 是使用webkit引擎转化为pdf的开源小插件.
其有.NET CORE版本的组件,DinkToPdf,但该控件对跨平台支持有限 。
是由于各系统平台会产生不同的编译结果,故windows上使用.dll,而Linux上的动态链接库是.so
所以你需要在Linux系统上安装相关wkhtmltox软件。
我这里准备了 mcr.microsoft.com/dotnet/sdk:6.0 的docker镜像。
准备工作
虚拟机:Linux version 3.10.0-1160.el7.x86_64
wkhtmltox开发包:wkhtmltox_0.12.6.1-2.bullseye_amd64.deb
运行环境:mcr.microsoft.com/dotnet/aspnet:6.0
Debian 11 镜像
Dockerfile
# 微软Debian 11 镜像
FROM mcr.microsoft.com/dotnet/sdk:6.0
WORKDIR /app
# 设置清华源
RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
RUN sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
# 安装依赖项
RUN apt-get update && apt-get install -y \fontconfig \libfreetype6 \libjpeg62-turbo \libpng16-16 \libx11-6 \libxcb1 \libxext6 \libxrender1 \xfonts-75dpi \xfonts-base# 安装wkhtmltox
COPY wkhtmltox_0.12.6.1-2.bullseye_amd64.deb .
RUN dpkg -i wkhtmltox_0.12.6.1-2.bullseye_amd64.deb# 设置环境变量
ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64CMD ["/bin/bash"]
生成镜像类
shell
docker build -t wkhtml:2023 .
docker-compose.yml
version: "3.0" # 模板的版本
networks:core-net:# 网络driver: bridge
services:test:networks:core-net:aliases:- testimage: wkhtml:2023volumes:- ./test:/appcommand: dotnet ConsoleApp.dll
生成测试类
using System.Runtime.InteropServices;public class Program
{// 声明CAPI函数[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern int wkhtmltopdf_init(int use_graphics);[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern IntPtr wkhtmltopdf_create_global_settings();[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern IntPtr wkhtmltopdf_create_object_settings();[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern void wkhtmltopdf_set_global_setting(IntPtr settings, string name, string value);[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern void wkhtmltopdf_set_object_setting(IntPtr settings, string name, string value);[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern IntPtr wkhtmltopdf_create_converter(IntPtr settings);[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern void wkhtmltopdf_add_object(IntPtr converter, IntPtr objectSettings, byte[] data);[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern int wkhtmltopdf_convert(IntPtr converter);[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern void wkhtmltopdf_destroy_converter(IntPtr converter);[DllImport("libwkhtmltox.so", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]public static extern void wkhtmltopdf_deinit();public static void Main(string[] args){Console.WriteLine("123");try{// 初始化wkhtmltopdf库wkhtmltopdf_init(0);// 创建全局设置和对象设置IntPtr gs = wkhtmltopdf_create_global_settings();IntPtr os = wkhtmltopdf_create_object_settings();// 设置全局设置和对象设置wkhtmltopdf_set_global_setting(gs, "out", "output.pdf");wkhtmltopdf_set_object_setting(os, "page", "1.html");// 创建转换器IntPtr converter = wkhtmltopdf_create_converter(gs);// 添加要转换的对象wkhtmltopdf_add_object(converter, os, null);// 执行转换wkhtmltopdf_convert(converter);// 清理资源wkhtmltopdf_destroy_converter(converter);wkhtmltopdf_deinit();}catch(Exception ex){Console.WriteLine(ex.ToString());}}
}
通过 Volumn 挂载将dll直接放置在容器中,并启动dll程序。则得到如此结果。

关于中文字体等
你可以使用Windows中的字体库 C:\Windows\Fonts 将其拷贝到 容器的 /usr/share/fonts
当然我是使用的容器挂载. 然后将其放到宿主机相关目录就可以了。
因为这里是用的相对路径,所以放置在docker-compose.yml所在目录的fonts就可以了。
docker-compose.yml
version: "3.0" # 模板的版本
networks:core-net:# 网络driver: bridge
services:test:networks:core-net:aliases:- testimage: wkhtml:2023volumes:- ./fonts:/usr/share/fontscommand: dotnet ConsoleApp.dll
相关文章:
wkhtmltopdf 与 .Net Core
wkhtmltopdf 是使用webkit引擎转化为pdf的开源小插件. 其有.NET CORE版本的组件,DinkToPdf,但该控件对跨平台支持有限 。 是由于各系统平台会产生不同的编译结果,故windows上使用.dll,而Linux上的动态链接库是.so 所以你需要在Linux系统上安装相关wkhtmltox软件。 我这里准备了…...
Linux Mint 21.3 计划于 2023 年圣诞节发布
Linux Mint 项目近日公布了基于 Ubuntu 的 Linux Mint 发行版下一个重要版本的一些初步细节,以及备受期待的基于 Debian 的 LMDE 6(Linux Mint Debian Edition)版本。 近日,Linux Mint 项目负责人克莱门特-勒菲弗(Clem…...
腾讯云3年轻量应用服务器2核4G5M和2核2G4M详细介绍
腾讯云轻量应用服务器3年配置,目前可以选择三年的轻量配置为2核2G4M和2核4G5M,2核2G4M和2核4G5M带宽,当然也可以选择选一年,第二年xufei会比较gui,腾讯云百科分享腾讯云轻量应用服务器3年配置表: 目录 腾…...
rabbitmq中的消息确认
如何保证消息被全部消费 应用场景:我们不想丢失任何任务消息。如果一个工作者(worker)挂掉了,我们希望任务会重新发送给其他的工作者(worker)。 为了防止消息丢失,RabbitMQ提供了消息响应&…...
jenkins一键部署github项目
个人目前理解jenkins部署分为两步: 构建项目,如生成jar自动执行sh脚本 如果没有jenkins,我们可能需要将jar移动到服务器,然后执行java -jar跑程序,jenkins可以替代我们执行这些东西,下面从0开始࿰…...
岩土工程安全监测隧道中使用振弦采集仪注意要点?
岩土工程安全监测隧道中使用振弦采集仪注意要点? 岩土工程的安全监测是非常重要的,它可以帮助工程师及时发现可能存在的问题,并及时解决,保障施工进度以及施工质量,保障工程的安全运行。其中,振弦采集仪是…...
第四章nginx组件精讲
nginx配件location匹配的规则和优先级(重点面试题) RUI:统一资源标识符,是一种字符串标识,用于标识抽象的或者物理资源(文件,图片,视频) nginx当中:uri ww…...
LlamaGPT -基于Llama 2的自托管类chatgpt聊天机器人
LlamaGPT一个自托管、离线、类似 ChatGPT 的聊天机器人,由 Llama 2 提供支持。100% 私密,不会有任何数据离开你的设备。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、如何安装LlamaGPT LlamaGPT可以安装在任何x86或arm64系统上。 首先确保…...
常见的跨域解决方案
常见的跨域解决方案: 跨域问题可以分为两种情况:前端跨域和后端跨域。以下是针对这两种情况的跨域解决方案: 前端跨域解决方案: JSONP: 适用于前端向不同域名下的服务器请求数据,通过添加回调函数名称来…...
分布式websocket解决方案
1、websocket问题由来 websocket基础请自行学习,本文章是解决在分布式环境下websocket通讯问题。 在单体环境下,所有web客户端都是连接到某一个微服务上,这样消息都是到达统一服务端,并且也是由一个服务端进行响应,所以不会出现问题。 但是在分布式环境下,我们很容易发现…...
奥威BI财务数据分析方案:借BI之利,成就智能财务分析
随着智能技术的发展,各行各业都走上借助智能技术高效运作道路,财务数据分析也不例外。借助BI商业智能技术能够让财务数据分析更高效、便捷、直观立体,也更有助于发挥财务数据分析作为企业经营管理健康晴雨表的作用。随着BI财务数据分析经验的…...
Android12之com.android.media.swcodec无法生成apex问题(一百六十三)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
Xcode build和version
参考 一个叫做Version,一个叫做Build,(version是版本号,build是打正式包每次Archive时的都增加的值)这两个值都可以在Xcode中选中target,点击“Summary”后看到。 Version在plist文件中的key是“CFBundleSh…...
前端面试:【原型链】代码世界的家族传承
嗨,亲爱的代码探险家!在JavaScript的奇妙世界里,有一个令人惊叹的概念,那就是原型链。这个概念就像是代码世界的家族传承,允许对象之间分享属性和方法,让你的代码更加高效和灵活。 1. 什么是原型链…...
2D应用开发是选择WebGL 还是选择Canvas?
推荐:使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 在介绍WebGL和Canvas的区别和联系之前,需要先了解它们各自的定义和特点。 WebGL是一种基于标准HTML5的技术,用于在Web浏览器中实时渲染3D图形。它是由Khronos Group开发的一套…...
Android Framework 常见解决方案(20)UDP广播无效问题
1 现象描述和原理解读 该问题同时存在于android App和Framework系统中。最终效果是在Android系统中直接使用UDP广播无效,有意思的是有的android系统可以,有的Android 系统不行。然而该部分代码自己在Linux上测试时是有效的,代码不变…...
VINS-Mono中的边缘化与滑窗 (4)——VINS边缘化为何是局部变量边缘化?
文章目录 0.前言1.系统构建1.1.仿真模型1.2.第一次滑窗优化1.3.第二次全局优化 2.边缘化时不同的舒尔补方式2.1.边缘化时舒尔补的意义2.2.不同的边缘化方式 3.边缘化时不同的舒尔补方式实验验证3.1.全局schur的操作方式3.2.VIO或VINS中局部边缘化的方式3.3.两种方式和全局优化方…...
真·VB.NET彻底释放Interop.Excel对象
使用 Microsoft.Office.Interop.Excel 虽然有速度慢的缺点;但是作为自带引用,兼容性最好,而且是COM对象模型也很熟悉(Excel里直接录个宏,很方便把VBA代码转成VB.NET)。所以处理几百上千条的小数据时还是很方便的。 而 Microsoft.…...
记录hutool http通过代理模式proxy访问外面的链接
效果: 代码: public class TestMain {public static void main(String[] args){HttpRequest httpRequest HttpRequest.get("https://www.youtube.com").timeout(30000);httpRequest.setProxy(new Proxy(Proxy.Type.HTTP,new InetSocketAddre…...
Selenium 自动化 | 案例实战篇
Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器(如 Chrome、Opera 和 Microsoft Edge)中的工具,用于帮助开发人员调试和研究网站。 借助 Chrome DevTools,开发人员可以更深入地访问网站…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
