ThinkPHP5.1
composer 安装 mpdf
composer require mpdf/mpdf
namespace app\index\controller;
use Mpdf\Mpdf;
use think\App;
use think\Db;
class Index extends Auth
{
public function __construct(App $app = null){
parent::__construct($app);
}
//html生成pdf文件
function shengchengpdf($url){
$html = file_get_contents($url);
$dir= request()->server('DOCUMENT_ROOT');//获取绝对路径 /www/home/
$mpdf = new Mpdf(['tempDir' => $dir .'/tmp','mode' => 'UTF-8',]);
//设置pdf显示方式
$file='/Uploads/pdf/'.date('Y-m-d').'/';
$path=$dir.$file;
if(!file_exists($path)){ //判断目录或文件是否存在
mkdir($path,0777,true);//创建目录
}
//生成不重复名称
$new_file_name =md5(uniqid(microtime(true),true).rand(10000,99999)) . '.pdf' ;
$pdfname=$path.$new_file_name;
$mpdf->WriteHTML($html);
$type='f';
//$type='I';在线预览模式
//$type='D';下载模式
//$type='f';生成后保存到服务器
//$type='s';返回字符串,此模式下$filename会被忽视
$a=$mpdf->Output($pdfname,$type);//保存pdf文件
return $file.$new_file_name;
}
// 生成多个pdf然后合并到一起
function hecheng(){
$url1='html文件1';
$array[] = $this->shengchengpdf($url1);
$url2='html文件2';
$array[] = $this->shengchengpdf($url2);
$url3='html文件3';
$array[] = $this->shengchengpdf($url3);
// 判断合并pdf数量
if(count($array)==1){
$name= $array[0];
}else{
//合并后文件目录
$file='/Uploads/pdf/'.date('Y-m-d').'/';
//生成不重复名称
$new_file_name =md5(uniqid(microtime(true),true).rand(10000,99999)) . '.pdf' ;
$name=$file.$new_file_name;
//不支持 centos8 以上
//centos需要安装 poppler-utils
// yum install poppler-utils
$shell='/usr/bin/pdfunite ';
$dir= request()->server('DOCUMENT_ROOT');
foreach ($array as $v){
$shell.=$dir.$v.' ';
}
$shell.=$dir.$name;
// pdf 合并 把1.pdf 2.pdf 合并成3.pdf
//pdfunite /www/admin/1.pdf /www/admin/2.pdf /www/admin/3.pdf
$bol= shell_exec($shell);
//删除原始的pdf,只保留合并后pdf
foreach ($array as $v){
@unlink($dir.$v);
}
}
//得到合并后的pdf路径
echo $name;
}
}