添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在服务器端解析将编译好的html转换为图片。

由于html一般由客户端浏览器解析,服务器端不能直接解析html代码。所以我们需要借助php类库及扩展完成这一需求。

文件转换过程为 html —> pdf —>png。

需要借助的类库是mPDF ,imagick

pdf 官方下载地址是: http://www.mpdf1.com/mpdf/index.php (推荐下在6.0 虽然大了点)这是一个类库直接下载 上传到服务器即可,里面东西不少,新建一个 html2pdf 的文件夹 引入

include('./html2pdf/mpdf');
整一个函数
名称 html转换为pdf图片 功能 将html页面转换为pdf图片(部分css样式无法识别) 参数数量 2个 1.必须 html代码 可以用file_get_contenth获取 2.必须 生成pdf存放位置路径 3.非必须 pdf宽 4.非必须 pdf高 返回值 图片名称 实例 code($html,'img/1.pdf'); function html2pdf( $html , $PATH , $w =414 , $h =736 ){ // 设置中文字体(很重要 它会影响到第二步中 图片生成) $mpdf = new mPDF('utf-8' ); $mpdf ->autoScriptToLang = true ; $mpdf ->autoLangToFont = true ; // 设置pdf的尺寸 $mpdf ->WriteHTML('<pagebreak sheet-size="'. $w .'mm '. $h .'mm" />' ); // 设置pdf显示方式 $mpdf ->SetDisplayMode('fullpage' ); // 删除pdf第一页(由于设置pdf尺寸导致多出了一页) $mpdf ->DeletePages(1,1 ); $mpdf ->WriteHTML( $html ); $pdf_name = md5 ( time ()).'.pdf' ; $mpdf ->Output( $PATH . $pdf_name ); return $pdf_name ;

用这个函数基本就可以解决HTML到pdf的问题,需要注意的是mpdf并不能有效的识别html中所有的css样式,例如position border-radius等。位置可以用margin解决,需要显示圆角图片的话,就需要将图片裁剪为圆形了。

接下来开始将pdf转换为png图片了这一步需要在服务器安装 ImageMagick组件 一次运行一下命令

yum install -y ImageMagick
yum install -y ImageMagick-devel
yum install -y gcc
yum install -y php-pear
yum install -y ghostscript
yum install -y ghostscript-devel.x86_64

到这一步注意运行

yum list |grep imagick

根据查询结果 根据自己服务器版本 选择安装 我的是5.6.3

yum install -y php56w-pecl-imagick.x86_64
yum install -y php56w-pecl-imagick-devel.x86_64

重启服务器

service nginx restart
service php-fpm restart

使用 phpinfo() 或运行 php -m | grep imagick 来查看是否安装成功

然后使用函数将已经生成的pdf转换为png就可以了

名称 pdf转换为png图片 功能 将pdf图片转换为png图片 参数数量 2个 1.必须 html代码 可以用file_get_contenth获取 2.必须 生成pdf存放位置路径 实例 code($html,'img/1.pdf'); function pdf2png( $PDF , $PNG , $w =50, $h =50 ){ if (! extension_loaded ('imagick' )){ return false ; if (! file_exists ( $PDF )){ return false ; $im = new Imagick(); $im ->setResolution( $w , $h ); // 设置分辨率 $im ->setCompressionQuality(15); // 设置图片压缩的质量 $im ->readImage( $PDF ); $im -> resetIterator(); $imgs = $im ->appendImages( true ); $imgs ->setImageFormat( "png" ); $img_name = $PNG ; $imgs ->writeImage( $img_name ); $imgs -> clear(); $imgs -> destroy(); $im -> clear(); $im -> destroy(); return $img_name ;

ok,基本完成简单页面的图片化了。图片大小为1M左右。小了不清楚。

由于本人能力有限,文章可能有偏差,请批评指出,谢谢!