将服务器上面的PDF文件打包成ZIP格式的文件,以及网页内容转换成ZIP格式的文件...

<?php
// require_once("aws/aws-autoloader.php");
// use Aws\S3\S3Client;
//这里是下载zip文件

class TestController extends Controller
{
    public $layout = 'site';
    public $renderArr = array();

    public function init()
    {
        //parent::init();
        //check site off

        //Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.CSS_PATH.'common.css');


    }

    public function actionDate()
    {
        echo date('Y-m-d H:i:s',time());
    }    
    



    //西班牙邮政国际出单测试
    public function actionEs($id)
    {

        header("Content-Type: text/html; charset=UTF-8");

        $order = ServiceOrder::model()->findByPk($id);

        $Peso = array();

        $DATOSADUANA = array();

        foreach($order->Pacel as $pacel){
            $Peso[] = array('TipoPeso'=>'R','Valor'=>$pacel->weight*1000);
            foreach($pacel->Items as $k=>$item){
                $DATOSADUANA[] = array(
                    "Cantidad"=>$item->num,
                    "Descripcion"=>$item->cate,
                    "Pesoneto"=>$item->weight*1000,
                    "Valorneto"=>'0'.str_replace('.','',sprintf("%.2f",$item->value*$item->num)),

                );
            }
        }
        $city_en = explode(',' ,$order->Ship->city_en);
        if(count($city_en) == 3){
            $city = $city_en[1];
        }else{
            $city = $city_en[0];
        }
        $params = array(

              "FechaOperacion"=>date('Y-m-d H:i:s',time()),
              "CodEtiquetador"=>'XXX1',//'5DDE',//'XXX1',
              "Care"=>"000000",
              "TotalBultos"=>1,
              "ModDevEtiqueta"=>2,
              "Remitente"=>array(
                  "Identificacion"=>array(
                      "Nombre"=>$order->Bill->fullname_en
                  ),
                  "DatosDireccion"=>array(
                      "Direccion"=>$order->Bill->address1_en.' '.$order->Bill->address2_en,
                      "Localidad"=>$order->Bill->city_en,
                      "Provincia"=>$order->Bill->city_en
                  ),
                  "CP"=>$order->Bill->zip,
                  "Telefonocontacto"=>$order->Bill->phone,
                  "Email"=>$order->Bill->email
              ),
              "Destinatario"=>array(
                  "Identificacion"=>array(
                      "Nombre"=>$order->Ship->fullname_en
                  ),
                  "DatosDireccion"=>array(
                      "Direccion"=>$order->Ship->address1_en,
                      "Localidad"=>$city

                  ),
                  //"CP"=>"361000",
                  "ZIP"=>$order->Ship->zip,
                  "Pais"=>$order->Country->code,
                  "Telefonocontacto"=>$order->Ship->phone,
                  "Email"=>$order->Ship->email

              ),
              "Envio"=>array(
                  "CodProducto"=>$order->Service->router_code,
                  "TipoFranqueo"=>"FP",
                  "ModalidadEntrega"=>"ST",
                  "Pesos"=>array(
                      "Peso"=>$Peso

                  ),
                  "ValoresAnadidos"=>array("ImporteSeguro"=>"0"),
                //"Largo"=>80, //intval($pacel->length),
                //"Alto"=>60, //intval($pacel->height),
                //"Ancho"=>60,//intval($pacel->width),                                    
                  "Observaciones1"=>"LALLALALALALLALALALALLALALALALLALALALALLALALA",
                  "Observaciones2"=>"gdfgfdgfdgggdfgdfgdfgdfgdfgdfgfdgfdgfdsfdsfds",
                  //"Observaciones3"=>"11111111111111111111111111111111111111111111",
                  //"ReferenciaCliente"=>"test111",
                  //"ReferenciaCliente2"=>"zzzzzz",
                  //"ReferenciaCliente3"=>"555555",
                  "InstruccionesDevolucion"=>"D",
                  "Aduana"=>array(
                      "TipoEnvio"=>2,
                      "DescAduanera"=>array(
                          "DATOSADUANA"=>$DATOSADUANA

                      ),

                  ),
              )

          );
//        print_r($params);
//        exit;
        $wsdl = "http://".$_SERVER['SERVER_NAME']."/attache/wsdl/PreRegistro.wsdl";

        try{
            $client = new SoapClient($wsdl,
                        array(
                            'login' => 'wusutest',//'w0998456',//'wusutest',
                            'password' => 'mAHB9yi0',//'Vtz3GLGs',//'mAHB9yi0',
                            'exceptions' => 1,
                            'location'=>'https://preregistroenviospre.correos.es/preregistroenvios',//'https://preregistroenvios.correos.es/preregistroenvios',//"https://preregistroenviospre.correos.es/preregistroenvios",
                            "stream_context" => stream_context_create(array(
                                'ssl' => array(
                                    'verify_peer'       => false,
                                    'verify_peer_name'  => false,
                                )
                            )
                        )
            ));

            //$client->__setLocation("https://preregistroenviospre.correos.es/preregistroenvios");

            //$client->__setLocation("https://preregistroenvios.correos.es/preregistroenvios");

            
          
            
            $result = $client->PreRegistro($params);

           // print_r($result);die();
            if($result->Resultado==0){


                $path = 'attache/orders/L/'.$id.'/';

                if (!file_exists($path)) {
                    mkdir($path, 0777, true);
                }

                $filename = $order->track.'.pdf';


                $pdf = $result->Bulto->Etiqueta->Etiqueta_pdf->Fichero;



                file_put_contents($path.$filename,$pdf);
//                echo $path.$filename;die();
//                $order->status = 2;
//
//
//                
//                $order->save(false);
//                
//                foreach ($order->Pacel as  $pacel) {
//                    $pacel->ems = $result->Bulto->CodEnvio;
//                    $pacel->note = $result->Bulto->CodManifiesto;
//                    $pacel->status = $order->status;
//                    $pacel->save(false);
//
//                }
                //保存cn23 pdf文件
                $this->get_cn23($order,$path,$result->Bulto->CodEnvio);



            }else{
                //var_dump($result);die();
                $error = 'errorcode:'.$result->BultoError->Error.'error:'.$result->BultoError->DescError;

                $order->errors = $error;

                if($order->save(false)){

                    $re = array('status'=>0,'message'=>$error);
                    echo CJSON::encode($re);
                    Yii::app()->end();
                }

            }


        }catch(SoapFault$e){

            $order->errors = $e->getMessage();
            if($order->save(false)){
                //var_dump($e);die();
                $re = array('status'=>0,'message'=>$e->getMessage());
                echo CJSON::encode($re);
                Yii::app()->end();
            }


        }

    }



