最好用Html转pdf的工具——wkhtmltopdf

article/2025/9/11 17:22:29

实习时公司需要把一些html页面中的部分内容生成pdf文件,然后我就找一些用php把html页面围成pdf文件的类。方法是可谓是找了很多很多,什么html2pdf,pdflib,FPDF这些都试过了,但是都没有达到我要的求(主要是不能解决中文乱码的问题以及样式排版的问题)。

pdflib,FPDF 这两个方法是需要编写程序去生成pdf的,就也是讲不支持直接把html页面转换成pdf;html2pdf这个虽然可以把html页面转换成pdf文 件,但是它只能转换一般简单的html代码,如果你的html内容要的是通过后台新闻编辑器排版的那肯定不行的。

纠结了半天,什么百度,谷歌搜索都用了,搜索了半天,功夫不负有心人,终于找到一个非常好用的方法了,下面就隆重介绍。

它就 是:wkhtmltopdf,wkhtmltopdf可以直接把任何一个可以在浏览器中浏览的网页直接转换成一个pdf,首先说明一下它不是一个php 类,而是一个把html页面转换成pdf的一个软件(需要安装在服务器上),但是它并不是一个简单的桌面软件,而且它直接cmd批处理的,使用php中的 shell_exec()函数就可以调用它。下面就介绍如何用php+js+html来让它生成pdf文件的方法(不过有个缺陷就是他需要在服务器端生成一个缓存文件,如果你使用thinkphp框架的话就可以将其缓存文件放在runtime 文件夹中暂存就行)。

一,下载并安装wkhtmltopdf
1、下载地址:http://wkhtmltopdf.org/downloads.html 如图:
这里写图片描述
2、上面有各种平台下安装的安装包,英文不好的直接谷歌翻译一下。下面以 windows7平台上使用举例,我的下载的是stable(稳定版)的wkhtmltopdf-0.12.3.2-installer.exe这个版本,我在win7、win8 32位和64位以及win-sever上安装测试都没有问题的,系统时几位就下载几位的安装包。下载好以后直接安装就可以了,注意安装路径要知道,下面会用到的。
这里写图片描述
3、安装好以后需要在系统环境变量变量名为”Path”的后添加:;D:\wkhtmltopdf\bin 也就是你安装的目录。安装好以后重启电脑。
下图是如何设置环境变量:

打开我的电脑右键属性

打开我的电脑右键属性

点击高级系统设置

点击高级系统设置

找到高级里面点击环境变量

找到高级里面点击环境变量

找到系统变量中的path,点击编辑,将刚刚的安装位置复制到最后,记得前面加一个分号哦!

找到系统变量中的path,点击编辑,将刚刚的安装位置复制到最后,记得前面加一个分号哦!
这里写图片描述

二,测试使用效果
直接在cmd里输入:wkhtmltopdf http://www.baidu.com/ D:website1.pdf(注意中间有空格哈)
第一个是:运行软件名称(这个是不变的) 第二个是网址 第三个是生成后的路径及文件名。回车后是不是看生一个生成进度条的提示呢,恭喜您已经成功了,到你的生成目录里看看是不是有一个刚生成的pdf文件呢。
操作方法:1、windows键+r打开搜索框,输入cmd,点击确定

这里写图片描述

2、直接在cmd里输入:wkhtmltopdf http://www.baidu.com/ D:website1.pdf(注意中间有空格哈)

这里写图片描述

3、点击回车后,会看到一个进度条,然后就提示转换成功!

这里写图片描述

4、之后在相应位置(即刚刚设置的D盘)中会发现多了一个Pdf文件,就说明成功了

这里写图片描述

三,php里调用
php里调用是很简单的,用shell_exec这个函数就可以了,如果shell_exec函数不能用看看php.ini里是否补禁用了(找到php.ini中的shell_exec函数,取消注释就可以了,一般都是可以直接用的)。简单举例:

<?php shell_exec("wkhtmltopdf http://www.shwzzz.cn/ 1.pdf") ?>

你会发现在你php文件的同级目录中会生成一个1.pdf的文件

