添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

wkhtmltox-docker-golang

使用 wkhtmltopdf 生成用户定时报表.pdf
  • 要实现用户的定时 PDF 报告发送功能,需要用到 HTML -> PDF 的转换.选的工具是 wkhtmltopdf 使用 golang cmd.Exec("转换shell命令") 来做的.

  • 当然也有其他的方式无头浏览器(Headless Chrome) nodejs-puppter / golang-chromedp | example , 之前也整理过无头浏览器的使用 Golang使用WebSocket+ChromeDP实现实时页面监控

  • 使用 docker 多段构建 压缩镜像到最小
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    FROM surnet/alpine-wkhtmltopdf:3.9-0.12.5-full as wkhtmltopdf
    FROM alpine:3.9
    # 设置时区为上海
    RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone \
    && apk del tzdata
    RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.9/main/" > /etc/apk/repositories
    RUN echo "\n" >> /etc/apk/repositories
    RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.9/community/" >> /etc/apk/repositories
    RUN apk update \
    && apk upgrade \
    && apk add --no-cache bash \
    bash-doc \
    bash-completion \
    && rm -rf /var/cache/apk/* \
    && /bin/bash

    # Install dependencies for wkhtmltopdf
    RUN apk add --no-cache \
    libstdc++ \
    libx11 \
    libxrender \
    libxext \
    libssl1.1 \
    ca-certificates \
    fontconfig \
    freetype \
    ttf-dejavu \
    ttf-droid \
    ttf-freefont \
    ttf-liberation \
    ttf-ubuntu-font-family \
    && apk add --no-cache --virtual .build-deps \
    msttcorefonts-installer \
    \
    # Install microsoft fonts
    && update-ms-fonts \
    && fc-cache -f \
    \
    # Clean up when done
    && rm -rf /tmp/* \
    && apk del .build-deps

    # Copy wkhtmltopdf files from docker-wkhtmltopdf image
    COPY --from=wkhtmltopdf /bin/wkhtmltopdf /bin/wkhtmltopdf
    COPY --from=wkhtmltopdf /bin/wkhtmltoimage /bin/wkhtmltoimage
    COPY --from=wkhtmltopdf /bin/libwkhtmltox* /bin/
    wkhtmltopdf 常用参数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    常规选项 
    –allow 允许加载从指定的文件夹中的文件或文件(可重复)
    –book* 设置一会打印一本书的时候,通常设置的选项
    –collate 打印多份副本时整理
    –cookie 设置一个额外的cookie(可重复)
    –cookie-jar 读取和写入的Cookie,并在提供的cookie jar文件
    –copies 复印打印成pdf文件数(默认为1)
    –cover* 使用HTML文件作为封面。它会带页眉和页脚的TOC之前插入
    –custom-header 设置一个附加的HTTP头(可重复)
    –debug-javascript 显示的javascript调试输出
    –default-header* 添加一个缺省的头部,与页面的左边的名称,页面数到右边,例如: –header-left ‘[webpage]’ –header-right ‘[page]/[toPage]’ –header-line
    –disable-external-links* 禁止生成链接到远程网页
    –disable-internal-links* 禁止使用本地链接
    –disable-javascript 禁止让网页执行JavaScript
    –disable-pdf-compression* 禁止在PDF对象使用无损压缩
    –disable-smart-shrinking* 禁止使用WebKit的智能战略收缩,使像素/ DPI比没有不变
    –disallow-local-file-access 禁止允许转换的本地文件读取其他本地文件,除非explecitily允许用 –allow
    –dpi 显式更改DPI(这对基于X11的系统没有任何影响)
    –enable-plugins 启用已安装的插件(如Flash
    –encoding 设置默认的文字编码
    –extended-help 显示更广泛的帮助,详细介绍了不常见的命令开关
    –forms* 打开HTML表单字段转换为PDF表单域
    –grayscale PDF格式将在灰阶产生
    help Display help
    –htmldoc 输出程序HTML帮助
    –ignore-load-errors 忽略claimes加载过程中已经遇到了一个错误页面
    –lowquality 产生低品质的PDF/ PS。有用缩小结果文档的空间
    –manpage 输出程序手册页
    –margin-bottom 设置页面下边距 (default 10mm)
    –margin-left 将左边页边距 (default 10mm)
    –margin-right 设置页面右边距 (default 10mm)
    –margin-top 设置页面上边距 (default 10mm)
    –minimum-font-size 最小字体大小 (default 5)
    –no-background 不打印背景
    –orientation 设置方向为横向或纵向
    –page-height 页面高度 (default unit millimeter)
    –page-offset* 设置起始页码 (default 1)
    –page-size 设置纸张大小: A4, Letter, etc.
    –page-width 页面宽度 (default unit millimeter)
    –password HTTP验证密码
    –post Add an additional post field (repeatable)
    –post-file Post an aditional file (repeatable)
    –print-media-type* 使用的打印介质类型,而不是屏幕
    –proxy 使用代理
    –quiet Be less verbose
    –read-args-from-stdin 读取标准输入的命令行参数
    –readme 输出程序自述
    –redirect-delay 等待几毫秒为JS-重定向(default 200)
    –replace* 替换名称,值的页眉和页脚(可重复)
    –stop-slow-scripts 停止运行缓慢的JavaScripts
    –title 生成的PDF文件的标题(第一个文档的标题使用,如果没有指定)
    –toc* 插入的内容的表中的文件的开头
    –use-xserver* 使用X服务器(一些插件和其他的东西没有X11可能无法正常工作)
    –user-style-sheet 指定用户的样式表,加载在每一页中
    –username HTTP认证的用户名
    –version 输出版本信息退出
    –zoom 使用这个缩放因子 (default 1)

    页眉和页脚选项
    –header-center* (设置在中心位置的页眉内容)
    –header-font-name* (default Arial) (设置页眉的字体名称)
    –header-font-size* (设置页眉的字体大小)
    –header-html* (添加一个HTML页眉,后面是网址)
    –header-left* (左对齐的页眉文本)
    –header-line* (显示一条线在页眉下)
    –header-right* (右对齐页眉文本)
    –header-spacing* (设置页眉和内容的距离,默认0)
    –footer-center* (设置在中心位置的页脚内容)
    –footer-font-name* (设置页脚的字体名称)
    –footer-font-size* (设置页脚的字体大小default 11)
    –footer-html* (添加一个HTML页脚,后面是网址)
    –footer-left* (左对齐的页脚文本)
    –footer-line* 显示一条线在页脚内容上)
    –footer-right* (右对齐页脚文本)
    –footer-spacing* (设置页脚和内容的距离)
    ./wkhtmltopdf –footer-right ‘[page]/[topage]’ http://www.baidu.com baidu.pdf
    ./wkhtmltopdf –header-center ‘报表’ –header-line –margin-top 2cm –header-line http://192.168.212.139/oma/ oma.pdf
    表内容选项中
    –toc-depth* Set the depth of the toc (default 3)
    –toc-disable-back-links* Do not link from section header to toc
    –toc-disable-links* Do not link from toc to sections
    –toc-font-name* Set the font used for the toc (default Arial)
    –toc-header-font-name* The font of the toc header (if unset use –toc-font-name)
    –toc-header-font-size* The font size of the toc header (default 15)
    –toc-header-text* The header text of the toc (default Table Of Contents)
    –toc-l1-font-size* Set the font size on level 1 of the toc (default 12)
    –toc-l1-indentation* Set indentation on level 1 of the toc (default 0)
    –toc-l2-font-size* Set the font size on level 2 of the toc (default 10)
    –toc-l2-indentation* Set indentation on level 2 of the toc (default 20)
    –toc-l3-font-size* Set the font size on level 3 of the toc (default 8)
    –toc-l3-indentation* Set indentation on level 3 of the toc (default 40)
    –toc-l4-font-size* Set the font size on level 4 of the toc (default 6)
    –toc-l4-indentation* Set indentation on level 4 of the toc (default 60)
    –toc-l5-font-size* Set the font size on level 5 of the toc (default 4)
    –toc-l5-indentation* Set indentation on level 5 of the toc (default 80)
    –toc-l6-font-size* Set the font size on level 6 of the toc (default 2)
    –toc-l6-indentation* Set indentation on level 6 of the toc (default 100)
    –toc-l7-font-size* Set the font size on level 7 of the toc (default 0)
    –toc-l7-indentation* Set indentation on level 7 of the toc (default 120)
    –toc-no-dots* Do not use dots, in the toc
    轮廓选项
    –dump-outline 转储目录到一个文件
    –outline 显示目录(文章中h1,h2来定)
    –outline-depth 设置目录的深度(默认为4)
    页脚和页眉
    * [page] 由当前正在打印的页的数目代替
    * [frompage] 由要打印的第一页的数量取代
    * [topage] 由最后一页要打印的数量取代
    * [webpage] 通过正在打印的页面的URL替换
    * [section] 由当前节的名称替换
    * [subsection] 由当前小节的名称替换
    * [date] 由当前日期系统的本地格式取代
    * [time] 由当前时间,系统的本地格式取代
    ./wkhtmltopdf –footer-right ‘[page]/[topage]’ http://www.baidu.com baidu.pdf
    ./wkhtmltopdf –header-center ‘报表’ –outline –header-line –margin-top 2cm –header-line http://www.hao123.com/ hao123.pdf
    ./wkhtmltopdf –header-left ‘[webpage]’ –footer-center ‘测试([page]/[toPage])’ http://www.baidu.com baidu.pdf
  •