    public function actionC23()
    {

        $params = [
            'codCertificado'=>"EJ000000924ES"
        ];

        $wsdl = "https://preregistroenviospre.correos.es/preregistroenvios?wsdl";

        $client = new SoapClient($wsdl,
            array(
                'login' => 'wusutest',
                'password' => 'mAHB9yi0',
                'trace'=>1,
                'location'=>"https://preregistroenviospre.correos.es/preregistroenvios",
                "stream_context" => stream_context_create(array(
                        'ssl' => array(
                            'verify_peer'       => false,
                            'verify_peer_name'  => false,
                        )
                    )
                )
            ));

        //$client->__setLocation("https://preregistroenviospre.correos.es/preregistroenvios");


        try{

            $result = $client->DocumentacionAduaneraCN23CP71Op($params);
            //var_dump($client);die();
            if($result->Resultado==0){

                print_r($result);
            }else{

                die(CJSON::encode(array('status'=>0,'msg'=>$result->MotivoError)));
            }


        }catch(SoapFault $e){
            var_dump($e);die();
            die(CJSON::encode(array('status'=>0,'msg'=>$e->getMessage())));
        }
    }





    public function get_cn23($order,$path,$ems)
    {
        $params = [
            'codCertificado'=>$ems
        ];
       
        $wsdl = "https://preregistroenviospre.correos.es/preregistroenvios?wsdl";

        $client = new SoapClient($wsdl,
            array(
                    'login' => 'wusutest',
                    'password' => 'mAHB9yi0',
                    'trace'=>1,
                    'location'=>"https://preregistroenviospre.correos.es/preregistroenvios",
                    "stream_context" => stream_context_create(array(
                            'ssl' => array(
                                'verify_peer'       => false,
                                'verify_peer_name'  => false,
                            )
                        )
                    )
                ));

        //$client->__setLocation("https://preregistroenviospre.correos.es/preregistroenvios");


        try{

            $result = $client->DocumentacionAduaneraCN23CP71Op($params);

            if($result->Resultado==0){

                $filename = "cn23_".$ems.".pdf";

                $pdf = $result->Fichero;

                file_put_contents($path.$filename,$pdf);
                echo $path.$filename;die();
                return $path.$filename;
            }else{

                die(CJSON::encode(array('status'=>0,'msg'=>$result->MotivoError)));
            }


        }catch(SoapFault $e){

            die(CJSON::encode(array('status'=>0,'msg'=>$e->getMessage())));
        }
    }


