通过wkhtmltopdf导出支持CSS样式的pdf文件

在公司项目中发现有下载pdf文件的功能,但是不能识别CSS样式,导致下载的pdf文件格式显得很别扭,虽然能看但是难看。然后就是百度啊,google啊,最后找到一款能够识别CSS样式的软件—wkhtmltopdf。wkhtmltopdf可以直接把任何一个可以在浏览器中浏览的网页直接转换成一个pdf,首先说明一下它不是一个php 类,而是一个把html页面转换成pdf的一个软件(需要安装在服务器上),但是它并不是一个简单的桌面软件,而且它直接cmd批处理的,使用php中的 shell_exec()函数就可以调用它。

一,下载并安装wkhtmltopdf

1、下载地址:http://wkhtmltopdf.org/downloads.html 如图:
这里写图片描述

2、上面有各种平台下安装的安装包,英文不好的直接谷歌翻译一下。下面以 windows7平台上使用举例,我的下载的是stable(稳定版)的wkhtmltox-0.12.4_msvc2015-win64.exe这个版本。系统时几位就下载几位的安装包。下载好以后直接安装就可以了,注意安装路径要知道路径中不能含有中文和空格,所以不要安装在Program Files目录下,安装路径在下面会用到的。
这里写图片描述

3、安装好以后需要在系统环境变量变量名为”Path”的后添加:;D:\wkhtmltopdf\bin 也就是你安装的目录。安装好以后重启电脑。 这样就可以直接不带安装路径使用了。
这里写图片描述

二、PHP中测试使用效果

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

