欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP html 转换成PDF wkhtmltopdf HTML 转换成 PDF (JAVA C# PHP都适用)

程序员文章站 2022-07-13 13:31:06
...

试用了好多转换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中使用可以,其他地方使用按实际路劲修改

相关标签: pdf