    public function actionJn()
    {   
        
        header("Content-Type: text/html; charset=UTF-8");
        ini_set('soap.wsdl_cache_enabled',0);
        ini_set('soap.wsdl_cache_ttl',0);

        $order = ServiceOrder::model()->findByPk(1489);

        $Peso = array();

        $DATOSADUANA = array();

        foreach($order->Pacel as $pacel){
            $Peso[] = array('TipoPeso'=>'R','Valor'=>$pacel->weight*1000);
            foreach($pacel->Items as $k=>$item){
                $DATOSADUANA[] = array(
                    "Cantidad"=>$item->num,
                    "Descripcion"=>$item->cate,
                    "Pesoneto"=>$item->weight*1000,
                    "Valorneto"=>'0'.str_replace('.','',$item->value)
                );
            }
        }
        $city_en = explode(',' ,$order->Ship->city_en);
        if(count($city_en) == 3){
            $city = $city_en[1];
        }else{
            $city = $city_en[0];
        }
        
        $params = array(

                "FechaOperacion"=>date('Y-m-d H:i:s',time()),
                "CodEtiquetador"=>'XXX1',//'XXX1',
                "Care"=>"000000",
                "TotalBultos"=>1,
                "ModDevEtiqueta"=>2,
                "Remitente"=>array(
                    "Identificacion"=>array(
                        "Nombre"=>$order->Bill->fullname_en
                    ),
                    "DatosDireccion"=>array(
                        "Direccion"=>$order->Bill->address1_en.' '.$order->Bill->address2_en,
                        "Localidad"=>$order->Bill->city_en,
                        "Provincia"=>$order->Bill->city_en
                    ),
                    "CP"=>$order->Bill->zip,
                    "Telefonocontacto"=>$order->Bill->phone,
                    "Email"=>$order->Bill->email
                ),
                "Destinatario"=>array(
                    "Identificacion"=>array(
                        "Nombre"=>$order->Ship->fullname_en
                    ),
                    "DatosDireccion"=>array(
                        "Direccion"=>$order->Ship->address1_en,
                        "Localidad"=>$city

                    ),
                    //"CP"=>$order->Ship->zip,
                    "ZIP"=>$order->Ship->zip,
                    "Pais"=>$order->Country->code,
                    "Telefonocontacto"=>$order->Ship->phone,
                    "Email"=>$order->Ship->email

                ),
                "Envio"=>array(
                    "CodProducto"=>$order->Service->router_code,
                    "TipoFranqueo"=>"FP",
                    "ModalidadEntrega"=>"ST",
                    "Pesos"=>array(
                        "Peso"=>$Peso

                    ),
                    "ValoresAnadidos"=>array("ImporteSeguro"=>"090050"),
//                    "Largo"=> intval($pacel->length),
//                    "Alto"=> intval($pacel->height),
//                    "Ancho"=>intval($pacel->width),
                    "ReferenciaCliente"=>$pacel->ref,
                    "InstruccionesDevolucion"=>"D",
                    "Aduana"=>array(
                        "TipoEnvio"=>$pacel->shipment_type,
                        "DescAduanera"=>array(
                            "DATOSADUANA"=>$DATOSADUANA

                        ),

                    ),
                )

            );
        //print_r($params);die();
        $wsdl = "http://".$_SERVER['SERVER_NAME']."/attache/wsdl/PreRegistro.wsdl";

        try{
            $client = new SoapClient($wsdl,
                array(
                    'login' => 'wusutest',
                    'password' => 'mAHB9yi0',
                    'exceptions' => 1,
                    'location'=>"https://preregistroenviospre.correos.es/preregistroenvios",
                    "stream_context" => stream_context_create(array(
                            'ssl' => array(
                                'verify_peer'       => false,
                                'verify_peer_name'  => false,
                            )
                        )
                    )
                ));

            //$client->__setLocation("https://preregistroenviospre.correos.es/preregistroenvios");

           
            $result = $client->PreRegistro($params);

            //print_r($result);die();
            if($result->Resultado==0){

                $filename = $order->track.'11111.pdf';


                $pdf = $result->Bulto->Etiqueta->Etiqueta_pdf->Fichero;

                $path = 'attache/orders/L/test/';

                if (!file_exists($path)) {
                    mkdir($path, 0777, true);
                }

                 file_put_contents($path.$filename,$pdf);
                echo $path.$filename;die();
                $files[] = $path.$filename;

                $order->status = 2;

                $order->save(false);

                foreach ($order->Pacel as  $pacel) {
                    $pacel->ems = $result->Bulto->CodEnvio;
                    $pacel->note = $result->Bulto->CodManifiesto;
                    $pacel->status = $order->status;
                    $pacel->save(false);

                }
                //保存cn23 pdf文件
                echo $path.$filename;

            }else{

                $error = 'errorcode:'.$result->BultoError->Error.'error:'.$result->BultoError->DescError;

                $order->errors = $error;

                if($order->save(false)){

                    $re = array('status'=>0,'message'=>$error);
                    echo CJSON::encode($re);
                    Yii::app()->end();
                }

            }


        }catch(SoapFault$e){

            $order->errors = $e->getMessage();
            if($order->save(false)){

                $re = array('status'=>0,'message'=>$e->getMessage());
                echo CJSON::encode($re);
                Yii::app()->end();
            }


        }
    }
    
    
    public function actionMailSend()
    {   
        
        
        $order = ServiceOrder::model()->findByPk(1049);
        //var_dump($order->Pacel);die();
        $track = array();
        foreach ($order->Pacel as $value) {            
            
            $track[] = $value->ems;
            
        }
        
         $maildata=array('email'=>$order->Member->first_name.$order->Member->last_name,'track'=>implode(',',$track));}