<?php shell_exec("wkhtmltopdf http://www.baidu.com/ 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.js"></script><link rel="stylesheet" href="css/common.css" rel="external nofollow" rel="external nofollow" ><link rel="stylesheet" href="css/myCenter.css" rel="external nofollow" rel="external nofollow" ><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>PHP编程</title>
</head>
<body>
<!--startprint-->
<div class="right5" style="margin: 0px 200px;"> <div class="right_top" style="background-image:url(images/right-di.png);"><h2 style="text-align:center">PHP编程</h2></div><div class="print"><input type="button" value="下载" id="down" align="right" style="background-color:orange;color:white;text-align:right"></div> <div class="Hollander"><div style="font-size:20px;">PHP(PHP: Hypertext Preprocessor的缩写,中文名:“超文本预处理器”)</div><div id="chart"></div><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PHP(PHP: Hypertext Preprocessor的缩写,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域。PHP的文件后缀名为php。</p></div>  <table class="tbl1" style="border:2px solid black;"><tr node-type="toolBar"><td class="tbl11" style="border:2px solid blue;">php基础:</td><td class="tbl12" style="border:2px solid green;"><p>①PHP语言简介 ②PHP程序安装 ③PHP语法了解 ④PHP变量使用 ⑤PHP数据类型分析 ⑥PHP常量使用 ⑦PHP字符串使用 ⑧PHP运算符使用 ⑨PHP数组使用 ⑩PHP数组排序 </p></td></td></tr><tr node-type="toolBar"><td class="tbl11" style="border:2px solid blue;">php进阶:</td><td class="tbl12" style="border:2px solid green;"><p>①PHP语言简介 ②PHP程序安装 ③PHP语法了解 ④PHP变量使用 ⑤PHP数据类型分析 ⑥PHP常量使用 ⑦PHP字符串使用 ⑧PHP运算符使用 ⑨PHP数组使用 ⑩PHP数组排序 </p></td></td></tr><tr node-type="toolBar"><td class="tbl11" style="border:2px solid blue;">php源码:</td><td class="tbl12" style="border:2px solid green;"><p>①PHP语言简介 ②PHP程序安装 ③PHP语法了解 ④PHP变量使用 ⑤PHP数据类型分析 ⑥PHP常量使用 ⑦PHP字符串使用 ⑧PHP运算符使用 ⑨PHP数组使用 ⑩PHP数组排序 </p></td></td></tr><tr node-type="toolBar"><td class="tbl11" style="border:2px solid blue;">php插件:</td><td class="tbl12" style="border:2px solid green;"><p>①PHP语言简介 ②PHP程序安装 ③PHP语法了解 ④PHP变量使用 ⑤PHP数据类型分析 ⑥PHP常量使用 ⑦PHP字符串使用 ⑧PHP运算符使用 ⑨PHP数组使用 ⑩PHP数组排序 </p></td></td></tr><tr node-type="toolBar"><td class="tbl11" style="border:2px solid blue;">选择php项:</td><td class="tbl12" style="color:red;border:2px solid green;"><a><span>项目介绍>></span></a></td></td></tr></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(){// alert('12345');$("#hideform").submit();}); </script>
</html>

php脚本代码:

<?php// header("content-type:text/html;charset=utf-8");//转成pdf$html=$_POST['html'];//Turn on output buffering// var_dump($html);die;ob_start();/*这儿引入生成的Html的样式表 *路径可以是绝对路径也可以是相对路径.*也可以把样式表文件复制到临时html文件的目录下,即这儿的demo文件目录下(默认).*也可以直接把样式写在html页面中直接传递过来这儿可以引入生成的Html的样式表.*/// $html='// <link rel="stylesheet" href="css/common.css" rel="external nofollow">// <link rel="stylesheet" href="css/myCenter.css" rel="external nofollow">// <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'.$html;$html='<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'.$html;//这儿引入生成的Html的样式表 //$html = ob_get_contents();$filename = "down_report";//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 PDF$suc = shell_exec("wkhtmltopdf {$filename}.html {$filename}.pdf");// $suc = shell_exec("wkhtmltopdf https://www.baidu.com/ 1.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{echo 'false';exit;}
?>

点击页面中的下载按钮,即可完成下载:
这里写图片描述

下载下来的文件如下:
这里写图片描述

打开查看效果:
这里写图片描述

部分内容参考与《 最好用Html转pdf的工具——wkhtmltopdf》,具体情况可以看看这篇博文。这里我就自己做一下记录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法基础笔记】常用的排序算法的时间、空间复杂度,部分排序算法原理

冒泡排序 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。对每一对相邻元素做同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数。针对所有的元素重复以上的步骤&#xff0c;除了最后一个。持续每次对越…

windows定时任务

在windows系统中创建定时任务&#xff0c;与在linux中创建定时任务是不同的。因为平时会用到windows的定时任务&#xff0c;所以在这里做个记录&#xff0c;同事给小伙伴们一个参考。 一、windows定时任务的工作流程 1、首先创建一个批处理脚本&#xff0c;就是扩展名为bat的…

jQuery教程05-层级选择器

jQuery选择器之层级选择器 文档中的所有的节点之间都是有这样或者那样的关系。我们可以把节点之间的关系可以用传统的家族关系来描述&#xff0c;可以把文档树当作一个家谱&#xff0c;那么节点与节点直接就会存在父子&#xff0c;兄弟&#xff0c;祖孙的关系了。 选择器中的…

jQuery教程06-基本筛选选择器

jQuery选择器之基本筛选选择器 很多时候我们不能直接通过基本选择器与层级选择器找到我们想要的元素&#xff0c;为此jQuery提供了一系列的筛选选择器用来更快捷的找到所需的DOM元素。筛选选择器很多都不是CSS的规范&#xff0c;而是jQuery自己为了开发者的便利延展出来的选择…

jQuery教程07-内容筛选选择器

jQuery选择器之内容筛选选择器 基本筛选选择器针对的都是元素DOM节点&#xff0c;如果我们要通过内容来过滤&#xff0c;jQuery也提供了一组内容筛选选择器&#xff0c;当然其规则也会体现在它所包含的子元素或者文本内容上 内容过滤器描述如下表&#xff1a; 注意事项&…

Apache服务器下载、安装、启动、关闭及卸载(win版)

今天讲一下64位win7环境下apache服务器的下载、安装及配置的过程。 1、Apache的下载 百度搜索apache&#xff0c;然后单击选择的下载网站&#xff1a; 我选择的是第一个网站&#xff0c;第二个也可以。 进入之后&#xff0c;确定下载的apache版本&#xff0c;这里选择2.4…

Navicat导入Excel表格数据

现在使用图像化工具来管理数据库是越来越方便了&#xff0c;PhpMyAdmin和Navicat都是管理数据库的好工具&#xff0c;这里我记录一下使用Navicat导入xls表格数据的方法。大家可以作为参考。 1、查看一下导入的表格&#xff0c;注意第一行是字段名&#xff08;也可以不要第一行…

MySQL5.7数据库软件下载教程

1、搜索MySQL 2、选择MySQL社区开源版本 3、单击下载社区版 4、选择所需版本-这里选择安装版 5、单击Download 6、建立Oracle账户/登录Oracle账户 注意&#xff1a;这里就不注册了&#xff0c;直接登录。 7、填写信息 8、单击下载MySQL数据库安装包 9…

后台传参与select-option标签的默认选中

从后台传递过来的参数是数据的详情页&#xff0c;在编辑页的select下拉框汇总既要显示所有的选项&#xff0c;又要默认显示选中项&#xff0c;后台传递过来的value值与option的value值相同时就默认选中&#xff08;即给option标签添加selected”selected”属性&#xff09;。 …

jQuery教程08-属性筛选选择器

jQuery选择器之属性筛选选择器 属性选择器让你可以基于属性来定位一个元素。可以只指定该元素的某个属性&#xff0c;这样所有使用该属性而不管它的值&#xff0c;这个元素都将被定位&#xff0c;也可以更加明确并定位在这些属性上使用特定值的元素&#xff0c;这就是属性选择…

有关Canvas的一点小事—图像绘制

1、 使用canvas绘制图像 什么是图像&#xff1f;在js中它就是一个<img src””>&#xff0c;<img>有两种接收图像信息的方法&#xff0c;一个是直接链接到图像地址&#xff0c;一个使用base64数据&#xff0c;不过这里讨论的是canvas要使用的Image对象。我们有两个…

jQuery教程09-子元素筛选选择器

jQuery选择器之子元素筛选选择器 子元素筛选选择器不常使用&#xff0c;其筛选规则比起其它的选择器稍微要复杂点 子元素筛选选择器描述表&#xff1a; 注意&#xff1a; :first只匹配一个单独的元素&#xff0c;但是:first-child选择器可以匹配多个&#xff1a;即为每个父…

关于ppt中嵌入echarts图表

1.首先需要PPT2013版本以上带有开发工具&#xff0c;能够添加microsoft web browser控件 2.将echarts图表的html代码中加载 <meta http-equiv"X-UA-Compatible" content"IEEmulateIE*"/>代码&#xff08;*处至少为9或以上&#xff09;&#xff0c;将…

jQuery教程10-表单元素选择器

无论是提交还是传递数据&#xff0c;表单元素在动态交互页面的作用是非常重要的。jQuery中专门加入了表单选择器&#xff0c;从而能够极其方便地获取到某个类型的表单元素。 表单选择器的具体方法描述&#xff1a; 注意&#xff1a; 除了input筛选选择器&#xff0c;几乎每…

在windows系统和linux系统中查询IP地址命令的不同

在linux和windows系统上查询IP地址的命令是不一样的。 在linux中的命令行模式下&#xff0c;输入ifconfig即可查询到IP。而在windows系统下要查询IP地址需要先打开dos命令行&#xff0c;然后输入ipconfig。回车即可。 注意&#xff0c;两个命令时不一样的&am…

JavaScript实现复选框的全选/全不选和批量选择

实现数据的批量选择以及全选/全部选功能的效果如下所示&#xff1a; 代码如下&#xff1a; <a class"btn btn-default" id"search_like" style"margin-right: 5px;">搜索</a> <a class"btn btn-success" id"s…

Python魔术世界 1 如何使用Visual Studio在WIN10中一键安装Python3入门编程环境并测试Django...

本文通过VS安装Python和Django的环境&#xff0c;创建了一个Web程序&#xff0c;前后5分钟的操作&#xff0c;让你快速入门Python的编程世界&#xff0c;各种Python和Django的概念会在实战中给你娓娓道来。 Django其实就是使用Python写的网站生成器半成品网站。其提供了一些非常…

win10 无法连接路由器共享设备 报错0X80004005

用路由器挂了个硬盘&#xff0c;win10无法用文件夹访问&#xff0c;试了各种方法都没用&#xff0c;后来才发现是windows的‘SMB 1.0/CIFS 文件共享支持’未开启&#xff0c;启用后重启电脑就可以了。 具体步骤&#xff1a; 控制面板 - 程序和功能 - 启用或关闭Windows功能 打勾…

PhpWord的autoload.php文件及目录的生成方式

在github上下载的压缩版PhpWord类库&#xff0c;bootstrap需要用到wendor下的autoload.php&#xff0c;但发现目录里面没有该文件。百度一下&#xff0c;发现需要通过composer进行生成该目录及文件。 1、安装composer 我是在windows系统下办公的&#xff0c;所以直接下载comp…

新版的sublime text 3无法设为默认启动程序

安装上新版的sublime text 3之后&#xff0c;打算设为.html .css .js等文件的默认启动程序&#xff0c;却发现无法设置成功&#xff0c;于是百度上搜索了一下&#xff0c;发现很多都是去注册表修改配置。却始终不能如愿。 有的解决方法是&#xff1a;删除 HKEY_CURRENT…