批量导出pdf 和导出图片

批量导出pdf 和导出图片1.基于已经制作好的pdf和上传到服务器上后,前端只需要传递pdf链接数组的形式/***批量导出pdf*@accesspublic*@paramid分类编号cat_name分类名称*@returnarray*/publicfunctionactionExportpdf(){…

大家好,又见面了,我是你们的朋友全栈君。

1.

基于已经制作好的pdf和上传到服务器上后,前端只需要传递pdf链接 数组的形式

/**
     *  批量导出pdf
     * @access  public
     * @param   id     分类编号  cat_name分类名称
     * @return  array
     */
    public function actionExportpdf(){
        $ids = Yii::$app->request->post('id');
        $dcat_id = Yii::$app->request->post('dcat_id');
        if (!$ids) {
            return ['code' => -2, 'msg' => '参数错误'];
        }
        //商品文件属性
        $dataFlie = new \backend\models\MmcDataFile();
        $goodsDataFiles = $dataFlie->getGoodsDataFile($ids);
        $goodsDataFiles= array_filter($goodsDataFiles,function ($v)use($dcat_id){
            if($v['dcat_id']==$dcat_id){
                return TRUE;
            }
        });
        foreach ($goodsDataFiles as $val){
            $url = $val['file_url'];
        }
        ob_end_clean();
        ob_start();
        $file = file_get_contents($url);
        header("Content-type:application/octet-stream");
        $filename = pathinfo($url,PATHINFO_BASENAME);
        header("Content-Disposition:attachment;filename=" . $filename);
        header("Accept-ranges:bytes");
        ob_end_flush();
        exit($file);
    }

//导出图片    基于前端传递图片二维数组链接   把属于二维数组中的一维数组多个图片合并后并下载
    public function actionExportimg()
    {
        $ids = Yii::$app->request->post('id');
        $goodsThumb= Yii::$app->request->post('goods_thumb');
        if (!$ids || !$goodsThumb) {
            return ['code' => -2, 'msg' => '参数错误'];
        }
        if(is_array($goodsThumb)){
            $root =  $_SERVER['DOCUMENT_ROOT'];
            $num = strrpos($root,'/');
            $rootdir = substr($root,0,$num);
            $num = strrpos($rootdir,'/');
            $rootdir = substr($root,0,$num);
            if(count($goodsThumb)<=0){return json_encode(['code'=>-101,'message'=>'未接收到图片','data'=>'']);}
            $editor = Grafika::createEditor();
            $imageBack = Grafika::createBlankImage(1200, count($goodsThumb)*1200);//创建一个750*750的空白图像
            $backurl =$rootdir . '/backend/web/';
            foreach ($goodsThumb as $k=>$pic_path) {
                $dir_name =$backurl . $pic_path;
                $editor->open($image,$dir_name );//打开1.jpeg并且存放到$image1
                $editor->resizeFill($image, '1200','1200');//居中剪裁。就是把较短的变缩放到200px,然后将长边的大于200px的部分居中剪裁掉,图片不会变形
                $editor->blend($imageBack, $image, 'normal', 1, 'top-center',0,$k*1200);//将两个图像合成在一起,第一个图像作为基础,第二个图像在顶部。支持多种混合模式
                $num = strrpos($dir_name,'/');
                $savedir = substr($dir_name,0,$num);
                $savedir = $savedir . '/all_'.$ids.'.jpg';
                $file = $editor->save($imageBack, $savedir );//imageBack保存为all.jpg
            }
    //        var_dump($savedir);die;
            if($file){
    //        $shorturl = str_replace($backurl,"",$savedir);
            $httpurl = $savedir;
            // var_dump($httpurl);die;
            $files = file_get_contents($httpurl);
            header("Content-type:application/octet-stream");
            $filename = pathinfo($httpurl, PATHINFO_BASENAME);
            header("Content-Disposition:attachment;filename=" . $filename);
            header("Accept-ranges:bytes");
            exit($files);
        }else{
                $file = file_get_contents($goodsThumb);
                header("Content-type:application/octet-stream");
                $filename = pathinfo($goodsThumb, PATHINFO_BASENAME);
                header("Content-Disposition:attachment;filename=" . $filename);
                header("Accept-ranges:bytes");
                exit($file);
            }
        }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135367.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 反射型xss实战演示「建议收藏」

    反射型xss实战演示「建议收藏」我们知道,XSS攻击大致分为三种类型:Persistent型(持久型),Non-persistent(反射型)及Dom-based型。而反射型是最常用,也是使用得最广的一种攻击方式。它通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。它的特点是非持久化,必须用户点击带有特定参数的链接才能引起。   今天,通过一个反射型xss的实战演示

    2022年6月11日
    43
  • ioctl() FIONREAD

    ioctl() FIONREAD函数名:ioctl  头文件:#include  功能:控制I/O设备,提供了一种获得设备信息和向设备发送控制参数的手段。用于向设备发控制和配置命令,有些命令需要控制参数,这些数据是不能用read/write读写的,称为Out-of-band数据。也就是说,read/write读写的数据是in-band数据,是I/O操作的主体,而ioctl命

    2022年7月23日
    31
  • 摄像头模组 PDAF对焦(Phase Detection Auto Focus)

    摄像头模组 PDAF对焦(Phase Detection Auto Focus)http://blog.csdn.net/sylorchen/article/details/54618912本文主要是最近看的两个文档的总结,相对零散的笔记,包括《imx298softwarereferencePDAF》与《PDAFTruly》。1、PDAF功能的实现需要使用到shieldpixel的概念,包括right-half-shield与left-half-

    2025年9月25日
    5
  • cut it out什么意思_cutout例句

    cut it out什么意思_cutout例句1.几种数据增强的比较Mixup:将随机的两张样本按比例混合,分类的结果按比例分配;Cutout:随机的将样本中的部分区域cut掉,并且填充0像素值,分类的结果不变;CutMix:就是将一部分区域cut掉但不填充0像素而是随机填充训练集中的其他数据的区域像素值,分类结果按一定的比例分配区别上述三种数据增强的区别:cutout和cutmix就是填充区域像素值的区别;mixup和cutmix是混合两种…

    2025年11月20日
    3
  • autojs实现的微信消息推送源代码免费分享

    autojs实现的微信消息推送源代码免费分享说明本文提供的代码仅供参考。不建议用于生产环境。可能有些地方在最新版本的Auto.js上面需要做修改,才能运行。Auto.js简介Auto.js是利用安卓系统的“辅助功能”实现类似于按键精灵一样,可以通过代码模拟一系列界面动作的辅助工作。与“按键精灵”不同的是,它的模拟动作并不是简单的使用在界面定坐标点来实现,而是类似与win一般,找窗口句柄来实现的。Auto.js使用JavaScri…

    2022年6月3日
    147
  • rabbitmq优先级队列_rabbitmq主从模式

    rabbitmq优先级队列_rabbitmq主从模式优先级队列:此队列中的消息可以拥有优先级属性,在发送有优先级属性的消息到此队列时,优先级属性能够生效。优先级高的消息得以提早消费,消息优先级的最大值由队列的属性决定。超出队列的最大值按最大值算。Map<String,Object>priority=newHashMap<String,Object>();priority.put(“x-max-priority…

    2022年9月23日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号