php 使用html 生成pdf word wkhtmltopdf 系列1

php 使用html 生成pdf word wkhtmltopdf 系列2

php 使用html 生成 pdf word

项目有个需求 想同时生成word 和pdf 并且·对pdf要求比较高 为了一劳永逸 决定写成html 分别转成word 和pdf

系统环境

windows10+ 小皮面板(php8+)

linux centos 7.9 + 宝塔(php8+)

系统扩展 wkhtmltopdf

php扩展


wkhtmltopdf :是一个命令行工具,它使用 Qt WebKit 渲染引擎将 HTML 内容转换为 PDF 文档或各种图像格式


1.wkhtmltopdf 安装

1.1 Windows10 安装

官网:https://wkhtmltopdf.org/downloads.html

有的小伙伴下载不了:下载链接是通过github下载 这里需要翻墙 。


双击点击安装

点开在1处 搜索环境变量 点击编辑环境变量 点击2 点击编辑 3处 新建 将安装地址放入

Windows+r输入 cmd 回车

命令行输入 wkhtmltopdf -V

显示下边的就是安装成功了

1.2 linux centos 7.9 安装

bash 复制代码
# 下载wkhtmltopdf软件:
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb

#复制代码
#安装wkhtmltopdf软件:
sudo dpkg -i wkhtmltox_0.12.6-1.bionic_amd64.deb
#复制代码
#安装完成后,可以在终端中输入 
wkhtmltopdf -V
#来检查是否安装成功。

2.wkhtmltopdf 命令

命令格式:wkhtmltopdf [GLOBAL OPTION]... [OBJECT]...

命令行工具自然是没有图形界面的。

下边给几个例子在下面。不愿意深入了解的就不必再浪费时间了。

把一个html文件转换成PDF

bash 复制代码
wkhtmltopdf http://example.com output.pdf
作用 命令
把一个 url 指向的网页转换成PDF wkhtmltopdf http://example.com output.pdf
把html文件 和 url指向的网页 转换成图片 wkhtmltoimage xxx.html xxx.jpg

3.详细介绍

命令参数包含五部分,分别是"全局参数","大纲参数选项","页面对象参数","页眉和页脚参数选项"和"目录对象参数"。

3.1 全局参数

bash 复制代码
    --collate             当输出多个副本时进行校验(这是默认设置)
    --no-collate          当输出多个副本时不进行校验
    --cookie-jar <path>   从提供的JAR文件中读写cookie数据
    --copies <number>     设置输出副本的数量(默认主1),其实为1就够了
-d, --dpi <dpi>           指定一个要分辨率(这在 X11 系统中并没有什么卵用)
-H, --extended-help       相对 -h 参数,显示更详细的说明文档
-g, --grayscale           指定以灰度图生成PDF文档。占用的空间更小
-h, --help                显示帮助信息  
    --htmldoc             输出程序的html帮助文档
    --image-dpi <integer> 当页面中有内嵌的图片时,
                          会下载此命令行参数指定尺寸的图片(默认值是 600)
    --image-quality <interger> 当使用 jpeg 算法压缩图片时使用这个参数指定的质量(默认为 94)
    --license             输出授权信息并退出
-l, --lowquality          生成低质量的 PDF/PS ,能够很好的节约最终生成文档所占存储空间
    --manpage             输出程序的手册页
-B, --margin-bottom <unitreal> 设置页面的 底边距
-L, --margin-left <unitreal>   设置页面的 左边距 (默认是 10mm)
-R, --margin-right <unitreal>  设置页面的 右边距 (默认是 10mm)
-T, --margin-top <unitreal>    设置页面的 上边距
-O, --orientation <orientation> 设置为"风景(Landscape)"或"肖像(Portrait)"模式,
                                默认是肖像模块(Portrait)
    --page-height <unitreal>   页面高度
-s, --page-size <Size>         设置页面的尺寸,如:A4,Letter等,默认是:A4
    --page-width <unitreal>    页面宽度
    --no-pdf-compression       不对PDF对象使用丢失少量信息的压缩算法,不建议使用些参数,
                               因为生成的PDF文件会非常大。
-q, --quiet                    静态模式,不在标准输出中打印任何信息
    --read-args-from-stdin     从标准输入中读取命令行参数,后续会有针对此指令的详细介绍,
                               请参见 **从标准输入获取参数**
    --readme                   输出程序的 readme 文档
    --title <text>             生成的PDF文档的标题,如果不指定则使用第一个文档的标题
-V, --version                  输出版本信息后退出
  1. 下边挑一下常用的用法 -g, --grayscale

    这个参数非常有用,使用这个参数可以有效压缩生成的PDF所占用的存储空间。当然这个压缩是要付出一定代价的,那就是最终生成的PDF文档将是灰度的,没有任何色彩。如果你能接受灰度PDF文档,并不影响实际使用,那就请使用这个参数吧。生成的PDF文档越大,使用此参数获得的惊喜就越大。

  2. -l, --lowquality 这个参数与 -g 参数有异曲同工之妙, -l 参数也会大大压缩PDF文档所占用的存储空间。只是它是通过降低PDF文档的质量来完成这一任务的。在纯文字的情况下他们的差别不大,此参数只是降低了PDF文档的质量,看上去是糙了一些,但不会影响阅读。生成的PDF文档中有大量图片,那就不要使用此参数了。

  3. -q, --quiet 使用这个参数后,你将得到一个干净的命令行输出,就连程序处理的进度和状态都没有。这个参数会抑制所有命令行输出,在程序的工作过程中,你看不到任何输出。

