wkhtmltopdf 与 .Net Core

news/2024/5/20 0:33:37 标签: .netcore

wkhtmltopdf 是使用webkit引擎转化为pdf的开源小插件.
其有.NET CORE版本的组件,DinkToPdf,但该控件对跨平台支持有限。
故打算在Linux上安装相关插件直接调用.

准备工作

虚拟机: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

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/lib64

CMD ["/bin/bash"]

生成测试类

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程序。则得到如此结果。
在这里插入图片描述


http://www.niftyadmin.cn/n/4944244.html

相关文章

PHP实现轻量级WEB服务器接收HTTP提交的RFID刷卡信息并回应驱动读卡器显示播报语音

本示例使用的读卡器&#xff1a;RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) <?php mb_http_output(utf-8); $port88; $socket socket_create(AF_INET, SOCK_STREAM, SOL_TCP); $bool socket_bind($socket, "0.0.0.0",…

SpringMVC拦截器的介绍,拦截器的基本实现,拦截器链配置

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 拦截器 一、拦截器概念二、拦截器与过滤器的区别三、拦截器…

Vue实现动态遍历生成el-input

实现效果: el-input的label是measureName, el-input绑定的值是formDatat.measureCode 接口返回的数据格式如下 处理过的formData的格式如下

微信小程序全局事件订阅eventBus

微信小程序全局事件订阅 在Vue开发中&#xff0c;我们可能用过eventBus来解决全局范围内的事件订阅及触发逻辑&#xff0c;在微信小程序的开发中我们可能也也会遇到同样的需求&#xff0c;那么我们尝试下在小程序&#xff08;原生小程序开发&#xff09;中实现类似eventBus的事…

气象监测站:用科技感知气象变化

气象监测站是利用科学技术感知当地小气候变化情况的气象观测仪器&#xff0c;可用于农业、林业、养殖业、畜牧业、环境保护、工业等多个领域&#xff0c;提高对环境数据的利用率&#xff0c;促进产业效能不断提升。 气象监测站主要由气象传感器、数据传输系统、电源系统、支架…

leetcode做题笔记83删除排序链表中的重复元素

给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 思路一&#xff1a;模拟题意 struct ListNode* deleteDuplicates(struct ListNode* head){i…

LVS负载均衡群集部署(LVS-NAT模型实例)

NAT模式 LVS负载均衡群集部署 LVS负载调度器&#xff1a;ens33&#xff1a;192.168.50.22 ens36&#xff1a;10.0.0.1&#xff08;vmnet1&#xff09; Web1 节点服务器1&#xff1a;192.168.50.56 Web2 节点服务器2&#xff1a;192.168.50.57 NFS服务器&#xff1a;192.168.5…

Redis——hash类型详解

概述 Redis本身就是键值对结构&#xff0c;而Redis中的value可以是哈希类型&#xff0c;为了区分这两个键值对&#xff0c;Redis中的键值对是key-value&#xff0c;而value中的哈希键值对则是field-value&#xff0c;其中value必须是字符串 下面介绍一些Redis的hash类型的常用…