    public function actionUps($id){

        $order = ServiceOrder::model()->findByPk($id);

        $path = 'attache/orders/L/' . $id . '/';

        if (!file_exists($path)) {
            mkdir($path, 0777, true);
        }

        require_once('ups/init.php');

        $pf = new Ups();

//        if ($order->is_bookPu == 0) {
//            $pickup_responjson = $pf->pickupViaJson('test', $order);
//
//            $pickup_res = json_decode($pickup_responjson);
//            if ($pickup_res->PickupCreationResponse->Response->ResponseStatus->Code == '1') {
//
//                $order->is_bookPu = 1;
//                $order->pickup_code = $pickup_res->PickupCreationResponse->PRN;
//                $order->save(false);
//                $is_book = true;
//            } else {
//                $order->errors = $order->errors . '/[ups data error]' . $pickup_res->Fault->detail->Errors->ErrorDetail->PrimaryErrorCode->Description;
//                $order->save(false);
//                $re = array('status' => 0, 'message' => 'ups data error, UPS pickup cannot be booked.' . $pickup_res->Fault->detail->Errors->ErrorDetail->PrimaryErrorCode->Description);
//                echo CJSON::encode($re);
//                Yii::app()->end();
//            }
//
//        } else {
//            $is_book = true;
//        }
        $is_book = true;
        if ($is_book) {
            $imgpath = 'attache/image/L/' . $order->id;
            //   print_r($res);
            //   exit;
            $i = 0;
            while (true) {
                usleep(500000);//0.5秒
                $i++;
                $responjson = $pf->shipmentViaJson('test', $order);
                    //print_r($responjson);
                    //exit;
                if ($responjson) {
                    $html2pdf = Yii::app()->ePdf->HTML2PDF('P', 'A4', 'en', true, 'UTF-8', 0);
                    $html2pdf->SetDefaultFont('stsongstdlight');
                    $html2pdf->pdf->SetDisplayMode('fullpage');
                    $res = json_decode($responjson);
                    if ($res->ShipmentResponse->Response->ResponseStatus->Code == '1') {
                        if (!file_exists($imgpath)) {
                            mkdir($imgpath, 0777, true);
                        }

                        $order->ukcode = $res->ShipmentResponse->ShipmentResults->ShipmentIdentificationNumber;
                        $order->save(false);
                        $imgs = array();
                        if (is_array($res->ShipmentResponse->ShipmentResults->PackageResults)) {

                            foreach ($res->ShipmentResponse->ShipmentResults->PackageResults as $key => $packageResult) {
                                $order->Pacel[$key]->ems = $packageResult->TrackingNumber;
                                $order->Pacel[$key]->save(false);

                                $data = base64_decode($packageResult->ShippingLabel->GraphicImage);
                                //TrackingNumber
                                //echo '<img alt="Embedded Image" src="https://img-blog.csdnimg.cn/2022010618283477275.gif'.$packageResult->ShippingLabel->GraphicImage.'" />';
                                $filepath = $imgpath . '/' . $packageResult->TrackingNumber . '.gif';
                                file_put_contents($filepath, $data);
                                $thumb = new Imagick();
                                $thumb->readImage($filepath);
                                $thumb->resizeImage(1200, 686, Imagick::FILTER_LANCZOS, 1);
                                $thumb->writeImage($filepath);
                                $thumb->clear();
                                $thumb->destroy();
                                array_push($imgs, $filepath);
                            }
                        } else {
                            $order->Pacel[0]->ems = $res->ShipmentResponse->ShipmentResults->PackageResults->TrackingNumber;
                            $data = base64_decode($res->ShipmentResponse->ShipmentResults->PackageResults->ShippingLabel->GraphicImage);
                            $filepath = $imgpath . '/' . $res->ShipmentResponse->ShipmentResults->PackageResults->TrackingNumber . '.gif';
                            file_put_contents($filepath, $data);
                            $thumb = new Imagick();
                            $thumb->readImage($filepath);
                            $thumb->resizeImage(1200, 686, Imagick::FILTER_LANCZOS, 1);
                            $thumb->writeImage($filepath);
                            $thumb->clear();
                            $thumb->destroy();
                            array_push($imgs, $filepath);
                            //array_push($imgs, $res->ShipmentResponse->ShipmentResults->PackageResults->ShippingLabel->GraphicImage);
                            //echo '<img alt="Embedded Image" src="https://img-blog.csdnimg.cn/2022010618283477275.gif'.$res->ShipmentResponse->ShipmentResults->PackageResults->ShippingLabel->GraphicImage.'" />';
                        }

                        $upslabels = array();
                        $upslabels['img'] = $imgs;
                        //  print_r($labels);
                        //  exit;

                        $html2pdf->writeHTML($this->renderPartial('/label/ups', array('labels' => $upslabels), true));
                        $filename = $order->ukcode . '.pdf';
                        $html2pdf->Output($path . $filename, 'F');
                        $files[] = $path . $filename;
                        break;

                    } else {
                        if ($res->Fault) {
                            // print_r($res->Fault);
                            $order->errors = $order->errors . '/[ups data error]' . $res->Fault->detail->Errors->ErrorDetail->PrimaryErrorCode->Description;
                            $order->save(false);
                            $re = array('status' => 0, 'message' => 'ups data error, UPS label cannot be created.');
                            echo CJSON::encode($re);
                            Yii::app()->end();
                            //echo '/[ups data error]'.$res->Fault->detail->Errors->ErrorDetail->PrimaryErrorCode->Description;
                        }


                    }
                    exit();
                }

                if ($i == 20) {
                    $order->errors = $order->errors . '/[ups server connect error]';
                    $order->save(false);
                    //echo '/[ups server connect error]';
                    $re = array('status' => 0, 'message' => 'ups server connect error, UPS label cannot be created.');
                    echo CJSON::encode($re);
                    Yii::app()->end();
                }
            }
        }

        print_r($files);exit;

    }

