设为首页 收藏本站
查看: 837|回复: 0

[经验分享] php中网页生成图片的方式

[复制链接]

尚未签到

发表于 2017-12-29 17:50:28 | 显示全部楼层 |阅读模式
  在网上找了很多方法,发现与自己最初的思路也是大同小异,那就是HTML——》PDF——》JPG。从上午9点钟一直搞到下午6点钟,代码方面其实很简单,更多的还是环境和PHP拓展上面,忙了一天的成果有必要分享一下。
  第一步:HTML——》PDF
  1、利用html2fpdf将html转成pdf
  

require('html2fpdf/html2fpdf.php');  

$pdf=new HTML2FPDF();  

$pdf->AddPage();  

// yourfile.html 你要转化的HTML文件  
$yourfile_html = "index.html";
  
// yourfile.pdf 转化成功后的pdf文件名
  
$yourfile_pdf = "yourfile.pdf";
  
$fp = ($yourfile_html,"r");
  
$strContent = ($fp, ($yourfile_html));
  
($fp);
  
$pdf->WriteHTML($strContent);
  
$pdf->Output($yourfile_pdf );
  

  html2fpdf类库网上都可以下载到,这个方法的一个缺点就是会出现中文乱码,所以我后来又找到了下面这种方法:
  

2、利用mpdf将html转成pdf  基本解决了中文(以及日语、韩语及东南亚和全球语言)乱码的问题,在Windows/Linux开发环境下测试可用,不需要安装别的组件支持
  这里是官方下载地址是:http://www.mpdf1.com/,已经更新到6.0版,不过我不建议下载6.0版本,原因有两个:相比其他版本要大很多;再就是我第一次用的就是这个版本,里面报各种错误(这才是主要原因),后来换成5.7就没问题了。
  代码如下:
  

  

include('mpdf/mpdf.php');  

$mpdf=new mPDF('UTF-8','A4','','',0,0,0,0);//设置编码、页面大小,以及在pdf上面的顶点坐标  
$mpdf->useAdobeCJK = true;
  
$mpdf->SetAutoFont(AUTOFONT_ALL);
  
$mpdf->SetDisplayMode('fullpage');
  
//$mpdf->watermark_font = 'GB';
  
//$mpdf->SetWatermarkText('中国水印',0.1);
  
$url = 'index.html';
  
$strContent =($url);
  
//print_r($strContent);die;
  
$mpdf->showWatermarkText = true;
  
$mpdf->SetAutoFont();
  
//$mpdf->SetHTMLHeader( '头部' );
  
//$mpdf->SetHTMLFooter( '底部' );
  
$mpdf->WriteHTML($strContent);
  
$mpdf->Output('ss.pdf');
  
//$mpdf->Output('tmp.pdf',true);
  
//$mpdf->Output('tmp.pdf','d');
  
//$mpdf->Output();
  

  

这个方法看起来都要比第一种高大上,编码,水印,纸张大小什么的都能设置。  

  第二步:PDF——》JPG
  这一步才是整个功能最麻烦的地方,麻烦在什么地方?麻烦在imagick系统环境的安装和php动态链接库,动态链接库必须和操作系统版本、php版本一致,否则无法使用。也是悲催,我自己在windows下试了几个小时,换了几台电脑都没成功,一换到linux环境,按照网上的方法一装,跑得好好的。不管怎么样方法还是提供一下吧,万一你运气好一下就装好了也说不定呢!
  本地windows开发环境,安装过程:
  1、下载ImageMagick
  我下载的是ImageMagick-6.8.6-9-Q16-x86-dll.exe版本
  http://vdisk.weibo.com/s/uJehmAky5Zlib?sudaref=www.baidu.com
  2. 安装 ImageMagick
  安装 ImageMagick 到 PC 上。安装路径不能出现空格,否则无法使用。安装时,记得选中第二个选项把执行路径添加到 path 上,否则你就得手动去添加 path 路径了。
  3. 测试安装
  打开windows 命令行窗口,输入convert,回车。会出现convert的帮助文档,如果没有出现,说明没有安装成功,或没有把安装目录添加到环境变量 path 中。
  添加到环境变量:
  我的电脑 -> 右键点击 -> 高级系统设置 -> 高级 -> 环境变量 -> 系统变量 -> path -> 选择并编辑 -> 把你的安装目录,添加到其中
  4. 下载 php扩展 php_imagick.dll
  更新自己的php版本和系统环境下载相对应的dll。下载地址 http://www.peewit.fr/imagick/
  5. 把dll文件重命名为php_imagick.dll,并放到php 扩展文件目录 php/ext 中。
  6. 在 php.ini 配置文件中添加,extension=php_imagick.dll。
  7. 重启电脑,只重启apache不管用的情况下,重启下PC。因为扩展底层使用的是imageMagic软件,所以软件重启电脑,重新加载软件,并刷新path路径。
  8. 重启后,打开 phpinfo页面,查看,扩展已经安装成功。如果还未安装成功,极有可能imagemagick软件版本过高,请选择更低一级的版本安装。
  Linux安装ImageMagick
  1. 依次运行以下命令
  

