之前做过一个通过imagick扩展实现pdf转图片的例子,对图片处理有些印象,这次碰到的是多图转PDF,使用场景:ppt转成多张图片后,按照需求重组成新的有序图组,并输出pdf。

前半截步骤暂时不考虑通过程序实现(ppt拆分成多图),这次主要实现后面的步骤:多图重组合并成pdf。

然后就搜到了这篇教程:php图片合并成图片、合并成pdf。这篇教程里展示了两个输出途径,一个是输出一张图片,另一个是输出pdf。输出图片的方法都比较熟悉,是基于php自带的gd库的一些方法实现的。后面的方法是这次的目标。它使用了一个叫html2pdf的项目,其自身又有其他的一些依赖库,如tcpdf,所以需要借助composer进行安装。

项目根目录

composer require spipu/html2pdf

安装说明:How to Install Html2Pdf - github.com

demo

require __DIR__.'/vendor/autoload.php';

use Spipu\Html2Pdf\Html2Pdf;

$html2pdf = new Html2Pdf();
$html2pdf->writeHTML('<h1>HelloWorld</h1>This is my first test');
$html2pdf->output();

具体实现

输出文件权限不够,所以直接输出到浏览器,然后另存为就好

ob_start();
$arr = array(
    "http://i3.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfn2IERdDAAHQxdb3mPsAAWkHAMIknsAAdDd449.jpg",
    "http://i1.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfn6IDN3UAAGMCyjcYzAAAWkHAMKq1MAAYwj981.jpg",
    "http://i0.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfn6IG8EYAAFskogJlD8AAWkHAMMN3YAAWyq856.jpg",
    "http://i1.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfn-Ia45QAAJXIvoesz0AAWkHAMOEogAAlc6771.jpg",
    "http://i3.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfn-INmzaAAFgdWkXDdcAAWkHAMQacIAAWCN493.jpg",
    "http://i3.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfoCISLJGAAHzBo-1gFEAAWkHAMRyk8AAfMe709.jpg",
    "http://i1.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfoGIapnCAAFvZFFz-uwAAWkHAMTvW0AAW98471.jpg",
    "http://i3.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfoGIL68jAAIcxWunA8kAAWkHAMWm_AAAhzd973.jpg",
    "http://i0.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfoGIV8MLAAFZzELLOKgAAWkHAMVQgwAAVnk100.jpg",
    "http://i2.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfoKIEzMNAAF6waw8hHcAAWkHAMZVSQAAXrZ458.jpg",
    "http://i4.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfoOIQG1XAAI5eKk8DHcAAWkHAMiWVoAAjmQ624.jpg",
    "http://i1.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfoOIdkkaAAIpl9rgCREAAWkHAMsnogAAimv191.jpg",
    "http://i3.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfoOIRGmRAAG00aVhnlEAAWkHAMgpHEAAbTp099.jpg",
    "http://i3.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfoWIQO6sAAG3EJBtOCwAAWkHAM2RNsAAbco983.jpg",
    "http://i2.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfoWIPGVRAAJygNzB8OkAAWkHAM4G1kAAnKY482.jpg",
    "http://i2.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfoaIBIFOAAKVc2qOlY8AAWkHAM6jfEAApWL812.jpg",
    "http://i0.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfoeIL4ZPAAKKqAt2c1IAAWkHAM9I3wAAorA456.jpg",
    "http://i1.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfoiICob2AAKn89yMyrIAAWkHAM__vcAAqgL287.jpg",
    "http://i1.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJlfyfoiIHVHnAAKGDOSadw0AAWkHANCy_oAAoYk417.jpg",
    "http://i3.article.fd.zol-img.com.cn/g5/M00/09/0C/ChMkJ1fyfomIfYZPAAHdVx-ZrvsAAWkHANFUh4AAd1v749.jpg"
);
foreach($arr as $k=>$v){
    echo '<page orientation="paysage"><img src="'.$v.'" style="float:left;vertical-align:middle;"></page>';
}
$content = ob_get_clean();
require __DIR__.'/vendor/autoload.php';
use Spipu\Html2Pdf\Html2Pdf;
use Spipu\Html2Pdf\Exception\Html2PdfException;

try
{
    $html2pdf = new Html2Pdf('P', 'A4', 'fr');
    $html2pdf->pdf->SetDisplayMode('fullpage');
    $html2pdf->writeHTML($content);
//    $html2pdf->output('dingling20161013.pdf','F');
    $html2pdf->output('dingling20161013.pdf');
} catch(Html2PdfException $e) {
    echo $e;
    exit;
}

改写成ci library

把vendor直接改成imgs2pdf放到library目录下,再添加一个这样内容的Imgs2pdf_init.php引入文件

class Imgs2pdf_init
{
    private $ci;

    public function __construct()
    {
        $this->ci =& get_instance();
        
        require_once 'imgs2pdf/autoload.php';
    }
}

ci 调用

$this->load->library('imgs2pdf_init');

use Spipu\Html2Pdf\Html2Pdf;
$html2pdf = new Html2Pdf();

or

$html2pdf = new Spipu\Html2Pdf\Html2Pdf();
文章目录