首页 > 编程知识 正文

php生成pdf,php html转pdf

时间:2023-05-06 06:01:45 阅读:262611 作者:969

前言 最近遇到了需要把多个PDF文件合并成一个PDF文件、把PNG格式的图片合并生成一个新的PDF文件的需求。 解决办法是采用Fpdi类库来实现。 * composer命令安装:composer require setasign/fpdf * composer命令安装:composer require setasign/fpdi <?php//档案管理中的公用方法//引入加载PDF合成多个PDF的扩展vendor('setasign.fpdi.autoload');use setasignFpdiFpdi;/** * 拼接多个PDF * @param [type] $pdf_road_datas 需要合并的PDF文件的绝对路径地址一维数组,['F:2.01.12.pdf','F:18.44.01.pdf'] * @param [type] $local_path 合成以后生成的PDF文件到指定的路径+文件名,"F:merge.pdf" * @return void */function selectionSplicingToNewPdf($pdf_road_datas, $local_path){ //实例化模型类 $pdf = new Fpdi(); //合并PDF for ($i = 0; $i < count($pdf_road_datas); $i++) { $page_count = $pdf->setSourceFile($pdf_road_datas[$i]); for ($pageNo = 1; $pageNo <= $page_count; $pageNo++) { //一页一页的读取PDF,添加到新的PDF $templateId = $pdf->importPage($pageNo); $size = $pdf->getTemplateSize($templateId); $pdf->AddPage($size['orientation'], $size); $pdf->useTemplate($templateId); $pdf->SetFont('Helvetica'); $pdf->SetXY(5, 5); } } //方法F,保存合并以后的PDF文件到指定的目录 $pdf->output("F", $local_path);}/** * 先转换PDF为PNG图片,然后合并成PDF文件 * @param [type] $pdf_road_datas 需要合并的PDF文件的绝对路径地址一维数组,['F:2.01.12.pdf','F:18.44.01.pdf'] * @param [type] $png_path 生成图片的地址 "F:/" * @param [type] $local_path 合成以后生成的PDF文件到指定的路径+文件名,"F:merge.pdf" * @return void */function selectionPngToNewPdf($pdf_road_datas, $png_path, $local_path){ //实例化模型类 $pdf = new Fpdi(); foreach ($pdf_road_datas as $row) { $pages = getPageTotal($row); foreach (range(0, intval($pages) - 1) as $page) { $img = pdf2png($row, $png_path, $page); $pdf->AddPage(); $pdf->Image($img, 0, 0, 210, 297); } } //方法F,保存合并以后的PDF文件到指定的目录 $pdf->output("F", $local_path);}/** * 获取PDF文件的页数 * @param [type] $path 文件的绝对路径地址 * @return void */function getPageTotal($path){ //打开文件 if (!$fp = @fopen($path, 'r')) { return json(['code' => -1, 'msg' => '文件打开失败']); } else { //初始化参数 $max = 0; while (!feof($fp)) { $line = fgets($fp, 255); if (preg_match("//Count [0-9]+/", $line, $matches)) { preg_match("/[0-9]+/", $matches[0], $matches2); if ($max < $matches2[0]) { $max = $matches2[0]; } } } fclose($fp); //返回页数 return $max; }}/** * pdf文件转png图片 * @param [type] $pdf PDF文件绝对路径地址 * @param [type] $path 保存PNG图片地址 * @param integer $page PDF的页数 * @return void */function pdf2png($pdf, $path, $page = 0){ try { $im = new Imagick(); $im->setResolution(120, 120); //设置图像分辨率 $im->setCompressionQuality(100); //压缩比 $im->readImage($pdf . "[" . $page . "]"); //设置读取pdf的第一页 //$im->thumbnailImage(200, 100, true);//改变图像的大小 //$im->scaleImage(200,100,true);//缩放大小图像 $filename = $path . "/" . md5(time()) . '.png'; if ($im->writeImage($filename) == true) { $Return = $filename; } return $Return; } catch (PDOException $e) { return ['code' => -1, 'msg' => '数据处理失败']; }} 附上windows10环境下安装Imagick扩展的方法。

https://blog.csdn.net/WHROC21/article/details/105330023

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。