资源

https://github.com/subtlephp/phpwkhtmltox/blob/master/src/WkHtmlTo/PDF/ConfigResolver.php
https://wkhtmltopdf.org/usage/wkhtmltopdf.txt

  1. 名称:
  2. wkhtmltopdf 0.12.5(补丁qt
  3. 概要:
  4. wkhtmltopdf [GLOBAL OPTION] ... [OBJECT] ... <输出文件>
  5. 文件对象:
  6. wkhtmltopdf能够将多个对象放入输出文件中,对象是
  7. 单个网页,封面网页或目录。对象
  8. 按照在指定的顺序放入输出文档
  9. 命令行,可以基于每个对象或全局指定选项
  10. 选择区。“全局选项”部分中的选项只能放入
  11. 全球选择领域
  12. 页面对象将单个网页的内容放入输出文档中。
  13. (页)?<输入网址/文件名> [页面选项] ...
  14. 页面对象的选项可以放在全局选项和页面中
  15. 选择领域。适用的选项可在页面选项和页面中找到
  16. 页眉和页脚选项部分。
  17. 封面对象将单个网页的内容放入输出文档中,
  18. 页面没有出现在目录中,也没有标题
  19. 和页脚。
  20. 封面<输入网址/文件名> [页面选项] ...
  21. 还可以为页面对象指定所有可以选择的选项
  22. 封面。
  23. 目录对象将内容表插入到输出中
  24. 文献。
  25. toc [TOC选项] ......
  26. 还可以为页面对象指定所有可以选择的选项
  27. 另外,TOC选项部分的选项也可以更多
  28. 应用。目录是通过XSLT生成的,这意味着它可以
  29. 被设计为看起来你想要它看起来。想知道该怎么做
  30. 这可以通过提供来转储默认的xslt文档
  31. --dump-default-toc-xsl,以及它提供的工作大纲
  32. --dump-outline,请参阅“大纲选项”部分。
  33. 描述:
  34. 使用wkhtmltopdf patched将一个或多个HTML页面转换为PDF文档
  35. QT
  36. 全球选择:
  37. - 打印多份时,逐份打印
  38. (默认)
  39. --no-collate打印多个时不进行整理
  40. 副本
  41. --cookie-jar <path>读取和写入cookie
  42. 提供的cookie jar文件
  43. --copies <number>要打印到pdf中的份数
  44. 文件(默认1
  45. -d - dpi <dpi>显式更改dpi(这没有
  46. 对基于X11的系统的影响)(默认为96
  47. -H - extended-help显示更广泛的帮助,详细说明
  48. 不太常见的命令开关
  49. -g - grayscale PDF将以灰度生成
  50. -h - help显示帮助
  51. --htmldoc输出程序html帮助
  52. --image-dpi <integer>当嵌入图像时将它们缩小到
  53. 这个dpi(默认为600
  54. --image-quality <integer>jpeg压缩图像时使用它
  55. 质量(默认94
  56. --license输出许可证信息并退出
  57. --log-level <level>将日志级别设置为:noneerrorwarn
  58. 信息(默认信息)
  59. -l - lowquality生成较低质量的pdf / ps。有用的
  60. 缩小结果文档空间
  61. --manpage输出程序手册页
  62. -B - margin-bottom <unitreal>设置页面底部边距
  63. -L - margin-left <unitreal>设置页面左边距(默认为10mm
  64. -R - margin-right <unitreal>设置页面右边距(默认为10mm
  65. -T - margin-top <unitreal>设置页面上边距
  66. -O - 方向<orientation>将方向设置为横向或纵向
  67. (默认人像)
  68. --page-height <unitreal>页面高度
  69. -s - page-size <尺寸>将纸张尺寸设置为:A4Letter
  70. (默认A4
  71. --page-width <unitreal>页面宽度
  72. --no-pdf-compression不要在pdf上使用无损压缩
  73. 对象
  74. -q - quiet更加冗长,为倒退而维护
  75. 兼容性; 与使用--log-level相同
  76. 没有
  77. --read-args-from-stdinstdin读取命令行参数
  78. --readme输出程序自述文件
  79. --title <text>生成的pdf文件的标题(The
  80. 如果没有,则使用第一个文档的标题
  81. 指定)
  82. --use-xserver使用X服务器(一些插件和其他插件)
  83. 没有X11可能无法正常工作
  84. -V - version输出版本信息并退出
  85. 大纲选项:
  86. --dump-default-toc-xsl将默认的TOC xsl样式表转储到
  87. 标准输出
  88. --dump-outline <file>将大纲转储到文件中
  89. --outline将大纲放入pdf(默认)
  90. --no-outline不要在pdf中加入大纲
  91. --outline-depth <level>设置轮廓的深度(默认为4
  92. 页面选项:
  93. --allow <path>允许指定的文件
  94. 要加载的文件夹(可重复)
  95. --background打印背景(默认)
  96. --no-background不打印背景
  97. --bypass-proxy-for <value>绕过主机代理(可重复)
  98. --cache-dir <path> Web缓存目录
  99. --checkbox-checked-svg <path>选中渲染时使用此SVG文件
  100. 复选框
  101. --checkbox-svg <path>在未选中呈现时使用此SVG文件
  102. 复选框
  103. --cookie <name> <value>设置一个额外的cookie(可重复),
  104. 值应该是url编码的。
  105. --custom-header <name> <value>设置一个额外的HTTP头(可重复)
  106. --custom-header-propagation添加指定的HTTP
  107. - 每个资源请求的自定义标头。
  108. --no-custom-header-propagation不添加指定的HTTP
  109. - 每个资源请求的自定义标头。
  110. --debug -javascript显示javascript调试输出
  111. --no-debug-javascript不显示javascript调试输出
  112. (默认)
  113. --default-header添加一个默认标题,其名称为
  114. 页面左侧,页码到
  115. 右边,这是:
  116. --header左= '[网页]'
  117. --header-right ='[page] / [toPage]' - top 2cm
  118. --header线
  119. --encoding <encoding>设置输入的默认文本编码
  120. --disable-external-links不要链接到远程网页
  121. --enable-external-links建立到远程网页的链接(默认)
  122. --disable-forms不要将HTML表单字段转换为pdf格式
  123. 字段(默认)
  124. --enable-formsHTML表单字段转换为pdf表单字段
  125. --images加载或打印图像(默认)
  126. --no-images不加载或打印图像
  127. --disable-internal-links不要建立本地链接
  128. --enable-internal-links制作本地链接(默认)
  129. -n - disable-javascript不允许网页运行javascript
  130. --enable-javascript允许网页运行javascript
  131. (默认)
  132. --javascript-delay <msec>等待几毫秒的javascript
  133. 完成(默认200
  134. --keep-relative-links将相对外部链接保持为相对
  135. 外部链接
  136. --load-error-handling <handler>指定如何处理失败的页面
  137. loadabortignoreskip(默认值
  138. 中止)
  139. --load-media-error-handling <handler>指定如何处理媒体文件
  140. 无法加载:中止,忽略或跳过
  141. (默认忽略)
  142. --disable-local-file-access不允许转换本地文件
  143. 读取其他本地文件,除非
  144. 明确允许使用--allow
  145. --enable-local-file-access允许将本地文件转换为read
  146. 在其他本地文件中。(默认)
  147. --minimum-font-size <int>最小字体大小
  148. --exclude-from-outline不要在表格中包含该页面
  149. 内容和大纲
  150. --include-in-outline在目录中包含该页面
  151. 和轮廓(默认)
  152. --page-offset <offset>设置起始页码(默认为0
  153. --password <密码> HTTP验证密码
  154. --disable-plugins禁用已安装的插件(默认)
  155. --enable-plugins启用已安装的插件(插件将
  156. 可能不起作用)
  157. --post <name> <value>添加额外的帖子字段(可重复)
  158. --post-file <name> <path>发布一个附加文件(可重复)
  159. --print-media-type使用print media-type而不是screen
  160. --no-print-media-type不要使用打印介质类型而不是
  161. 屏幕(默认)
  162. -p - proxy <proxy>使用代理
  163. --proxy-hostname-lookup使用代理解析主机名
  164. --radiobutton-checked-svg <path>选中渲染时使用此SVG文件
  165. 单选按钮
  166. --radiobutton-svg <path>在未选中渲染时使用此SVG文件
  167. 单选按钮
  168. --resolve-relative-links将相对外部链接解析为
  169. 绝对链接(默认)
  170. --run-script <js>运行此附加的javascript
  171. 页面加载完成(可重复)
  172. --disable-smart-shrinking禁用智能收缩策略
  173. WebKit用来制作像素/ dpi
  174. 比率无常数
  175. --enable-smart-shrinking启用智能收缩策略
  176. WebKit用来制作像素/ dpi
  177. 比率无常数(默认)
  178. --ssl-crt-path <path> ssl客户端证书公钥的路径
  179. OpenSSL PEM格式,可选择后跟
  180. 中级ca和可信证书
  181. --ssl-key-password <密码> ssl客户端证书私钥的密码
  182. --ssl-key-path <path> ssl客户端证书私钥的路径
  183. OpenSSL PEM格式
  184. --stop-slow-scripts停止慢速运行javascripts(默认)
  185. --no-stop-slow-scripts不要停止慢速运行javascripts
  186. --disable-toc-back-links不要从节头到toc链接
  187. (默认)
  188. --enable-toc-back-links从节头到toc的链接
  189. --user-style-sheet <url>指定要加载的用户样式表
  190. 每一页
  191. --username <username> HTTP身份验证用户名
  192. --viewport-size <>如果您有自定义,则设置视口大小
  193. 滚动条或css属性溢出到
  194. 模拟窗口大小
  195. --window-status <windowStatus>等到window.status等于this
  196. 渲染页面前的字符串
  197. --zoom <float>使用此缩放系数(默认值为1
  198. 页眉和页脚选项:
  199. --footer-center <text>居中的页脚文字
  200. --footer-font-name <name>设置页脚字体名称(默认Arial
  201. --footer-font-size <size>设置页脚字体大小(默认为12
  202. --footer -html <url>添加一个html页脚
  203. --footer-left <text>左对齐的页脚文本
  204. - footer-line页脚上方的显示行
  205. --no-footer-line不要在页脚上方显示行
  206. (默认)
  207. --footer-right <text>右对齐的页脚文本
  208. --footer-spacing <real>页脚和内容之间的间距,单位为mm
  209. (默认为0
  210. --header-center <text>居中的标题文本
  211. --header-font-name <name>设置标题字体名称(默认Arial
  212. --header-font-size <size>设置标题字体大小(默认为12
  213. --header-html <url>添加一个html标题
  214. --header-left <text>左对齐标题文本
  215. --header-line标题下方的显示行
  216. --no-header-line不在标题下方显示行
  217. (默认)
  218. --header-right <text>右对齐标题文本
  219. --header-spacing <real>标题和内容之间的间距,单位为mm
  220. (默认为0
  221. --replace <name> <value>将[name]替换为header和中的值
  222. 页脚(可重复)
  223. TOC选项:
  224. --disable-dotted-lines不要在toc中使用虚线
  225. --toc-header-text <text> toc的标题文本(默认表
  226. 内容)
  227. --toc-level-indentation <width>对于toc中的每个标题级别
  228. 按此长度缩进(默认为1em
  229. --disable-toc-links不要从toc链接到部分
  230. --toc-text-size-shrink <real>对于toc中每个级别的标题
  231. 字体按此因子缩放(默认值
  232. 0.8
  233. --xsl-style-sheet <file>使用提供的xsl样式表
  234. 打印目录
  235. 页面大小:
  236. 渲染文档的默认页面大小为A4,但使用此方法
  237. --page-size选项可以改为几乎任何其他选项,例如:A3
  238. 信和法律。有关支持的页面大小的完整列表,请参阅
  239. <http://qt-project.org/doc/qt-4.8/qprinter.html#PaperSize-enum>。
  240. 对于页面大小更精细的控制--page-height
  241. - 可以使用 - 页面宽度选项
  242. stdin读取参数:
  243. 如果您需要批量转换大量页面,并且您感觉如此
  244. wkhtmltopdf启动有点太慢,那你应该试试
  245. --read-ARGS - 标准输入,
  246. 当--read-args-from-stdin将每行输入发送到stdin上的wkhtmltopdf
  247. 将作为wkhtmltopdf的单独调用,并指定参数
  248. 在给定的行上结合给wkhtmltopdf的参数
  249. 例如,可以执行以下操作:
  250. echohttp://qt-project.org/doc/qt-4.8/qapplication.html qapplication.pdf”>> cmds
  251. echocover google.com http://en.wikipedia.org/wiki/Qt_(software)qt.pdf”>> cmds
  252. wkhtmltopdf --read-args-from-stdin --book <cmds
  253. 指定代理:
  254. 默认情况下,将从环境变量中读取代理信息:
  255. proxyall_proxyhttp_proxy,代理选项也可以通过指定
  256. -p开关
  257. <type>:=“http//”| “SOCKS5://”
  258. <serif>:= <username>(“:”<password>)?“@”
  259. <proxy>:=“无”| <类型>?<字符串>?<host>(“:”<port>)?
  260. 以下是一些示例(如果您不熟悉BNF):
  261. HTTP//用户名:密码@ myproxyserver:8080
  262. SOCKS5// myproxyserver
  263. 没有
  264. 页脚和标题:
  265. 页眉和页脚可以通过--header- *和添加到文档中
  266. - 恭敬地参与*争论。在提供的页眉和页脚文本字符串中
  267. 例如--header-left,将替换以下变量。
  268. * [页面]替换为当前正在打印的页数
  269. * [frompage]替换为要打印的第一页的编号
  270. * [topage]替换为要打印的最后一页的编号
  271. * [网页]替换为正在打印的页面的URL
  272. * [section]替换为当前部分的名称
  273. * [subsection]替换为当前小节的名称
  274. * [date]以系统本地格式替换为当前日期
  275. * [isodate]替换为ISO 8601扩展格式的当前日期
  276. * [time]以系统本地格式替换当前时间
  277. * [title]替换为当前页面对象的标题
  278. * [doctitle]替换为输出文档的标题
  279. * [sitepage]替换为当前正在转换的网站中的页面编号
  280. * [sitepages]替换为当前正在转换的网站中的页数
  281. 作为一个例子,将指定--header-right“[toPage]”的Page [page]
  282. 在文本“Page x of y”中,其中x是当前页面的编号,y
  283. 最后一页的编号,显示在左上角
  284. 文献。
  285. 页眉和页脚也可以提供HTML文档。举个例子
  286. 可以指定--header-html header.html,并使用以下内容
  287. header.html中:
  288. <!DOCTYPE html>
  289. <HTML> <HEAD> <SCRIPT>
  290. function subst(){
  291. var vars = {};
  292. var query_strings_from_url = document.location.search.substring1).split'&');
  293. forquery_strings_from_url中的var query_string){
  294. ifquery_strings_from_url.hasOwnPropertyquery_string)){
  295. var temp_var = query_strings_from_url [query_string] .split'='2);
  296. vars [temp_var [0]] = decodeURItemp_var [1]);
  297. }
  298. }
  299. var css_selector_classes = ['page''frompage''topage''pagepage''section''subsection''date''isodate''time''title''doctitle''sitepage ''sitepages'];
  300. for((css_selector_classes中的var css_class){
  301. ifcss_selector_classes.hasOwnPropertycss_class)){
  302. var element = document.getElementsByClassNamecss_selector_classes [css_class]);
  303. forvar j = 0; j <element.length; ++ j){
  304. element [j] .textContent = vars [css_selector_classes [css_class]];
  305. }
  306. }
  307. }
  308. }
  309. </ script> </ head> <body style =“border0; margin0;” onload = SUBST()”>
  310. <table style =“border-bottom1px solid black; width100%”>
  311. <TR>
  312. <td class =“section”> </ td>
  313. <td style =“text-alignright”>
  314. <span class =“topage”> </ span>的页面<span class =“page”> </ span>
  315. </ TD>
  316. </ TR>
  317. </ TABLE>
  318. </ BODY> </ HTML>
  319. 从示例中可以看出,参数被发送到页眉/页脚
  320. 获得时尚的html文档。
  321. 大纲:
  322. 带有补丁qtWkhtmltopdf支持PDF轮廓,也称为书
  323. 标记,可以通过指定--outline开关来启用。大纲
  324. 是基于<h?>标签生成的,用于深入描述如何
  325. 完成后参见目录部分。
  326. 如果<h?>标签传播到,那么大纲树有时可能非常深
  327. HTML文档中慷慨。--outline-depth开关可用于
  328. 限制了这个。
  329. 目录:
  330. 通过向toc对象添加toc对象,可以将目录添加到文档中
  331. 命令行。例如:
  332. wkhtmltopdf toc http://qt-project.org/doc/qt-4.8/qstring.html qstring.pdf
  333. 基于输入文档中的H标签生成目录。
  334. 首先生成XML文档,然后使用XSLT将其转换为HTML
  335. 生成的XML文档可以通过使用它将其转储到文件来查看
  336. --dump-outline开关。例如:
  337. wkhtmltopdf --dump-outline toc.xml http://qt-project.org/doc/qt-4.8/qstring.html qstring.pdf
  338. 可以使用--xsl-style-sheet开关指定XSLT文档。对于
  339. 例:
  340. wkhtmltopdf toc --xsl-style-sheet my.xsl http://qt-project.org/doc/qt-4.8/qstring.html qstring.pdf
  341. --dump-default-toc-xsl开关可用于转储默认的XSLT样式
  342. 表格到标准输出。这是编写自己的样式表的良好开端
  343. wkhtmltopdf --dump-default-toc-xsl
  344. XML文档位于命名空间“http://wkhtmltopdf.org/outline”中
  345. 称为“outline”的根节点,其中包含许多“item”节点。一个物品
  346. 可以包含任意数量的项目。这些是大纲的子部分
  347. 该项代表的部分。项目节点具有以下属性:
  348. *“标题”该部分的名称。
  349. *“page”该部分出现的页码。
  350. *“链接”链接到该部分的URL
  351. *“backLink”该部分将链接回的锚点的名称。
  352. 剩余的TOC选项仅影响默认样式表,因此它们不会
  353. 指定自定义样式表时工作。
  354. 联系:
  355. 如果您遇到错误或想要请求新功能,请访问
  356. <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

  1. 这里下载是 linux 64
  2. 安装环境
  3. CENTOS 7.3
  4. 下载及安装
  5. wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
  6. tar -Jxv -f **.tar.xz
  7. 或者
  8. xz -d **.tar.xz
  9. tar -xv -f **.tar
  10. 移动文件目录到相关位置,例如 移动文件夹到/www/lanmps/目录下
  11. mv wkhtmltox /www/lanmps/wkhtmltox
  12. 建立软连接,
  13. ln -s /www/lanmps/wkhtmltox/wkhtmltoimage /usr/local/bin/wkhtmltoimage #转换成图片
  14. ln -s /www/lanmps/wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf #转换成 PDF
  15. PHP 中使用 shell_exec 执行
  16. shell_exec("wkhtmltopdf http://www.lanmps.com lanmps.com.pdf")
  17. shell 中执行
  18. wkhtmltopdf http://www.lanmps.com lanmps.com.pdf
  19. 中文字体
  20. 服务器上必须安装字体
  21. http://blog.csdn.net/wlwlwlwl015/article/details/51482065
  22. 新建字体目录
  23. /usr/share/fonts/chinese
  24. chmod -R 755 /usr/share/fonts/chinese
  25. 上传字体宋体,你自己电脑中的字体,或者网上下载的也可以,字体如下
  26. simsun.ttc # 宋体 http://down7.pc6.com/qd3/simsun.zip 记得解压缩
  27. simsun.ttf
  28. 接下来需要安装ttmkfdir来搜索目录中所有的字体信息,并汇总生成fonts.scale文件,输入命令:
  29. yum -y install ttmkfdir
  30. 然后执行ttmkfdir命令即可:
  31. ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir
  32. 最后一步就是修改字体配置文件了,首先通过编辑器打开配置文件:
  33. vim /etc/fonts/fonts.conf
  34. 可以看到一个Font list,即字体列表,在这里需要把我们添加的中文字体位置加进去:加入到类似的位置
  35. <dir>/usr/share/fonts/chinese</dir>
  36. 然后输入:wq保存退出,最后别忘了刷新内存中的字体缓存,这样就不用reboot重启了:
  37. 字体缓存
  38. fc-cache
  39. 查看字体
  40. fc-list |grep SimSun
  41. 可以看到已经成功安装上了中文字体,
  42. 中文编码解决
  43. http://aiilive.blog.51cto.com/1925756/1340243/
  44. error while loading shared libraries: libXrender.so.1:
  45. cannot open shared object file: No such file or directory
  46. ./bin/wkhtmltopdf: error while loading shared libraries:
  47. libXrender.so.1: cannot open shared object file: No such file or directory
  48. 解决方法:
  49. yum install -y libXrender