    public function actionPdfBToZip(){

        $invoiceB = Invoiceb::model()->findAll();

        $files = [];

        foreach($invoiceB as $item){

            if($item->path && file_exists($item->path)){

                $files[] = $item->path;
            }
        }

        $path = 'attache/'.time().'.zip';

        $zip = new ZipArchive();

        $res = $zip->open($path, ZipArchive::CREATE);

        if ($res === TRUE) {


            foreach ($files as $file) {

                //这里直接用原文件的名字进行打包,也可以直接命名,需要注意如果文件名字一样会导致后面文件覆盖前面的文件,所以建议重新命名

                $new_filename = substr($file, strrpos($file, '/') + 1);
                $zip->addFile($file, $new_filename);

            }

        }

//关闭文件

        $zip->close();
        echo $path;

    }
    public function actionPdfToZip(){

        $invoice = Invoice::model()->findAll();

        $files = [];

        foreach($invoice as $item){

            if($item->path && file_exists($item->path)){

                $files[] = $item->path;
            }
        }

        $path = 'attache/'.time().'.zip';

        $zip = new ZipArchive();

        $res = $zip->open($path, ZipArchive::CREATE);

        if ($res === TRUE) {


            foreach ($files as $file) {

                //这里直接用原文件的名字进行打包,也可以直接命名,需要注意如果文件名字一样会导致后面文件覆盖前面的文件,所以建议重新命名

                $new_filename = substr($file, strrpos($file, '/') + 1);
                $zip->addFile($file, $new_filename);

            }

        }

//关闭文件

        $zip->close();
        echo $path;

    }