3.2 大纲参数选项

bash 复制代码
--dump-default-toc-xsl     输出默认的 TOC xsl 样式表到标准输出
--dump-outline <file>      输出"大纲"到指定的文件(文件内容为xml)
--outline                  在生成的PDF文档中输出"大纲"(这是默认设置)
--no-outline               不在pdf文档中输出大纲
--outline-depth <level>    设置生成大纲的深度(默认为 4)

--outline-depth

  • --outline-depth 用来指定生成的大纲的深度。默认值为 4。你可以指定一个大一些的数字,以保证所有在HTML中指定的H标签都能在大纲中生成对应的项,方便阅读时快速跳转。

    当指定了 --no-outline 参数时, 将不会输出大纲到PDF文档,所以再指定 --outline-depth 也就没有意义了。

3.3 页面对象参数

bash 复制代码
    --allow <path>                指定加载HTML中相对路径文件的目录(可重复使用此参数指定多个
                                  目录),这个参数会在后面进行更详细的讲解
    --background                  输出页面背景到PDF文档(这是默认设置)
    --no-background               不输出页面背景到PDF文档
    --cache-dir <path>            网页的缓存目录
    --checkbox-checked-svg <path> 使用指定的SVG文件渲染选中的复选框
    --checkbox-svg <path>         使用指定的SVG文件渲染未选中的筛选框
    --cookie <name> <value>       设置访问网页时的cookie,value 需要进行url编码
                                  (可重复使用此参数指定多个cookie)
    --custom-header <name> <value> 设置访问网页时的HTTP头(可重复使用此参数指定多个HTTP头)
    --custom-header-propagation   为每个要加载的资源添加由 --custom-header 指定的HTTP头
    --no-custom-header-propagation 不为每个要加载的资源添加由 --custom-header 指定的HTTP头
    --debug-javascript            显示javascript调试输出的信息
    --no-debug-javascript         不显示javascript调试输出的信息(这是默认设置)
    --default-header              添加一个默认的"头",在页面的左头显示页面的名字,
                                  在页面的右头显示页码,这相对于进行了如下设置:
                                  --header-left='[webpage]'
                                  --header-right='[page]/[toPage]'
                                  --top 2cm
                                  --header-line
    --encoding <encoding>         为输入的文本设置默认的编码方式
    --disable-external-links      禁止页面中的外链生成超链接
    --enable-external-links       允许页面中的外链生成超链接(这是默认设置)
    --disable-forms               不转换HTML表单为PDF表单(这是默认设置)
    --enable-forms                转换HTML表单为PDF表单
    --images                      加载图片并输出到PDF文档(这是默认设置)
    --no-images                   在生成的PDF文档中过滤掉图片
    --disable-internal-links      禁止页面中的内链生成超链接
    --enable-internal-links       允许页面中的内链生成超连接(这是默认设置)
-n, --disable-javascript          禁止WEB页面执行 javascript
    --enable-javascript           允许WEB页面执行 javascript(这是默认设置)
    --javascript-delay <msec>     延迟一定的毫秒等待javascript 执行完成(默认值是200)
    --load-error-handling <handler> 指定当页面加载失败后的动作,可以指定为:abort(中止)、
                                    ignore(忽略)、skip(跳过);(默认值是:abort)
    --load-media-error-handling <handler> 指定当媒体文件加载失败后的动作,可以指定为:
                                          abort(中止)、ignore(忽略)、skip(跳过);
                                          (默认值是:ignore)
    --disable-local-file-access   不允许一个本地文件加载其他的本地文件,使用命令行参数
                                   `--allow` 指定的目录除外。
    --enable-local-file-access    允许本地文件加载其他的本地文件(这是默认设置)
    --minimum-font-size <int>     设置最小的字号,除非必要不推荐使用该参数
    --exclude-from-outline        拒绝加载当前页面到PDF文档的目录和大纲中
    --include-in-outline          加载当前页面到PDF文档的目录和大纲中(这是默认设置)
    --page-offset <offset>        设置页码的起始值(默认值为0)
    --password <password>         HTTP身份认证的密码
    --disable-plugins             禁止使用插件(这是默认设置)
    --enable-plugins              允许使用插件,但插件可能并不工作
    --post <name> <value>         添加一个POST字段,可以重复使用该参数添加多个POST字段。
    --post-file <name> <value>    添加一个POST文件,可以重复使用该参数添加多个文件。
    --print-media-type            用显示媒体类型代替屏幕
    --no-print-media-type         不用显示媒体类型代替屏幕
