资源
https://github.com/subtlephp/phpwkhtmltox/blob/master/src/WkHtmlTo/PDF/ConfigResolver.php
https://wkhtmltopdf.org/usage/wkhtmltopdf.txt
名称:
wkhtmltopdf 0.12.5(补丁qt)
概要:
wkhtmltopdf [GLOBAL OPTION] ... [OBJECT] ... <输出文件>
文件对象:
wkhtmltopdf能够将多个对象放入输出文件中,对象是
单个网页,封面网页或目录。对象
按照在指定的顺序放入输出文档
命令行,可以基于每个对象或全局指定选项
选择区。“全局选项”部分中的选项只能放入
全球选择领域
页面对象将单个网页的内容放入输出文档中。
(页)?<输入网址/文件名> [页面选项] ...
页面对象的选项可以放在全局选项和页面中
选择领域。适用的选项可在页面选项和页面中找到
页眉和页脚选项部分。
封面对象将单个网页的内容放入输出文档中,
页面没有出现在目录中,也没有标题
和页脚。
封面<输入网址/文件名> [页面选项] ...
还可以为页面对象指定所有可以选择的选项
封面。
目录对象将内容表插入到输出中
文献。
toc [TOC选项] ......
还可以为页面对象指定所有可以选择的选项
另外,TOC选项部分的选项也可以更多
应用。目录是通过XSLT生成的,这意味着它可以
被设计为看起来你想要它看起来。想知道该怎么做
这可以通过提供来转储默认的xslt文档
--dump-default-toc-xsl,以及它提供的工作大纲
--dump-outline,请参阅“大纲选项”部分。
描述:
使用wkhtmltopdf patched将一个或多个HTML页面转换为PDF文档
QT。
全球选择:
- 打印多份时,逐份打印
(默认)
--no-collate打印多个时不进行整理
副本
--cookie-jar <path>读取和写入cookie
提供的cookie jar文件
--copies <number>要打印到pdf中的份数
文件(默认1)
-d, - dpi <dpi>显式更改dpi(这没有
对基于X11的系统的影响)(默认为96)
-H, - extended-help显示更广泛的帮助,详细说明
不太常见的命令开关
-g, - grayscale PDF将以灰度生成
-h, - help显示帮助
--htmldoc输出程序html帮助
--image-dpi <integer>当嵌入图像时将它们缩小到
这个dpi(默认为600)
--image-quality <integer>当jpeg压缩图像时使用它
质量(默认94)
--license输出许可证信息并退出
--log-level <level>将日志级别设置为:none,error,warn或
信息(默认信息)
-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>将方向设置为横向或纵向
(默认人像)
--page-height <unitreal>页面高度
-s, - page-size <尺寸>将纸张尺寸设置为:A4,Letter等
(默认A4)
--page-width <unitreal>页面宽度
--no-pdf-compression不要在pdf上使用无损压缩
对象
-q, - quiet更加冗长,为倒退而维护
兼容性; 与使用--log-level相同
没有
--read-args-from-stdin从stdin读取命令行参数
--readme输出程序自述文件
--title <text>生成的pdf文件的标题(The
如果没有,则使用第一个文档的标题
指定)
--use-xserver使用X服务器(一些插件和其他插件)
没有X11可能无法正常工作
-V, - version输出版本信息并退出
大纲选项:
--dump-default-toc-xsl将默认的TOC xsl样式表转储到
标准输出
--dump-outline <file>将大纲转储到文件中
--outline将大纲放入pdf(默认)
--no-outline不要在pdf中加入大纲
--outline-depth <level>设置轮廓的深度(默认为4)
页面选项:
--allow <path>允许指定的文件
要加载的文件夹(可重复)
--background打印背景(默认)
--no-background不打印背景
--bypass-proxy-for <value>绕过主机代理(可重复)
--cache-dir <path> Web缓存目录
--checkbox-checked-svg <path>选中渲染时使用此SVG文件
复选框
--checkbox-svg <path>在未选中呈现时使用此SVG文件
复选框
--cookie <name> <value>设置一个额外的cookie(可重复),
值应该是url编码的。
--custom-header <name> <value>设置一个额外的HTTP头(可重复)
--custom-header-propagation添加指定的HTTP头
- 每个资源请求的自定义标头。
--no-custom-header-propagation不添加指定的HTTP头
- 每个资源请求的自定义标头。
--debug -javascript显示javascript调试输出
--no-debug-javascript不显示javascript调试输出
(默认)
--default-header添加一个默认标题,其名称为
页面左侧,页码到
右边,这是:
--header左= '[网页]'
--header-right ='[page] / [toPage]' - top 2cm
--header线
--encoding <encoding>设置输入的默认文本编码
--disable-external-links不要链接到远程网页
--enable-external-links建立到远程网页的链接(默认)
--disable-forms不要将HTML表单字段转换为pdf格式
字段(默认)
--enable-forms将HTML表单字段转换为pdf表单字段
--images加载或打印图像(默认)
--no-images不加载或打印图像
--disable-internal-links不要建立本地链接
--enable-internal-links制作本地链接(默认)
-n, - disable-javascript不允许网页运行javascript
--enable-javascript允许网页运行javascript
(默认)
--javascript-delay <msec>等待几毫秒的javascript
完成(默认200)
--keep-relative-links将相对外部链接保持为相对
外部链接
--load-error-handling <handler>指定如何处理失败的页面
load:abort,ignore或skip(默认值
中止)
--load-media-error-handling <handler>指定如何处理媒体文件
无法加载:中止,忽略或跳过
(默认忽略)
--disable-local-file-access不允许转换本地文件
读取其他本地文件,除非
明确允许使用--allow
--enable-local-file-access允许将本地文件转换为read
在其他本地文件中。(默认)
--minimum-font-size <int>最小字体大小
--exclude-from-outline不要在表格中包含该页面
内容和大纲
--include-in-outline在目录中包含该页面
和轮廓(默认)
--page-offset <offset>设置起始页码(默认为0)
--password <密码> HTTP验证密码
--disable-plugins禁用已安装的插件(默认)
--enable-plugins启用已安装的插件(插件将
可能不起作用)
--post <name> <value>添加额外的帖子字段(可重复)
--post-file <name> <path>发布一个附加文件(可重复)
--print-media-type使用print media-type而不是screen
--no-print-media-type不要使用打印介质类型而不是
屏幕(默认)
-p, - proxy <proxy>使用代理
--proxy-hostname-lookup使用代理解析主机名
--radiobutton-checked-svg <path>选中渲染时使用此SVG文件
单选按钮
--radiobutton-svg <path>在未选中渲染时使用此SVG文件
单选按钮
--resolve-relative-links将相对外部链接解析为
绝对链接(默认)
--run-script <js>运行此附加的javascript后
页面加载完成(可重复)
--disable-smart-shrinking禁用智能收缩策略
由WebKit用来制作像素/ dpi
比率无常数
--enable-smart-shrinking启用智能收缩策略
由WebKit用来制作像素/ dpi
比率无常数(默认)
--ssl-crt-path <path> ssl客户端证书公钥的路径
OpenSSL PEM格式,可选择后跟
中级ca和可信证书
--ssl-key-password <密码> ssl客户端证书私钥的密码
--ssl-key-path <path> ssl客户端证书私钥的路径
OpenSSL PEM格式
--stop-slow-scripts停止慢速运行javascripts(默认)
--no-stop-slow-scripts不要停止慢速运行javascripts
--disable-toc-back-links不要从节头到toc链接
(默认)
--enable-toc-back-links从节头到toc的链接
--user-style-sheet <url>指定要加载的用户样式表
每一页
--username <username> HTTP身份验证用户名
--viewport-size <>如果您有自定义,则设置视口大小
滚动条或css属性溢出到
模拟窗口大小
--window-status <windowStatus>等到window.status等于this
渲染页面前的字符串
--zoom <float>使用此缩放系数(默认值为1)
页眉和页脚选项:
--footer-center <text>居中的页脚文字
--footer-font-name <name>设置页脚字体名称(默认Arial)
--footer-font-size <size>设置页脚字体大小(默认为12)
--footer -html <url>添加一个html页脚
--footer-left <text>左对齐的页脚文本
- footer-line页脚上方的显示行
--no-footer-line不要在页脚上方显示行
(默认)
--footer-right <text>右对齐的页脚文本
--footer-spacing <real>页脚和内容之间的间距,单位为mm
(默认为0)
--header-center <text>居中的标题文本
--header-font-name <name>设置标题字体名称(默认Arial)
--header-font-size <size>设置标题字体大小(默认为12)
--header-html <url>添加一个html标题
--header-left <text>左对齐标题文本
--header-line标题下方的显示行
--no-header-line不在标题下方显示行
(默认)
--header-right <text>右对齐标题文本
--header-spacing <real>标题和内容之间的间距,单位为mm
(默认为0)
--replace <name> <value>将[name]替换为header和中的值
页脚(可重复)
TOC选项:
--disable-dotted-lines不要在toc中使用虚线
--toc-header-text <text> toc的标题文本(默认表
内容)
--toc-level-indentation <width>对于toc中的每个标题级别
按此长度缩进(默认为1em)
--disable-toc-links不要从toc链接到部分
--toc-text-size-shrink <real>对于toc中每个级别的标题
字体按此因子缩放(默认值
0.8)
--xsl-style-sheet <file>使用提供的xsl样式表
打印目录
页面大小:
渲染文档的默认页面大小为A4,但使用此方法
--page-size选项可以改为几乎任何其他选项,例如:A3,
信和法律。有关支持的页面大小的完整列表,请参阅
<http://qt-project.org/doc/qt-4.8/qprinter.html#PaperSize-enum>。
对于页面大小更精细的控制--page-height和
- 可以使用 - 页面宽度选项
从stdin读取参数:
如果您需要批量转换大量页面,并且您感觉如此
wkhtmltopdf启动有点太慢,那你应该试试
--read-ARGS从 - 标准输入,
当--read-args-from-stdin将每行输入发送到stdin上的wkhtmltopdf时
将作为wkhtmltopdf的单独调用,并指定参数
在给定的行上结合给wkhtmltopdf的参数
例如,可以执行以下操作:
echo“http://qt-project.org/doc/qt-4.8/qapplication.html qapplication.pdf”>> cmds
echo“cover google.com http://en.wikipedia.org/wiki/Qt_(software)qt.pdf”>> cmds
wkhtmltopdf --read-args-from-stdin --book <cmds
指定代理:
默认情况下,将从环境变量中读取代理信息:
proxy,all_proxy和http_proxy,代理选项也可以通过指定
-p开关
<type>:=“http://”| “SOCKS5://”
<serif>:= <username>(“:”<password>)?“@”
<proxy>:=“无”| <类型>?<字符串>?<host>(“:”<port>)?
以下是一些示例(如果您不熟悉BNF):
HTTP://用户名:密码@ myproxyserver:8080
SOCKS5:// myproxyserver
没有
页脚和标题:
页眉和页脚可以通过--header- *和添加到文档中
- 恭敬地参与*争论。在提供的页眉和页脚文本字符串中
例如--header-left,将替换以下变量。
* [页面]替换为当前正在打印的页数
* [frompage]替换为要打印的第一页的编号
* [topage]替换为要打印的最后一页的编号
* [网页]替换为正在打印的页面的URL
* [section]替换为当前部分的名称
* [subsection]替换为当前小节的名称
* [date]以系统本地格式替换为当前日期
* [isodate]替换为ISO 8601扩展格式的当前日期
* [time]以系统本地格式替换当前时间
* [title]替换为当前页面对象的标题
* [doctitle]替换为输出文档的标题
* [sitepage]替换为当前正在转换的网站中的页面编号
* [sitepages]替换为当前正在转换的网站中的页数
作为一个例子,将指定--header-right“[toPage]”的Page [page]
在文本“Page x of y”中,其中x是当前页面的编号,y是
最后一页的编号,显示在左上角
文献。
页眉和页脚也可以提供HTML文档。举个例子
可以指定--header-html header.html,并使用以下内容
header.html中:
<!DOCTYPE html>
<HTML> <HEAD> <SCRIPT>
function subst(){
var vars = {};
var query_strings_from_url = document.location.search.substring(1).split('&');
for(query_strings_from_url中的var query_string){
if(query_strings_from_url.hasOwnProperty(query_string)){
var temp_var = query_strings_from_url [query_string] .split('=',2);
vars [temp_var [0]] = decodeURI(temp_var [1]);
}
}
var css_selector_classes = ['page','frompage','topage','pagepage','section','subsection','date','isodate','time','title','doctitle','sitepage ','sitepages'];
for((css_selector_classes中的var css_class){
if(css_selector_classes.hasOwnProperty(css_class)){
var element = document.getElementsByClassName(css_selector_classes [css_class]);
for(var j = 0; j <element.length; ++ j){
element [j] .textContent = vars [css_selector_classes [css_class]];
}
}
}
}
</ script> </ head> <body style =“border:0; margin:0;” 的onload = “SUBST()”>
<table style =“border-bottom:1px solid black; width:100%”>
<TR>
<td class =“section”> </ td>
<td style =“text-align:right”>
<span class =“topage”> </ span>的页面<span class =“page”> </ span>
</ TD>
</ TR>
</ TABLE>
</ BODY> </ HTML>
从示例中可以看出,参数被发送到页眉/页脚
获得时尚的html文档。
大纲:
带有补丁qt的Wkhtmltopdf支持PDF轮廓,也称为书
标记,可以通过指定--outline开关来启用。大纲
是基于<h?>标签生成的,用于深入描述如何
完成后参见目录部分。
如果<h?>标签传播到,那么大纲树有时可能非常深
在HTML文档中慷慨。--outline-depth开关可用于
限制了这个。
目录:
通过向toc对象添加toc对象,可以将目录添加到文档中
命令行。例如:
wkhtmltopdf toc http://qt-project.org/doc/qt-4.8/qstring.html qstring.pdf
基于输入文档中的H标签生成目录。
首先生成XML文档,然后使用XSLT将其转换为HTML。
生成的XML文档可以通过使用它将其转储到文件来查看
--dump-outline开关。例如:
wkhtmltopdf --dump-outline toc.xml http://qt-project.org/doc/qt-4.8/qstring.html qstring.pdf
可以使用--xsl-style-sheet开关指定XSLT文档。对于
例:
wkhtmltopdf toc --xsl-style-sheet my.xsl http://qt-project.org/doc/qt-4.8/qstring.html qstring.pdf
--dump-default-toc-xsl开关可用于转储默认的XSLT样式
表格到标准输出。这是编写自己的样式表的良好开端
wkhtmltopdf --dump-default-toc-xsl
XML文档位于命名空间“http://wkhtmltopdf.org/outline”中
称为“outline”的根节点,其中包含许多“item”节点。一个物品
可以包含任意数量的项目。这些是大纲的子部分
该项代表的部分。项目节点具有以下属性:
*“标题”该部分的名称。
*“page”该部分出现的页码。
*“链接”链接到该部分的URL。
*“backLink”该部分将链接回的锚点的名称。
剩余的TOC选项仅影响默认样式表,因此它们不会
指定自定义样式表时工作。
联系:
如果您遇到错误或想要请求新功能,请访问
<https://github.com/wkhtmltopdf/wkhtmltopdf/issues>
安装包 wkhtmltopdf
PHP html 转换成PDF wkhtmltopdf HTML 转换成 PDF (JAVA C#都适用)
https://blog.csdn.net/fenglailea/article/details/77650652
因为涉及到账单,并且要生成PDF并发送邮件,所以试用了好多转换PDF的都不成功,基本上都是格式错乱,唯一就是 wkhtmltopdf 满足 我的需求
https://wkhtmltopdf.org/downloads.html
这里下载是 linux 64
安装环境
CENTOS 7.3
下载及安装
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
tar -Jxv -f **.tar.xz
或者
xz -d **.tar.xz
tar -xv -f **.tar
移动文件目录到相关位置,例如 移动文件夹到/www/lanmps/目录下
mv wkhtmltox /www/lanmps/wkhtmltox
建立软连接,
ln -s /www/lanmps/wkhtmltox/wkhtmltoimage /usr/local/bin/wkhtmltoimage #转换成图片
ln -s /www/lanmps/wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf #转换成 PDF
PHP 中使用 shell_exec 执行
shell_exec("wkhtmltopdf http://www.lanmps.com lanmps.com.pdf")
shell 中执行
wkhtmltopdf http://www.lanmps.com lanmps.com.pdf
中文字体
服务器上必须安装字体
http://blog.csdn.net/wlwlwlwl015/article/details/51482065
新建字体目录
/usr/share/fonts/chinese
chmod -R 755 /usr/share/fonts/chinese
上传字体宋体,你自己电脑中的字体,或者网上下载的也可以,字体如下
simsun.ttc # 宋体 http://down7.pc6.com/qd3/simsun.zip 记得解压缩
simsun.ttf
接下来需要安装ttmkfdir来搜索目录中所有的字体信息,并汇总生成fonts.scale文件,输入命令:
yum -y install ttmkfdir
然后执行ttmkfdir命令即可:
ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
最后一步就是修改字体配置文件了,首先通过编辑器打开配置文件:
vim /etc/fonts/fonts.conf
可以看到一个Font list,即字体列表,在这里需要把我们添加的中文字体位置加进去:加入到类似的位置
<dir>/usr/share/fonts/chinese</dir>
然后输入:wq保存退出,最后别忘了刷新内存中的字体缓存,这样就不用reboot重启了:
字体缓存
fc-cache
查看字体
fc-list |grep SimSun
可以看到已经成功安装上了中文字体,
中文编码解决
http://aiilive.blog.51cto.com/1925756/1340243/
error while loading shared libraries: libXrender.so.1:
cannot open shared object file: No such file or directory
./bin/wkhtmltopdf: error while loading shared libraries:
libXrender.so.1: cannot open shared object file: No such file or directory
解决方法:
yum install -y libXrender