PHP html 转换成PDF wkhtmltopdf HTML 转换成 PDF (JAVA C# PHP都适用)
试用了好多转换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/
Q
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
1
解决方法:
yum install -y libXrender
此上是linux的第一种使用
1、下载
下载命令:wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
下载地址:https://github.com/wkhtmltopdf/wkhtmltopdf/releases/0.12.4 或者到https://wkhtmltopdf.org/downloads.html下载
我这里下载的是.tar.xz格式的,有兴趣的可以尝试一下rpm格式的。
2、解压
tar xvfJ wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
cd wkhtmltox/bin
sudo mv ./wkhtmltopdf /usr/bin/wkhtmltopdf
sudo chmod +x /usr/bin/wkhtmltopdf
3、报错处理
(1)yum install urw-fonts libXext openssl-devel
(2)如果出现错误libXrender找不到错误:安装libXrender
使用yum install libXrender* 或者 apt-get install libXrender*
(3)如果出现错误libXext找不到错误:安装libXext
使用yum install libXext* 或者 apt-get install libXext*
(4)安装字体文件 yum install libfontconfig*
4、字体上传
如果中文不显示,则将 windows下的字体,例如simsun.ttc ,或者msyh.ttf,或者msyhbd.ttf 复制到 linux系统 /usr/share/fonts 下。
5、运行
wkhtmltopdf http://www.baidu.com /home/test.pdf
代码例子:
<?php
function GeneratePdf($id = 0,$filename='')
{
if(!$id){
return ['code'=>0,'msg'=>'缺少参数'];
}
if(!$filename){
$filename = md5(time().rand(0000000,9999999999)) .'.pdf';
}
$path = ROOT_PATH . 'public' . DS . 'tablepdf' . DS . date('Ymd');
if(!file_exists($path)){
mkdir($path,0777,true);
}
$pdfpath = $path . DS . $filename;
$html_url = 'http://'.$_SERVER['HTTP_HOST'].'/admin/table_pdf/getpdf/id/'.$id;
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { //判断是linux 还是windows 系统
$pdf_tool = ROOT_PATH.'\extend\wkhtmltopdf\bin\wkhtmltopdf';
exec("$pdf_tool $html_url $pdfpath");
}else{
shell_exec("/usr/bin/wkhtmltopdf $html_url ".$pdfpath);
}
if(file_exists("$pdfpath")){
return ['code'=>1,'src'=>$pdfpath];
}else{
return ['code'=>0,'msg'=>'pdf文件未生成'];
}
}
此代码在tp中使用可以,其他地方使用按实际路劲修改
上一篇: VS中导出PDF
下一篇: EPPLUS读取指定单元格内的图片