• 安装wkhtmltopdf


    思路

    在网上查了下前后端都可以将html生成pdf,考虑到实现效果以及效率,最后决定将转化工作在服务端使用PHP完成。本着最好不要额外安装软件的原则,搜索过后分别尝试了 TCPDF MPDF FPDF html2pdf 等等。但是实现效果都与预期差距较大。最后不得不尝试需要额外安装的wkhtmltopdf。

    wkhtmltopdf简介

    引用 官网 介绍:wkhtmltopdf是wkhtmltox中的一个工具,另一个是wkhtmltoimage。它们是开源(LGPLv3)命令行工具,使用Qt WebKit渲染引擎将HTML呈现为PDF和各种图像格式。它们不需要显示或显示服务。值得一提的是谷歌浏览器chrome也使用的是Qt WebKit渲染引擎。

    wkhtmltopdf安装

    安装是在docker中进行的,使用开源项目docker-lnmp。但该php使用的是alpine版本,遂把镜像改回默认的debian版本,后由于客户使用的是centos,又单独下载了centos7的镜像。

    debian安装

    # wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.jessie_amd64.deb
    # dpkg -i wkhtmltox_0.12.5-1.jessie_amd64.deb

    这里安装会提示缺少依赖信息,其他信息可以直接通过apt-get install进行安装,但是这两个需要注意下 :

    dpkg: dependency problems prevent configuration of wkhtmltox:
     wkhtmltox depends on libpng12-0; however:
      Package libpng12-0 is not installed.
     wkhtmltox depends on libssl1.0.0; however:
      Package libssl1.0.0 is not installed.

    这两个包直接去仓库中搜索安装即可,然后再次执行安装命令,就会成功安装了

    # dpkg -i wkhtmltox_0.12.5-1.jessie_amd64.deb
    # wkhtmltopdf -V
    # wkhtmltopdf --enable-forms  https://www.baidu.com baidu.pdf

    centos安装

    # wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm
    # rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm

    正常系统安装并update后会提示缺少依赖信息:

    error: Failed dependencies:
        fontconfig is needed by wkhtmltox-1:0.12.2.1-1.x86_64
        freetype is needed by wkhtmltox-1:0.12.2.1-1.x86_64
        libpng is needed by wkhtmltox-1:0.12.2.1-1.x86_64
        libjpeg is needed by wkhtmltox-1:0.12.2.1-1.x86_64
        libX11 is needed by wkhtmltox-1:0.12.2.1-1.x86_64
        libXext is needed by wkhtmltox-1:0.12.2.1-1.x86_64
        libXrender is needed by wkhtmltox-1:0.12.2.1-1.x86_64
        xorg-x11-fonts-Type1 is needed by wkhtmltox-1:0.12.2.1-1.x86_64
        xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.12.2.1-1.x86_64

    这里直接按照提示的安装包就可以了

    # yum install fontconfig freetype libpng libjpeg libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi

    然后再次执行安装命令,就会成功安装了

    # rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm
    # wkhtmltopdf -V
    # wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdf

    wkhtmltopdf问题

    这里需要注意的是部分系统可能会抛出异常
    QXcbConnection: Could not connect to display Aborted (core dumped)
    这里需要安装xvfb然后使用xvfb运行

    # xvfb-run wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdf

    导出的pdf中文会有乱码,可以将windows系统c盘system32目录下的Fonts里面的字体拷贝到linux的/usr/share/fonts下重新运行就可以了

    wkhtmltopdf是跨平台的软件,和后端使用那种语言是没有关系的。
    PHP有直接可以用的框架https://github.com/KnpLabs/snappy和laravel框架https://github.com/barryvdh/laravel-snappy
    当然直接使用PHP执行shell也及其简单,但要注意防范webshell。

  • 相关阅读:
    C语言的指针
    C语言的编译过程和GCC编译参数
    GCC编译器的安装
    全字段多条件搜索(api接口)
    C# Replace字符替换函数
    NetCore MemoryCache使用
    vs2017 C# ActiveX浏览器插件 创建 发布 C# windows窗体控件库(.NET Framework)注意事项
    [Asp.net core 3.1] 通过一个小组件熟悉Blazor服务端组件开发
    [AspNetCore 3.0 ] Blazor 服务端组件 Render, RenderFragment ,RenderTreeBuilder, CascadingValue/CascadingParameter 等等
    [AspNetCore 3.0] 在RazorPages/MVC 中使用 Blazor (Razor组件)
  • 原文地址:https://www.cnblogs.com/houss/p/11940381.html
Copyright © 2020-2023  润新知