yum install ImageMagick  
yum install ImageMagick
-devel  
yum install php
-pear [for PECL]  

  安装php-pear是为了使用pecl 中的 phpize
  

yum -y install php-devel  

  2. 安装C编译器
  

yum install gcc  

  如果装不了gcc就用这个命令:
  

yum install gcc gcc-c++ autoconf automake  

  3. 安装imagick
  

pecl install imagick  

  4. 加载imagick到php
  在/etc/php.ini 加上extension=imagick.so
  5. 重启service httpd restart
  6. 使用 phpinfo() 或运行 php -m | grep imagick 来查看是否安装成功
  好了,环境安装完了,下面就是代码实现了(用下面的代码也可以测试环境是否真的安装成功,windows环境下php_imagick扩展已经有了但还是报imagick错误,弄好久也没解决我也很绝望)
  简单一点的代码如下:
  

$pdfpath="yourfile.pdf";  

$im = new Imagick();  

$im->readImage($pdfpath);  

$im -> resetIterator();  

$imgs = $im->appendImages(true);  

$imgs->setImageFormat( "jpg" );  

$img_name ="123.jpg";  

$imgs->writeImage($img_name);  

$imgs->clear();  

$imgs->destroy();  

$im->clear();  

$im->destroy();  

  封装好的代码如下:
  

/**  

* PDF2PNG  

* @param $pdf  待处理的PDF文件  

* @param $path 待保存的图片路径  

* @param $page 待导出的页面 -1为全部 0为第一页 1为第二页  

* @return      保存好的图片路径和文件名  

*/  
function pdf2png($pdf,$path,$page=-1)
  
{
  
     if(!('imagick'))
  
     {
  
         return false;
  
     }
  
     if(!($pdf))
  
     {
  
         return false;
  
     }
  

  
     $im = new Imagick();
  
     $im->setResolution(500,500);//设置图像分辨率
  
     $im->setCompressionQuality(100);//设置默认的压缩质量
  
     if($page==-1)
  
         $im->readImage($pdf);
  
     else
  
         $im->readImage($pdf.'['.$page.']');
  
     foreach ($im as $Key => $Var)
  
     {
  
         $Var->setImageFormat('jpg');
  
         $filename = $path.'/'. ($Key.()).'.jpg';
  
         if($Var->writeImage($filename) == true)
  
         {
  
             $Return[] = $filename;
  
         }
  
     }
  
     return $Return;
  
}
  
$path='images';//请确保当前目录下有这个文件夹PHP Fatal error:  Uncaught exception 'ImagickException' with message 'PostscriptDelegateFailed `test.pdf': No such file or directory'
  
$s=pdf2png('123.pdf',$path);
  

  
$scount=($s);
  

  
for($i=0;$i<$scount;$i++)
  
{

  
     echo '<div align=center><font color=red>Page '.($i+1).'</font><br><a href=\''.$s[$i].'\' target=_blank><img border=3>  
}
  

  如果出现下面的报错,那就需要安装GhostScript了
  PHP Fatal error:  Uncaught exception 'ImagickException' with message 'PostscriptDelegateFailed `test.pdf': No such file or directory'
  linux安装方法如下:
  

yum install ghostscript  

  最后附上整个代码:https://git.coding.net/fallstar/htmltojpg.git
  好了,这就是整个的实现过程,经过测试转一些简单的网页是没有问题的,但要是一些复杂的网页就没办法执行了,其实整个功能的代码还可以进行封装一下的,这里就不实现了。虽然整个的过程比较艰辛,中间也试了很多其他的方法,效果不怎么样就舍弃了,每个功能都是要一步步完善才能做到更加完美的,总得来说收获还是很大的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429437-1-1.html 上篇帖子: PHP基础知识测试题及解析 下篇帖子: [PHP] 生成二维码(两种方法)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表