-p, --proxy <proxy>               使用代理
--radiobutton-checked-svg <path>  使用指定的SVG文件渲染选中的单选框
--radiobutton-svg <path>          使用指定的SVG文件渲染未选中的单选框
--run-sript <js>                  页面加载完成后执行一个附加的JS文件,可以重复使用此参数指定
                                  多个要在页面加载完成后要执行的JS文件。
--disable-smart-shrinking         不使用智能收缩策略
--enable-smart-shrinking          使用智能收缩策略(这是默认设置)
--stop-slow-scripts               停止运行缓慢的javascript代码(这是默认设置)
--no-stop-slow-scripts            不停止运行缓慢的javascript代码
--disable-toc-back-links          禁止从标题链接到目录(这是默认设置)
--enable-toc-back-links           允许从标题链接到目录
--user-style-sheet <url>          设置一个在每个页面都加载的用户自定义样式表
--username <username>             HTTP身谁的用户名
--viewport-size <>                设置窗口大小,需要你自定义滚动条或css属性来自适应窗口大小。
--window-status <windowStatus>    Wait until window.status is equal to
                                  this string before rendering page
--zoom <float>                    设置转换成PDF时页面的缩放比例(默认为1)

也是一样我们找一些常用的来说明

  1. --background AND --no-background

    这两个参数是一对,用来指定是否在生成的PDF中应用网页的背景,默认 --background 参数是开启的,也就是说默认生成的PDF文档中是带有HTML页面的背景图片或背景色的。如果开启 --no-backgroupd 参数,则生成的PDF文档中不会有HTML页面中的背景图片和背景色。

  2. --debug-javascript ADN --no-debug-javascript

    这两个参数用来指定是否在标准输出中输出javascript的调试信息,默认 --no-debug-javasript 参数是开启的,也就是说默认不会输出javascript的调试信息。下图是打开 --debug-javascript 参数的演示。

  3. --disable-external-links AND --enable-external-links

    这两个参数是用来设置在页面中的外链是否以超链接的形式出现在PDF文档中。关于"外链"的定义请移架 术语定义 。默认 --enable-external-links 参数被打开,所以默认情况是页面中的外链是以超链接的形式出现的PDF文档中的,点击可以打开指定的网页。

  4. --exclude-from-outline AND --include-in-outline

    这两个参数用来设置当前页面对象是否包含到目录和大纲中。

    默认情况下 --include-in-outline 参数是打开的。也就是说默认情况下生成的PDF文档目录和大纲中是包含当前页面的,如果你不想让当前页面加到目录和大纲中可以打开 --exclude-from-outline 参数。

  5. --user-style-sheet

    这个参数用来加载一个用户自定义的样式表,用来改变HTML页面原有的样式。需要高度自定义页面新式的同学可以尝试使用这个参数达到目的。

3.4 页眉和页脚参数选项

bash 复制代码
--footer-center <text>        在页脚的居中部分显示页脚文本 <text>
--footer-font-name <name>     设置页脚的字体 (默认为 Arial)
--footer-font-size <size>     设置页脚的字体大小 (默认为 12)
--footer-html <url>           添加一个html作为页脚
--footer-left <text>          在页脚的居左部分显示页脚文本 <text>
--footer-line                 在页脚上方显示一条直线分隔正文
--no-footer-line              不使用直线分隔页脚与正文(这是默认设置)
--footer-right <text>         在页脚的居右部分显示页脚文本 <text>
--footer-spacing <real>       页脚与正文之间的距离(默认为零)


--header-center <text>        在页眉的居中部分显示页眉文本 <text>
--header-font-name <name>     设置页眉的字体 (默认为 Arial)
--header-font-size <size>     设置页眉的字体大小 (默认为 12)
--header-html <url>           添加一个html作为页眉
--header-left <text>          在页眉的居左部分显示页眉文本 <text>
--header-line                 在页眉下方显示一条直线分隔正文
--no-header-line              不使用直线分隔页眉与正文(这是默认设置)
--header-right <text>         在页眉的居右部分显示页眉文本 <text>
--header-spacing <real>       页眉与正文之间的距离(默认为零)

3.5 目录对象参数

bash 复制代码
--disable-dotted-lines        在目录中不使用虚线
--toc-header-text <text>      设置目录的页眉文本
--toc-level-indentation <width> 第级标题在目录中的缩进宽度(默认为1em)
--disable-toc-links           在目录中不生成指向内容锚点的超链接
--toc-text-size-shrink <real> 在目录中每级标题的缩放比例(默认为0.8)
--xsl-style-sheet <file>      使用自定义的 XSL 样式表显示目录内容

默认的页面尺寸是 A4,你可以使用 --page-size 参数指定你想要的页面尺寸,如:A3,Letter 和 Legal等。

相关推荐
ServBay11 小时前
垃圾堆里编码?真的不要怪 PHP 不行
后端·php
用户9623779544813 小时前
CTF 伪协议
php
willow2 天前
html5基础整理
html
BingoGo3 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack3 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo4 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack4 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
anOnion4 天前
构建无障碍组件之Radio group pattern
前端·html·交互设计
前端Hardy4 天前
HTML&CSS&JS:丝滑无卡顿的明暗主题切换
javascript·css·html
JaguarJack5 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端