    public function actionInvoiceC($id)
    {
        $invoice = Invoicec::model()->findByPk($id);

        $this->renderPartial('cinvoice',['invoice'=>$invoice]);
    }

    public function actionCHtmlToZip()
   {

      $path = 'attache/20190315/';

      if (!file_exists($path)) {
         mkdir($path, 0777, true);
      }

      $invoice = Invoicec::model()->findAll(array('condition'=>"id>=118"));

      $files = [];

      foreach($invoice as $one){

         $url = 'http://old.espost.es/'.$this->createUrl("test/invoicec",array('id'=>$one->id));

         $fileName = 'C_invoice_'.$one->id.'.pdf';

         $comment = "wkhtmltopdf --margin-bottom 20 --page-size A4 "."'$url'"." ".$path.$fileName." 2>&1";

         exec($comment);

         $files[] = $path . $fileName;

      }

      $path = 'attache/'.time().'.zip';

      $zip = new ZipArchive();

      $res = $zip->open($path, ZipArchive::CREATE);

      if ($res === TRUE) {


         foreach ($files as $file) {

            //这里直接用原文件的名字进行打包,也可以直接命名,需要注意如果文件名字一样会导致后面文件覆盖前面的文件,所以建议重新命名

            $new_filename = substr($file, strrpos($file, '/') + 1);
            $zip->addFile($file, $new_filename);

         }

      }
      //关闭文件
      $zip->close();
      echo $path;
   }

}

转载于:https://my.oschina.net/u/2423404/blog/3022919

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值