[轉載]史上最强php生成pdf文件,html转pdf文件方法

之前有个客户需要把一些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来让它生成pdf文件的方法。

一,下载并安装pdf

下载地址:http://code.google.com/p/wkhtmltopdf/downloads/list

上面有各种平台下安装的安装包,英文不好的直接谷歌翻译一下。下面以
windows平台上使用举例,我的下载的是wkhtmltopdf-0.9.9-installer.exe这个版本,我在win7 32位64位和windows
2003上安装测试都没有问题的。下载好以后直接安装就可以了,注意安装路径要知道,下面会用到的。

安装好以后需要在系统环境变量变量名为"Path"的后添加:;C:Program Files (x86)wkhtmltopdf
也就是你安装的目录。安装好以后重启电脑。

二,测试使用效果

直接在cmd里输入:wkhtmltopdf http://www.shwzzz.cn/ F:website1.pdf

第一个是:运行软件名称(这个是不变的) 第二个是网址
第三个是生成后的路径及文件名。回车后是不是看生一个生成进度条的提示呢,恭喜您已经成功了,到你的生成目录里看看是不是有一个刚生成的pdf文件呢。

三,php里调用

php里调用是很简单的,用shell_exec这个函数就可以了,如果shell_exec函数不能用看看php.ini里是否补禁用了。

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

三,解决分页问题

wkhtmltopdf 很好用,但也有些不尽人意。就是当一个html页面很长我需要在指定的地方分页那怎么办呢? wkhtmltopdf
开发者在开发的时候并不是没有考虑到这一点,
例如下面这个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>
<title>pdf</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<style type="text/css">
*{ margin:0px; padding:0px;}
div{ width:800px; height:1362px;margin:auto;}
</style>
<body>
<div style=" background:#030"></div>
<div style=" background:#033"></div>
<div style=" background:#369"></div>
<div style=" background:#F60"></div>
<div style=" background:#F3C"></div>
<div style=" background:#F0F"></div>
<div style=" background:#0FF"></div>
<div style=" background:#FF0"></div>
<div style=" background:#00F"></div>
<div style=" background:#0F0"></div>
<div style=" background:#033"></div>
<div style=" background:#369"></div>
<div style=" background:#F60"></div>
<div style=" background:#030"></div>
<div style=" background:#033"></div>
<div style=" background:#369"></div>
<div style=" background:#F60"></div>
<div style=" background:#F3C"></div>
<div style=" background:#F0F"></div>
<div style=" background:#0FF"></div>
<div style=" background:#FF0"></div>
<div style=" background:#00F"></div>
<div style=" background:#0F0"></div>
</body>
</html>

当我把它生成pdf的时候我想让每个块都是一页,经过无数次调试pdf的一页大约是1362px,但是越往后值就不对了,目前还不知道pdf一页是多少像素。

但是wkhtmltopdf
有个很好的方法,就是在那个div的样式后添加一个:page-break-inside:avoid;就ok了。

<!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>
<title>pdf</title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<style type="text/css">
*{ margin:0px; padding:0px;}
div{ width:800px; min-height:1362px;margin:auto;page-break-inside:avoid;}
</style>
<body>
<div style=" background:#030"></div>
<div style=" background:#033"></div>
<div style=" background:#369"></div>
<div style=" background:#F60"></div>
<div style=" background:#F3C"></div>
<div style=" background:#F0F"></div>
<div style=" background:#0FF"></div>
<div style=" background:#FF0"></div>
<div style=" background:#00F"></div>
<div style=" background:#0F0"></div>
<div style=" background:#033"></div>
<div style=" background:#369"></div>
<div style=" background:#F60"></div>
<div style=" background:#030"></div>
<div style=" background:#033"></div>
<div style=" background:#369"></div>
<div style=" background:#F60"></div>
<div style=" background:#F3C"></div>
<div style=" background:#F0F"></div>
<div style=" background:#0FF"></div>
<div style=" background:#FF0"></div>
<div style=" background:#00F"></div>
<div style=" background:#0F0"></div>
</body>
</html>

http://code.google.com/p/wkhtmltopdf/这个是wkhtmltopdf问题交流平台,但是英文的。

文章来源:http://www.shwzzz.cn/news/xuetang/159.html

时间: 2024-12-28 14:56:29

[轉載]史上最强php生成pdf文件,html转pdf文件方法的相关文章

史上最强php生成pdf文件,html转pdf文件方法

之前有个客户需要把一些html页面生成pdf文件,然后我就找一些用php把html页面围成pdf文件的类.方法是可谓是找了很多很多,什么html2pdf,pdflib,FPDF这些都试过了,但是都没有达到我要的求. pdflib,FPDF 这两个方法是需要编写程序去生成pdf的,就也是讲不支持直接把html页面转换成pdf:html2pdf这个虽然可以把html页面转换成pdf文 件,但是它只能转换一般简单的html代码,如果你的html内容要的是通过后台新闻编辑器排版的那肯定不行的. 纠结了半

【史上最强JavaSE笔记】之数组篇