下面代码举例介绍如何在网站开发中使用它:主要功能是截取网页的部分传递到php中处理成pdf文档
html页面代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><script src="js/jquery-2.1.4.min.js"></script><link rel="stylesheet" href="css/common.css"><link rel="stylesheet" href="css/myCenter.css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>霍兰德职业测试</title>
</head>
<body>
<!--startprint-->
<div class="right5"> <div class="right_top"  style="background-image:url(images/right-di.png);"><h3>霍兰德测试报告</h3></div><div class="print"><input type="button" value="下载报告"  id="down" class="print_btn"></div> <div class="Hollander"><h6>MBTI测试结果:ESTJ</h6><div id="chart"></div><p>约翰·霍兰德(John Holland)是美国约翰·霍普金斯大学心理学教授,美国著名的职业指导专家。霍兰德以职业兴趣理论为基础,先后编制了职业偏好量表(VocatIonaI Preference lnventory)和自我导向搜寻表(Self-directed Search)两种职业兴趣量表,霍兰德力求为每种职业兴趣找出两种相匹配的职业能力。兴趣测试和能力测试的结合在职业指导和职业咨询的实际操作中起到了促进作用。</p></div>   <table class="tbl1"><tbody><tr node-type="toolBar"><td class="tbl11">领导模式:</td><td class="tbl12"><p>①直接领导,快速管理 ②运用过去经验解决问题 ③直接、明确地识别问题的核心 ④决策和执行决策非常迅速 ⑤传统型领导,尊重组织内部的等级和组织获得的成就</p></td></td></tr><tr node-type="toolBar"><td class="tbl11">领导模式:</td><td class="tbl12"><p>①直接领导,快速管理 ②运用过去经验解决问题 ③直接、明确地识别问题的核心 ④决策和执行决策非常迅速 ⑤传统型领导,尊重组织内部的等级和组织获得的成就</p></td></td></tr><tr node-type="toolBar"><td class="tbl11">领导模式:</td><td class="tbl12"><p>①直接领导,快速管理 ②运用过去经验解决问题 ③直接、明确地识别问题的核心 ④决策和执行决策非常迅速 ⑤传统型领导,尊重组织内部的等级和组织获得的成就</p></td></td></tr><tr node-type="toolBar"><td class="tbl11">领导模式:</td><td class="tbl12"><p>①直接领导,快速管理 ②运用过去经验解决问题 ③直接、明确地识别问题的核心 ④决策和执行决策非常迅速 ⑤传统型领导,尊重组织内部的等级和组织获得的成就</p></td></td></tr><tr node-type="toolBar"><td class="tbl11">适合报考专业:</td><td class="tbl12"><a><span>专业定位卡介绍>></span></a></td></td></tr></tbody></table>    
</div>
<!--endprint--><form action="pdf.php" method="post" name="hld_res" id="hideform"><input type="hidden" id="hide_content" name="html"/></form>  
</body><script>$(function () {//获取需要传递的Html代码 通过<!--startprint--><!--endprint-->截取bdhtml=window.document.body.innerHTML; sprnstr="<!--startprint-->"; eprnstr="<!--endprint-->"; prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17); prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr)); //将获取的html代码添加到隐藏域中传给php文件处理$("#hide_content").val(""+prnhtml+"");} );   $("#down").click(function(){$("#hideform").submit();}); </script>
</html>

php页面:

<?php//转成pdf$html=$_POST['html'];//Turn on output bufferingob_start();$html='<link rel="stylesheet" href="css/common.css"><link rel="stylesheet" href="css/myCenter.css"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'.$html;//这儿可以引入生成的Html的样式表  路径可以是绝对路径也可以是相对路径,也可以把样式表文件复制到临时html文件的目录下 即这儿的demo文件目录下(默认) 也可以直接把样式写在html页面中直接传递过来//$html = ob_get_contents();//$html=$html1.$html;$filename = "hld";//save the html page in tmp folder  保存的html临时文件位置 可以是相对路径也是可以是绝对路径 下面用相对路径file_put_contents("{$filename}.html", $html);//Clean the output buffer and turn off output bufferingob_end_clean();//convert HTML to PDFshell_exec("wkhtmltopdf -q {$filename}.html {$filename}.pdf");if(file_exists("{$filename}.pdf")){header("Content-type:application/pdf");header("Content-Disposition:attachment;filename={$filename}.pdf");echo file_get_contents("{$filename}.pdf");//echo "{$filename}.pdf";}else{exit;}?>

点击页面中的下载按钮,

这里写图片描述

是不是弹出一个下载提示,打开下载的pdf,是不是和网页上的样式一模一样呢,

这里写图片描述
这里写图片描述

再打开Php文件中的文件保存位置,看看是不是多了两个临时文件呢?
这两个临时文件在哪儿,你的css就得在哪儿,或者你直接使用相对路径,引用其他文件中的css样式也可以的,最简单的就是把css样式直接写在要转成pdf的html页面中。
这里写图片描述

如果存在样式没有,那就是你的样式路径没有写对,在检查一下就可以了!

四,解决分页问题
wkhtmltopdf 很好用,但也有些不尽人意。就是当一个html页面很长我需要在指定的地方分页那怎么办呢? wkhtmltopdf 开发者在开发的时候并不是没有考虑到这一点,
wkhtmltopdf 有个很好的方法,就是在那个div的样式后添加一个:page-break-inside:avoid;就ok了。
例如

div{ width:800px; min-height:1362px;margin:auto;page-break-inside:avoid;}

以上就是个人总结的转pdf的方法,很多地方还可以扩展,小伙伴们开动脑筋动起来吧,不过目前一直没有解决就是没法用中文名称命名文件,如果有能解决的伙伴,麻烦在下面留言告知,谢谢么么哒了!


http://chatgpt.dhexx.cn/article/YZwhltUU.shtml

相关文章

PDF技术(四)-Java实现Html转PDF文件

html转换为pdf的关键技术是如何处理网页中复杂的css样式、以及中文乱码处理。 各实现对比表 于Windows平台进行测试&#xff1a; 基于IText 基于FlyingSaucer 基于WKHtmlToPdf 基于pd4ml 跨平台性 跨平台 跨平台 跨平台 跨平台 是否安装软件 否 否 需安装WKHtmlT…

Java实现HTML转PDF

Java实现HTML转PDF 效果图一、添加maven依赖二、代码示例三、踩坑&#xff1a;1.simsun.ttc 文件找不到问题2.中文显示问题&#xff1a;3. 问题&#xff08;当然不知这种问题 还有 >等一些特殊转义符号这里只罗列一种&#xff09; 效果图 上图是 html 效果图 生成PDF效果…

【html转pdf】html页面导出为pdf文件,纯html版本,简单实现pdf转换【html2canvas+jspdf】

前言 最近遇到的需求&#xff0c;把html转成pdf文件下载导出。 目前网上看了下&#xff0c;有三种方法&#xff0c;但是其中两种需要后端配合 一种是纯前端实现的&#xff0c;比较简单。所以就使用了这种。 也就是html2canvas jspdf 的这种方法 这种方法实现的思路就是&#…

HTML页面导出为PDF(JSPDF、ITEXT、WKHTMLTOPDF)

html页面导出pdf&#xff0c;本来是一件很简单的事情&#xff0c;在浏览器直接打印(Mac快捷键为⌘p&#xff1b;Windows快捷键为ctrlp)&#xff0c;就可以把页面另存为pdf文件&#xff0c;但对于要经常把页面导出为pdf的用户来说并不友好&#xff0c;一个合格程序员的标准就是&…

html转pdf(总结五种方法Java)

html转pdf&#xff08;总结五种方法Java&#xff09; Java 实现html转pdf&#xff0c;总结五种方法。 推荐使用wkhtmltopdf,Itext 方法一&#xff1a;使用wkhtmltopdf 1、下载插件wkhtmltopdf https://wkhtmltopdf.org/downloads.html 2、本机测试 本目录下cmd进入 输入命…

Java 动态规划

Java中的动态规划 介绍 动态规划典型的被用于优化递归算法&#xff0c;因为它们倾向于以指数的方式进行扩展。动态规划主要思想是将复杂问题&#xff08;带有许多递归调用&#xff09;分解为更小的子问题&#xff0c;然后将它们保存到内存中&#xff0c;这样我们就不必在每次…

PDF如何转换成jpg图片

PDF文件转换成jpg&#xff0c;有些人一看到问题可能有点懵逼&#xff0c;其实就是PDF转换成图片了&#xff0c;只要转换器中的PDF转图片功能中图片格式支持jpg格式&#xff0c;就可以直接转换成jpg图片了&#xff0c;比如奥凯丰 PDF转换大师&#xff0c;支持PDF转jpg、PDF转png…

数据结构和算法Java实现(韩顺平)

目录 稀疏数组 队列 数组模拟队列思路 数组模拟环形队列 链表 单链表的翻转 单链表的逆序输出&#xff08;栈&#xff09; 双向链表 Jasephu 问题 栈 数组模拟 栈实现计算器 中缀表达式 计算器 逆波兰表达式 &#xff08;后缀表达式&#xff09; 中缀转后缀实现计算…

pdf文件转图片(java实现)

项目中pdf文件太大&#xff0c;在手机端打开缓慢。需要将pdf文件转换成图片。加载比较快&#xff0c;增加用户体验。话不多说&#xff0c;直接上干货。 一、在pom引入依赖的jar <!-- https://mvnrepository.com/artifact/org.apache.pdfbox/fontbox --><dependency&g…

袋鼠云与中航金网达成战略合作并成立信创大数据联合实验室

当前&#xff0c;加快推进“新基建”已成为新形势下国家稳定经济发展的重要方针&#xff0c;而作为“新基建底座”的信创产业&#xff0c;有望成为未来中国十年科技发展的核心领域。纵观信创产业近五年发展&#xff0c;产品和技术已从“基本可用”向“好用易用”大跨步迈进&…

基于java实现PDF转图片图片合成PDF

平常在工作中&#xff0c;经常需要用到pdf转换成图片或者图片转换成pdf的功能。能将pdf转换成图片的工具比较多&#xff0c;比如wps就支持转换为图片&#xff0c;不过高清的转换需要开通会员才行&#xff0c;比较麻烦。免费的转换不光清晰度有问题&#xff0c;还存在水印等&…

《Java语言程序设计(第三版 沈泽刚)》编程练习2

编程练习 2 2.1 编写程序&#xff0c;从键盘上输入一个double类型的华氏温度&#xff0c;然后将其转换为摄氏温度输出。转换公式为&#xff1a; 摄氏度 &#xff08; 5 / 9 &#xff09;&#xff08;华氏度 − 32 &#xff09; 摄氏度&#xff08;5/9&#xff09;&#xff08…

PDF怎么转换成jpg图片保存?简单几步就能解决。

在我们的日常工作和生活中&#xff0c;我们经常会和别人在线传输各种文件。但是在传输Word文档、Excel表格、PPT等格式的文件时&#xff0c;文件内容排版和布局容易出现变化。因此&#xff0c;人们在传输文件时一般都将文件转换为PDF&#xff0c;但PDF文件在手机上观看并不方便…

pdf如何转换成jpg图片?

pdf如何转换成jpg图片&#xff1f;PDF&#xff08;Portable Document Format&#xff09;是一种常见的文件格式&#xff0c;由Adobe Systems创建。与其他文档格式相比&#xff0c;它具有固定页面布局和跨平台兼容性等优点&#xff0c;因此广泛应用于电子书、论文、技术手册、合…

PDF怎么转换成jpg图片

PDF怎么转换成jpg图片&#xff1f;在日常工作中&#xff0c;PDF文件是一种非常常用的格式类型。文件存储安全性高&#xff0c;可以保护用户文件的内容&#xff0c;文件的转换也很方便。支持多种文件类型&#xff0c;可自由切换。有的朋友还是比较习惯查阅图片格式的内容&#x…

动态规划(Java)

文章目录 前言一、背包问题二、字符串转化问题三、纸牌问题四、最少贴纸数总结 前言 动态规划的目的就是避免重复计算&#xff0c;在暴力递归的过程中若在计算过程中产生了重复计算那么就可以进行动态规划的优化。以空间换时间&#xff0c;可以根据暴力递归的过程写出动态规划…

袋鼠云与中航金网达成战略合作,成立信创大数据联合实验室

当前&#xff0c;加快推进“新基建”已成为新形势下国家稳定经济发展的重要方针&#xff0c;而作为“新基建底座”的信创产业&#xff0c;有望成为未来中国十年科技发展的核心领域。纵观信创产业近五年发展&#xff0c;产品和技术已从“基本可用”向“好用易用”大跨步迈进&…

北京市委书记蔡奇调研 PingCAP 立足自主研发和开源战略,助推产业数字化转型

2021 年 3 月&#xff0c;开源正式被列入国家十四五规划发展纲要&#xff0c;可以预期&#xff0c;开源将成为中国未来发展基础软硬件技术的关键路径。**3 月 23 日上午&#xff0c;北京市委书记蔡奇一行参观考察 PingCAP&#xff08;平凯星辰&#xff09;&#xff0c;专题调研…

如何把pdf转成图片?

怎么把pdf转成图片&#xff1f;作为上班族&#xff0c;能熟练的使用各种办公软件是职场必备技能&#xff0c;特别是在处理各种类型的文件时候&#xff0c;如果能熟练的将文件格式进行相互转换&#xff0c;那不仅能提升自己的工作效率&#xff0c;也会方便跟自己对接工作的人。就…

袋鼠云与沃趣科技达成战略合作,共同驱动企业数字化升级

12月3日,袋鼠云与沃趣科技正式达成战略合作,并于袋鼠云总部举行签约仪式。沃趣科技创始人&CEO 陈栋、联合创始人&CTO 李建辉、合伙人&总裁 郭华、技术中心负责人 魏兴华,袋鼠云创始人&董事长 陈吉平、联合创始人&CEO 徐进挺、联合创始人&易知微CEO 宁海…