营销型网站建站要素,公司宣传片视频怎么做,滨江做网站,河南企业网络推广方法wkhtmltopdf 是使用webkit引擎转化为pdf的开源小插件. 其有.NET CORE版本的组件,DinkToPdf,但该控件对跨平台支持有限 。 是由于各系统平台会产生不同的编译结果,故windows上使用.dll,而Linux上的动态链接库是.so 所以你需要在Linux系统上安装相关wkhtmltox软件。 我这里准备了…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