各位程序猿,各位攻城狮,各位蜥蜴鸥以及各位棕鲸鲤们~~大家好,我是潘师傅,欢迎大家收看由我为你们带来的[史上最强JavaSE笔记]系列,其实也可以叫[嘻哈JavaSE笔记]的,第一次在博客园发帖,想想还真是有点小激动呢,各位求支持呀,哈哈,那么回归正题,我把自己之前学习积累的笔记拿出来跟大家分享一下,方便大家更好的理解和复习,希望能够对大家有所帮助哈,这次发的是JavaSE方面数组篇的,内容不一定全面哦,欢迎大家前来留言交流哈,不足的地方还望大家多多指出和指导哈~(由于首次发文章,布局可能比较乱

【插件】史上最强编辑器通用ctags插件OpenCTags使用指南v1.2--开发者必备

Changes Log: v1.2.0 2011-12-4 支持Java编写的可以设置用户配置的编辑工具 增加当前文件类查找Tags功能 增加设置当前目录参数 完善多种主流轻量级编辑器的配置 v1.1.0 2011-11-26 完善提示窗口的显示样式 编辑器配置使用Json格式配置文件,方便定制到自己喜欢的编辑器,主流编辑器一网打尽 v1.0.4 2011-11-21 支持提示窗口拖动,按住鼠标右键,即可拖拖拖[上一版本为鼠标左键] 增加回车键功能,按下可以会自动打开对应的文件并定位到对应的位置

史上最强】网上所有的Axure元器件、UI、8.0安装包汉化包资源汇总

史上最强]网上所有的Axure元器件.UI.8.0安装包汉化包资源汇总        目前产品经理工具中应该最火的就是axure了,简直就是人人必备.确实,在实现一些复杂的交互上,axure很管用,但是也有缺点,就是元器件不够多,很多要自己画,不美观.今天,8kvv就给大家整理了现有axure的元器件.Axure8.0.axure汉化包.苹果iOSUI及安卓5.0安卓6.0UI.很全啦! 大家慢慢欣赏哦! 列举下为大家整理的网上所有的Axure的实用资源(下载地址在最后),包括: 1.Axure

史上最强实名制来袭!究竟切中了谁的要害?

对常在互联网上蹦跶的你,现在只想说三个字:实名制!近日,bilibili(B站)发布公告称,"应国家相关政策规定要求,从7月5日开始,UP主(视频创作者或上传者)上传视频内容(包括新增.编辑.换源等)需通过实名验证,方可编辑视频稿件".而这,可以看做是史上最强实名制的一部分. 事实上,近段时间以来,实名制是一直是网上热议的争议性话题之一.是否需要实名制.是否对部分用户的隐私权构成威胁.是否影响言论自由及互联网开放的本质精神.实名制究竟有多大的威慑力--史上最强实名制的全面来袭,究竟切中

史上最强型人养成秘籍: 90 天肥仔变型男实录

史上最强型人养成秘籍: 90 天肥仔变型男实录[12P] 这是一篇最近很火的帖子.主人公B.K ,是一个从来没有看见过自己腹肌的三十三岁中年普通男人,就是因为青春易逝的危机感,让他下定决心给自己一个交代!于是用了九十天,他做到了!减脂和塑身计划从2014年3 月15日开始到6月25日结束,从一个非典型性胖子.微胖界翘楚.土圆肥代表,到八块腹肌霸气外露,仅仅90天. 前几天在机场,遇见一个三四个月没见的小姐妹,在她面前半天没认出我.这样的情况,近期已经第三次了.因为这个原因,我不得已又去拍了新的证

史上最强算法论战:请不要嘻哈,这是哈希[下]

史上最强算法论战:请不要嘻哈,这是哈希[下] 欢迎个人转发朋友圈,机构及媒体转载需在开篇声明,转自微信公号“知象科技” 论战主角之一龙博:知象科技CEO,欲了解龙博及知象科技,请点击文末“阅读原文”. 这是“美丽互联”微信群里的一次算法论战,感谢书记员硅谷寒(梁寒)精彩的说书般的整理. 书接上文 一夜过去了…孤独虎精神抖擞的回来了! [书记员注:上集说到独孤虎被龙博两次判零分,已经到了精神分裂的边缘.于是他决定回家休养生息,以图再战.果不其然,第二天,独孤虎首先跳出来,带来了他的第四种方案.我们

翻翻git之---史上最强的图片选择器 GalleryFinal(顺带附下麦麦,当当的近照)

转载请注明出处:王亟亟的大牛之路 技术内容在P2,P1是废话可以跳过 P1:(开胃菜) 最近手头上工作的事差不多告一段落了,可以把更多的精力花在学习上了,还是会继续翻git这部分的文章(搬运工),然后准备整整一些之前没接触过的知识点(具体学什么没想好,等会看看去) 先上一下家里宝贝的近照 P2:(正菜) 今天上的是一个自称是"史上最强的图片选择器" GalleryFinal 话不多说先看看效果 作者几乎实现了我们平时所需的"皂片"选择器的所有功能,还带有一定的编辑和

喜欢,就要说出来,别等错失后才觉醒!史上最强告白!

喜欢,就要说出来,别等错失后才觉醒!史上最强告白!! 2016-08-06 亚谷科技 下辈子也要找到你 孙露 - 孙情流露 人一生会错过很多东西, 回得了过去,回不了当初. 关于爱情 喜欢 就要大声的说出来, 别再去等一个人.或者等一个故事. <偶像版> <太阳的后裔>第一集里男主就喜欢上了女主. -- “和我一起看电影吧?快回答,没时间了,好还是不好?” -- “好!” -- “那就这样说定了!” 喜欢就别矫情   <剧情版> “不好意思,刚认识就喜欢你!” 无论结果