/**
  * @param \PhpSigep\Model\VerificaDisponibilidadeServico $params
  * @return Result<\PhpSigep\Model\VerificaDisponibilidadeServicoResposta>
  */
 public function execute(\PhpSigep\Model\VerificaDisponibilidadeServico $params)
 {
     $servicosDePostagem = $params->getServicos();
     $codigoDosServicos = array_map(array($this, 'arrayMapCallback'), $servicosDePostagem);
     $soapArgs = array('codAdministrativo' => $params->getAccessData()->getCodAdministrativo(), 'numeroServico' => implode(',', $codigoDosServicos), 'cepOrigem' => $params->getCepOrigem(), 'cepDestino' => $params->getCepDestino(), 'usuario' => $params->getAccessData()->getUsuario(), 'senha' => $params->getAccessData()->getSenha());
     $cacheKey = md5(serialize($soapArgs));
     $cache = Bootstrap::getConfig()->getCacheInstance();
     if ($cachedResult = $cache->getItem($cacheKey)) {
         return unserialize($cachedResult);
     }
     $r = SoapClientFactory::getSoapClient()->verificaDisponibilidadeServico($soapArgs);
     $errorCode = null;
     $errorMsg = null;
     $result = new Result();
     if (!$r) {
         $errorCode = 0;
     } else {
         if ($r instanceof \SoapFault) {
             $errorCode = $r->getCode();
             $errorMsg = SoapClientFactory::convertEncoding($r->getMessage());
             $result->setSoapFault($r);
         } else {
             if ($r instanceof \stdClass && property_exists($r, 'return')) {
                 $result->setResult(new VerificaDisponibilidadeServicoResposta(array('disponivel' => (bool) $r->return)));
                 $cache->setItem($cacheKey, serialize($result));
             } else {
                 $errorCode = 0;
                 $errorMsg = "A resposta do Correios não está no formato esperado.";
             }
         }
     }
     $result->setErrorCode($errorCode);
     $result->setErrorMsg($errorMsg);
     return $result;
 }
 public static function getSoapCalcPrecoPrazo()
 {
     if (!self::$_soapCalcPrecoPrazo) {
         $wsdl = Bootstrap::getConfig()->getWsdlCalcPrecoPrazo();
         self::$_soapCalcPrecoPrazo = new \SoapClient($wsdl, array("trace" => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, "exceptions" => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, 'encoding' => self::WEB_SERVICE_CHARSET, 'connection_timeout' => 60));
     }
     return self::$_soapCalcPrecoPrazo;
 }
 /**
  * Atalho para criar uma {@link AccessData} com os dados do ambiente de homologação.
  */
 public function __construct()
 {
     parent::__construct(array('usuario' => 'sigep', 'senha' => 'n5f9t8', 'codAdministrativo' => '08082650', 'numeroContrato' => '9912208555', 'cartaoPostagem' => '0057018901', 'cnpjEmpresa' => '34028316000103', 'anoContrato' => null, 'diretoria' => new Diretoria(Diretoria::DIRETORIA_DR_BRASILIA)));
     try {
         \PhpSigep\Bootstrap::getConfig()->setEnv(\PhpSigep\Config::ENV_DEVELOPMENT);
     } catch (\Exception $e) {
     }
 }
 public static function getSoapCalcPrecoPrazo()
 {
     if (!self::$_soapCalcPrecoPrazo) {
         $wsdl = Bootstrap::getConfig()->getWsdlCalcPrecoPrazo();
         self::$_soapCalcPrecoPrazo = new \SoapClient($wsdl, array("trace" => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, "exceptions" => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, 'encoding' => self::WEB_SERVICE_CHARSET, 'connection_timeout' => 60, 'stream_context' => stream_context_create(array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true)))));
     }
     return self::$_soapCalcPrecoPrazo;
 }
Esempio n. 5
0
 public static function getRastreioObjetos()
 {
     if (!self::$_soapRastrearObjetos) {
         $wsdl = Bootstrap::getConfig()->getWsdlRastrearObjetos();
         $opts = array('ssl' => array('ciphers' => 'RC4-SHA', 'verify_peer' => false, 'verify_peer_name' => false));
         // SOAP 1.1 client
         $params = array('encoding' => self::WEB_SERVICE_CHARSET, 'verifypeer' => false, 'verifyhost' => false, 'soap_version' => SOAP_1_1, 'trace' => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, 'exceptions' => Bootstrap::getConfig()->getEnv() != Config::ENV_PRODUCTION, "connection_timeout" => 180, 'stream_context' => stream_context_create($opts));
         self::$_soapRastrearObjetos = new \SoapClient($wsdl, $params);
     }
     return self::$_soapRastrearObjetos;
 }
Esempio n. 6
0
 /**
  * @param \PhpSigep\Model\CalcPrecoPrazo $params
  *
  * @throws Exception
  * @throws \Exception
  * @return Result<\PhpSigep\Model\CalcPrecoPrazoRespostaIterator[]>
  */
 public function execute(\PhpSigep\Model\CalcPrecoPrazo $params)
 {
     $larguraMinima = 0;
     $alturaMinima = 0;
     $comprimentoMinimo = 16;
     $diametroMinimo = 0;
     $tipoEmbalagem = $params->getDimensao()->getTipo();
     $ehEnvelope = false;
     if ($tipoEmbalagem == Dimensao::TIPO_ENVELOPE) {
         $ehEnvelope = true;
         $formatoEncomenda = 3;
         $larguraMinima = 11;
     } else {
         if ($tipoEmbalagem == Dimensao::TIPO_PACOTE_CAIXA) {
             $formatoEncomenda = 1;
             $alturaMinima = 2;
             $larguraMinima = 11;
         } else {
             if ($tipoEmbalagem == Dimensao::TIPO_ROLO_CILINDRO) {
                 $formatoEncomenda = 2;
                 $comprimentoMinimo = 18;
                 $diametroMinimo = 5;
             } else {
                 throw new Exception('Tipo de embalagem "' . $tipoEmbalagem . '" não reconhecido.');
             }
         }
     }
     $maoPropria = false;
     $valorDeclarado = 0;
     $avisoRecebimento = false;
     $servicosAdicionais = $params->getServicosAdicionais();
     $servicosAdicionais = $servicosAdicionais ? $servicosAdicionais : array();
     foreach ($servicosAdicionais as $servicoAdicional) {
         if ($servicoAdicional->is(ServicoAdicional::SERVICE_MAO_PROPRIA)) {
             $maoPropria = true;
         } else {
             if ($servicoAdicional->is(ServicoAdicional::SERVICE_VALOR_DECLARADO)) {
                 if (!$servicoAdicional->getValorDeclarado()) {
                     throw new Exception('Para usar o serviço "valor declarado" é necessário declarar o valor da mercadoria.');
                 }
                 $valorDeclarado = $servicoAdicional->getValorDeclarado();
             } else {
                 if ($servicoAdicional->is(ServicoAdicional::SERVICE_AVISO_DE_RECEBIMENTO)) {
                     $avisoRecebimento = true;
                 }
             }
         }
     }
     $servivosDePostagem = array();
     /** @var $servivoDePostagem ServicoDePostagem */
     foreach ($params->getServicosPostagem() as $servivoDePostagem) {
         $servivosDePostagem[] = $servivoDePostagem->getCodigo();
     }
     $ajustarDimensaoMinima = $params->getAjustarDimensaoMinima();
     $comprimento = (int) $params->getDimensao()->getComprimento();
     $comprimento = $comprimento < $comprimentoMinimo && $ajustarDimensaoMinima ? $comprimentoMinimo : $comprimento;
     $altura = $ehEnvelope ? 0 : (int) $params->getDimensao()->getAltura();
     $altura = $altura < $alturaMinima && $ajustarDimensaoMinima ? $alturaMinima : $altura;
     $largura = (int) $params->getDimensao()->getLargura();
     $largura = $largura < $larguraMinima && $ajustarDimensaoMinima ? $larguraMinima : $largura;
     $diametro = (int) $params->getDimensao()->getDiametro();
     $diametro = $diametro < $diametroMinimo && $ajustarDimensaoMinima ? $diametroMinimo : $largura;
     $soapArgs = array('nCdEmpresa' => $params->getAccessData()->getCodAdministrativo(), 'sDsSenha' => $params->getAccessData()->getSenha(), 'nCdServico' => implode(',', $servivosDePostagem), 'sCepOrigem' => str_replace('-', '', $params->getCepOrigem()), 'sCepDestino' => str_replace('-', '', $params->getCepDestino()), 'nVlPeso' => $params->getPeso(), 'nCdFormato' => $formatoEncomenda, 'nVlComprimento' => $comprimento, 'nVlAltura' => $altura, 'nVlLargura' => $largura, 'nVlDiametro' => $diametro, 'sCdMaoPropria' => $maoPropria ? 'S' : 'N', 'nVlValorDeclarado' => $valorDeclarado, 'sCdAvisoRecebimento' => $avisoRecebimento ? 'S' : 'N');
     $cacheKey = md5(serialize($soapArgs));
     $cache = Bootstrap::getConfig()->getCacheInstance();
     if ($cachedResult = $cache->getItem($cacheKey)) {
         return unserialize($cachedResult);
     }
     $result = new Result();
     try {
         $r = SoapClientFactory::getSoapCalcPrecoPrazo()->calcPrecoPrazo($soapArgs);
     } catch (\Exception $e) {
         $message = $e->getMessage();
         if ($message == 'Service Unavailable') {
             if (!self::$calcPrecosPrazosServiceUnavailable) {
                 //Tenta mais uma vez
                 self::$calcPrecosPrazosServiceUnavailable = true;
                 sleep(1);
                 return $this->calcPrecoPrazo($params);
             }
         }
         if ($e instanceof \SoapFault) {
             $result->setIsSoapFault(true);
             $result->setErrorCode($e->getCode());
             $result->setErrorMsg(SoapClientFactory::convertEncoding($e->getMessage()));
         } else {
             $result->setErrorCode($e->getCode());
             $result->setErrorMsg($e->getMessage());
         }
     }
     //        if (class_exists('\StaLib_Logger')) {
     //            \StaLib_Logger::log('Retorno SIGEP: ' . print_r($r, true));
     //        }
     $retorno = array();
     if (is_object($r) && $r->CalcPrecoPrazoResult && is_object($r->CalcPrecoPrazoResult) && $r->CalcPrecoPrazoResult->Servicos && is_object($r->CalcPrecoPrazoResult->Servicos)) {
         if ($r->CalcPrecoPrazoResult->Servicos->cServico) {
             $servicos = $r->CalcPrecoPrazoResult->Servicos->cServico;
             $servicos = is_array($servicos) ? $servicos : array($servicos);
             foreach ($servicos as $servico) {
                 $valor = (double) str_replace(',', '.', str_replace('.', '', $servico->Valor));
                 $valorMaoPropria = str_replace('.', '', $servico->ValorMaoPropria);
                 $valorMaoPropria = (double) str_replace(',', '.', $valorMaoPropria);
                 $valorAvisoRecebimento = str_replace('.', '', $servico->ValorAvisoRecebimento);
                 $valorAvisoRecebimento = (double) str_replace(',', '.', $valorAvisoRecebimento);
                 $valorValorDeclarado = str_replace('.', '', $servico->ValorValorDeclarado);
                 $valorValorDeclarado = (double) str_replace(',', '.', $valorValorDeclarado);
                 $item = new \PhpSigep\Model\CalcPrecoPrazoResposta(array('servico' => new \PhpSigep\Model\ServicoDePostagem($servico->Codigo), 'valor' => $valor, 'prazoEntrega' => (int) $servico->PrazoEntrega, 'valorMaoPropria' => $valorMaoPropria, 'valorAvisoRecebimento' => $valorAvisoRecebimento, 'valorValorDeclarado' => $valorValorDeclarado, 'entregaDomiciliar' => $servico->EntregaDomiciliar == 'S', 'entregaSabado' => $servico->EntregaSabado == 'S'));
                 $item->setErroCodigo($servico->Erro);
                 if ($item->getErroCodigo() && ($item->getErroCodigo() != 10 || !$item->getValor())) {
                     // Se entrar aqui significa que tem Erro e que esse Erro é diferente de 10 ou o Erro é 10 mas não
                     // não foi retornando o Valor.
                     // O erro "10" é mais um aviso do que um erro. Se for erro 10 e tiver valor, não considera um erro.
                     $msgErro = $servico->MsgErro;
                     $msgErro = SoapClientFactory::convertEncoding($msgErro);
                     $item->setErroMsg($msgErro);
                 } else {
                     $item->setErroCodigo(null);
                 }
                 $retorno[] = $item;
             }
         } else {
             $result->setErrorCode(0);
             $result->setErrorMsg('A resposta do Correios não está no formato esperado. Detalhes do problema: "Faltando a entrada \'cServico\'."');
         }
     } else {
         $result->setErrorCode(0);
         if (is_object($r)) {
             $result->setErrorMsg('A resposta do Correios não está no formato esperado. Detalhes do problema: "A resposta recebida é um objeto, mas este objeto não possui todos as entradas necessárias."');
         } else {
             $result->setErrorMsg('A resposta do Correios não está no formato esperado. Resposta recebida: "' . $r . '"');
         }
     }
     $retornoIterator = new \PhpSigep\Model\CalcPrecoPrazoRespostaIterator($retorno);
     $result->setResult($retorno);
     if (!$result->hasError()) {
         if ($retornoIterator->todosTemErro()) {
             $erros = array();
             /** @var $retItem \PhpSigep\Model\CalcPrecoPrazoResposta */
             foreach ($retornoIterator as $retItem) {
                 $erros[$retItem->getErroCodigo()] = $retItem;
             }
             /** @var $exception \PhpSigep\Model\CalcPrecoPrazoResposta */
             $exception = null;
             $errosPrioritarios = array('999', '-3', '-2', '-4', '-33', '7');
             foreach ($errosPrioritarios as $erroPrioritario) {
                 if (isset($erros[$erroPrioritario])) {
                     $exception = $erros[$erroPrioritario];
                     break;
                 }
             }
             if (!$exception) {
                 $exception = reset($erros);
             }
             $result->setErrorCode($exception->getErroCodigo());
             $result->setErrorMsg($exception->getErroMsg());
         } else {
             $cache->setItem($cacheKey, serialize($result));
         }
     }
     return $result;
 }
<?php

// Altera as configurações do PHP para mostrar todos os erros, já que este é apenas um script de exemplo.
// No seu ambiente de produção, você não vai precisar alterar estas configurações.
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('error_reporting', 'E_ALL|E_STRICT');
error_reporting(E_ALL);
header('Content-Type: text/html; charset=utf-8');
$autoload = __DIR__ . '/../vendor/autoload.php';
if (file_exists($autoload)) {
    require_once $autoload;
}
if (!class_exists('PhpSigepFPDF')) {
    throw new RuntimeException('Não encontrei a classe PhpSigepFPDF. Execute "php composer.phar install" ou baixe o projeto ' . 'https://github.com/stavarengo/php-sigep-fpdf manualmente e adicione a classe no seu path.');
}
// Configura o php-sigep
// Se você não usou o composer é necessário carregar o script Boostrap.php manualmente.
// Caso você tenha usado o composer o Bootstrap PHP será carregado automáticamente pelo autoload (quando necessário).
require_once __DIR__ . '/../src/PhpSigep/Bootstrap.php';
$accessDataParaAmbienteDeHomologacao = new \PhpSigep\Model\AccessDataHomologacao();
$config = new \PhpSigep\Config();
$config->setAccessData($accessDataParaAmbienteDeHomologacao);
$config->setEnv(\PhpSigep\Config::ENV_PRODUCTION);
$config->setCacheOptions(array('storageOptions' => array('enabled' => false, 'ttl' => 10, 'cacheDir' => sys_get_temp_dir())));
\PhpSigep\Bootstrap::start($config);
Esempio n. 8
0
 private function _render($dest = '', $filename = '')
 {
     $un = 72 / 25.4;
     $wFourAreas = $this->pdf->w;
     $hFourAreas = $this->pdf->h;
     //-Menos 1.5CM porque algumas impressoras não conseguem imprimir nos ultimos 1cm da página
     $tMarginFourAreas = 0;
     $rMarginFourAreas = 0;
     $bMarginFourAreas = 0;
     $lMarginFourAreas = 0;
     $wInnerFourAreas = $wFourAreas - $lMarginFourAreas - $rMarginFourAreas;
     $hInnerFourAreas = 0;
     $margins = array(array('l' => $lMarginFourAreas, 'r' => $wFourAreas - $rMarginFourAreas, 't' => $tMarginFourAreas, 'b' => $hFourAreas - $bMarginFourAreas), array('l' => $wFourAreas + $lMarginFourAreas, 'r' => $wFourAreas * 2 - $rMarginFourAreas, 't' => $tMarginFourAreas, 'b' => $hFourAreas - $bMarginFourAreas), array('l' => $lMarginFourAreas, 'r' => $wFourAreas - $rMarginFourAreas, 't' => $hFourAreas + $tMarginFourAreas, 'b' => $hFourAreas * 2 - $bMarginFourAreas), array('l' => $wFourAreas + $lMarginFourAreas, 'r' => $wFourAreas * 2 - $rMarginFourAreas, 't' => $hFourAreas + $tMarginFourAreas, 'b' => $hFourAreas * 2 - $bMarginFourAreas));
     $objetosPostais = $this->plp->getEncomendas();
     $total = count($objetosPostais);
     while (count($objetosPostais)) {
         $this->pdf->AddPage();
         if (Bootstrap::getConfig()->getSimular()) {
             $this->pdf->SetFont('Arial', 'B', 50);
             $this->pdf->SetTextColor(240, 240, 240);
             $this->pdf->SetXY($lMarginFourAreas, $hFourAreas - $this->pdf->getLineHeigth());
             $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C');
             $this->pdf->SetXY($lMarginFourAreas, $margins[2]['t'] + $hFourAreas - $this->pdf->getLineHeigth());
             $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C');
             $this->pdf->SetTextColor(0, 0, 0);
         }
         //            $crossMargin = 50;
         //            $this->pdf->SetDrawColor(200, 200, 200);
         //            for ($lineY = $crossMargin; $lineY < $this->pdf->h - $crossMargin; $lineY += 10) {
         //                $this->pdf->Line($wFourAreas, $lineY, $wFourAreas, $lineY + 3);
         //            }
         //            for ($lineX = $crossMargin; $lineX < $this->pdf->w - $crossMargin; $lineX += 10) {
         //                $this->pdf->Line($lineX, $hFourAreas, $lineX + 3, $hFourAreas);
         //            }
         $this->pdf->SetDrawColor(0, 0, 0);
         for ($area = 0; $area < 1; $area++) {
             if (!count($objetosPostais)) {
                 break;
             }
             /** @var $objetoPostal \PhpSigep\Model\ObjetoPostal */
             $objetoPostal = array_shift($objetosPostais);
             $lPosFourAreas = $margins[$area]['l'];
             $rPosFourAreas = $margins[$area]['r'];
             $tPosFourAreas = $margins[$area]['t'];
             $bPosFourAreas = $margins[$area]['b'];
             // Logo
             $this->pdf->SetXY($lPosFourAreas, $tPosFourAreas);
             $this->setFillColor(222, 222, 222);
             $headerColWidth = $wInnerFourAreas / 3;
             $headerHeigth = 106;
             if ($this->logoFile) {
                 $this->pdf->Image($this->logoFile, 3, 0, 25);
             }
             // Chancela
             $this->pdf->SetXY(66, $this->pdf->GetY() + 3);
             $this->setFillColor(150, 150, 200);
             $wChancela = 101.5;
             $hChancela = 72.5;
             $lPosChancela = 66;
             $tPosChancela = $this->pdf->GetY();
             $servicoDePostagem = $objetoPostal->getServicoDePostagem();
             $nomeRemetente = $this->plp->getRemetente()->getNome();
             $accessData = $this->plp->getAccessData();
             switch ($servicoDePostagem->getCodigo()) {
                 case ServicoDePostagem::SERVICE_PAC_41068:
                 case ServicoDePostagem::SERVICE_PAC_41106:
                 case ServicoDePostagem::SERVICE_PAC_GRANDES_FORMATOS:
                     if ($this->layoutPac === CartaoDePostagem::TYPE_CHANCELA_PAC) {
                         $chancela = new Pac($lPosChancela, $tPosChancela, $nomeRemetente, $accessData);
                     } else {
                         $chancela = new Pac2016($lPosChancela, $tPosChancela, $nomeRemetente, $accessData);
                     }
                     break;
                 case ServicoDePostagem::SERVICE_E_SEDEX_STANDARD:
                     if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) {
                         $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_E_SEDEX, $accessData);
                     } else {
                         $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_E_SEDEX, $accessData);
                     }
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_40096:
                 case ServicoDePostagem::SERVICE_SEDEX_40436:
                 case ServicoDePostagem::SERVICE_SEDEX_40444:
                 case ServicoDePostagem::SERVICE_SEDEX_A_VISTA:
                 case ServicoDePostagem::SERVICE_SEDEX_VAREJO_A_COBRAR:
                 case ServicoDePostagem::SERVICE_SEDEX_PAGAMENTO_NA_ENTREGA:
                 case ServicoDePostagem::SERVICE_SEDEX_AGRUPADO:
                     if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) {
                         $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX, $accessData);
                     } else {
                         $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX, $accessData);
                     }
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_12:
                     if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) {
                         $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_12, $accessData);
                     } else {
                         $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_12, $accessData);
                     }
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_10:
                 case ServicoDePostagem::SERVICE_SEDEX_10_PACOTE:
                     if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) {
                         $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_10, $accessData);
                     } else {
                         $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_10, $accessData);
                     }
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_HOJE_40290:
                 case ServicoDePostagem::SERVICE_SEDEX_HOJE_40878:
                     if ($this->layoutSedex === CartaoDePostagem::TYPE_CHANCELA_SEDEX) {
                         $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_HOJE, $accessData);
                     } else {
                         $chancela = new Sedex2016($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_HOJE, $accessData);
                     }
                     break;
                 case ServicoDePostagem::SERVICE_CARTA_COMERCIAL_A_FATURAR:
                 case ServicoDePostagem::SERVICE_CARTA_REGISTRADA:
                     if ($this->layoutCarta === CartaoDePostagem::TYPE_CHANCELA_CARTA) {
                         $chancela = new Carta($lPosChancela, $tPosChancela, $nomeRemetente, $accessData);
                     } else {
                         $chancela = new Carta2016($lPosChancela, $tPosChancela, $nomeRemetente, $accessData);
                     }
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_REVERSO:
                 default:
                     $chancela = null;
                     break;
             }
             if ($chancela) {
                 $chancela->draw($this->pdf);
             }
             // Título da etiqueta
             if ($this->idPlpCorreios > 0) {
                 $lPosHeaderCol2 = $headerColWidth + $lPosFourAreas;
                 // $this->pdf->SetXY($lPosHeaderCol2, $tPosFourAreas);
                 // $this->setFillColor(200, 200, 200);
                 // $this->pdf->SetFontSize(12);
                 // $this->pdf->SetFont('', 'B');
                 // $this->t($headerColWidth, 'Cartão de Postagem', 2, 'C');
                 // Número da plp
                 $this->pdf->SetXY($lPosHeaderCol2, $tPosFourAreas + 32);
                 $this->setFillColor(150, 200, 200);
                 $this->pdf->SetFont('', '');
                 $this->pdf->SetFontSize(9);
                 $this->t($headerColWidth * 3, 'PLP: ' . $this->idPlpCorreios, 0, 'C');
             }
             // Volume
             $this->setFillColor(100, 150, 200);
             $this->pdf->SetXY(0, 30);
             $nf = (double) $objetoPostal->getDestino()->getNumeroNotaFiscal();
             if ($nf > 0) {
                 $nf = '    NF: ' . $nf;
             }
             $numeroPedido = trim($objetoPostal->getDestino()->getNumeroPedido());
             if (!empty($numeroPedido)) {
                 $numeroPedido = '    Pedido: ' . $numeroPedido;
             }
             $this->pdf->SetFontSize(7);
             $this->t($this->pdf->w, 'Volume: 1/1    ' . 'Peso(kg): ' . (double) $objetoPostal->getPeso() . $nf . $numeroPedido, 1, 'C', null);
             // Número da etiqueta
             $this->setFillColor(100, 100, 200);
             $this->pdf->SetXY(0, $this->pdf->GetY() + 1);
             $this->pdf->SetFontSize(9);
             $this->pdf->SetFont('', 'B');
             $etiquetaComDv = $objetoPostal->getEtiqueta()->getEtiquetaComDv();
             $this->t($wInnerFourAreas, $etiquetaComDv, 1, 'C');
             // Código de barras da etiqueta
             $this->setFillColor(0, 0, 0);
             $tPosEtiquetaBarCode = $this->pdf->GetY();
             $hEtiquetaBarCode = 22;
             $wEtiquetaBarCode = 78;
             $code128 = new \PhpSigep\Pdf\Script\BarCode128();
             $code128->draw($this->pdf, ($this->pdf->w - $wEtiquetaBarCode) / 2, $tPosEtiquetaBarCode, $etiquetaComDv, $wEtiquetaBarCode, $hEtiquetaBarCode);
             // Nome legivel, doc e rubrica
             //
             $this->pdf->SetFontSize(7);
             $this->pdf->SetXY(1, $this->pdf->GetY() + 23);
             $this->t(0, 'Nome Legível:___________________________________________', 1, 'L', null);
             $this->pdf->SetXY(1, $this->pdf->GetY() + 1);
             $this->t(0, 'Documento:_______________________Rubrica:_____________________', 1, 'L', null);
             // Destinatário
             $wAddressLeftCol = $this->pdf->w - 5;
             $tPosAfterNameBlock = 71;
             $t = $this->writeDestinatario($lPosFourAreas, $tPosAfterNameBlock, $wAddressLeftCol, $objetoPostal);
             $destino = $objetoPostal->getDestino();
             if ($destino instanceof \PhpSigep\Model\DestinoNacional) {
                 // Número do CEP
                 $cep = $destino->getCep();
                 $cep = preg_replace('/[^\\d]/', '', $cep);
                 $tPosCepBarCode = $t + 1;
                 // Etiqueta do CEP
                 $hCepBarCode = 22;
                 $wCepBarCode = 47;
                 $this->setFillColor(0, 0, 0);
                 $code128->draw($this->pdf, 6, $tPosCepBarCode, $cep, $wCepBarCode, $hCepBarCode);
                 $valorDeclarado = null;
                 $sSer = "";
                 foreach ($objetoPostal->getServicosAdicionais() as $servicoAdicional) {
                     if ($servicoAdicional->is(ServicoAdicional::SERVICE_AVISO_DE_RECEBIMENTO)) {
                         $temAr = true;
                         $sSer = $sSer . "01";
                     } else {
                         if ($servicoAdicional->is(ServicoAdicional::SERVICE_MAO_PROPRIA)) {
                             $temMp = true;
                             $sSer = $sSer . "02";
                         } else {
                             if ($servicoAdicional->is(ServicoAdicional::SERVICE_VALOR_DECLARADO)) {
                                 $temVd = true;
                                 $sSer = $sSer . "19";
                                 $valorDeclarado = $servicoAdicional->getValorDeclarado();
                             } else {
                                 if ($servicoAdicional->is(ServicoAdicional::SERVICE_REGISTRO)) {
                                     $temRe = true;
                                     $sSer = $sSer . "25";
                                 }
                             }
                         }
                     }
                 }
                 while (strlen($sSer) < 12) {
                     $sSer = $sSer . "00";
                 }
                 $sM2Dtext = $this->getM2Dstr($cep, $objetoPostal->getDestinatario()->getNumero(), $this->plp->getRemetente()->getCep(), $this->plp->getRemetente()->getNumero(), $etiquetaComDv, $sSer, $this->plp->getAccessData()->getCartaoPostagem(), $objetoPostal->getServicoDePostagem()->getCodigo(), $valorDeclarado, $objetoPostal->getDestinatario()->getTelefone());
                 require_once 'Semacode.php';
                 $semacode = new \Semacode();
                 $semaCodeGD = $semacode->asGDImage($sM2Dtext);
                 $this->setFillColor(222, 222, 222);
                 $this->pdf->gdImage($semaCodeGD, 35, 3, 25);
                 imagedestroy($semaCodeGD);
             }
             $this->writeRemetente(0, $this->pdf->GetY() + $hCepBarCode + 5, $wAddressLeftCol, $this->plp->getRemetente());
         }
     }
     if ($dest == 'S') {
         return $this->pdf->Output($filename, $dest);
     } else {
         $this->pdf->Output($filename, $dest);
     }
 }
 private function addPage()
 {
     $pdf = $this->pdf;
     $pdf->AddPage();
     if (Bootstrap::getConfig()->getSimular()) {
         $this->pdf->SetFont('Arial', 'B', 50);
         $this->pdf->SetTextColor(200, 200, 200);
         $hInner = $pdf->h - $pdf->tMargin - $pdf->bMargin;
         $lineHeigth = $pdf->getLineHeigth();
         $pdf->SetY($hInner / 2 - $lineHeigth / 2);
         $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C');
         $this->pdf->SetTextColor(0, 0, 0);
     }
     $pdf->x = $pdf->lMargin;
     $pdf->y = $pdf->tMargin;
 }
 private function _render()
 {
     $un = 72 / 25.4;
     $wFourAreas = $this->pdf->w / 2;
     $hFourAreas = ($this->pdf->h - $un * 15) / 2;
     //-Menos 1.5CM porque algumas impressoras não conseguem imprimir nos ultimos 1cm da página
     $tMarginFourAreas = $un * 5;
     $rMarginFourAreas = $un * 5;
     $bMarginFourAreas = $un * 5;
     $lMarginFourAreas = $un * 5;
     $wInnerFourAreas = $wFourAreas - $lMarginFourAreas - $rMarginFourAreas;
     $hInnerFourAreas = $hFourAreas - $tMarginFourAreas - $bMarginFourAreas;
     $margins = array(array('l' => $lMarginFourAreas, 'r' => $wFourAreas - $rMarginFourAreas, 't' => $tMarginFourAreas, 'b' => $hFourAreas - $bMarginFourAreas), array('l' => $wFourAreas + $lMarginFourAreas, 'r' => $wFourAreas * 2 - $rMarginFourAreas, 't' => $tMarginFourAreas, 'b' => $hFourAreas - $bMarginFourAreas), array('l' => $lMarginFourAreas, 'r' => $wFourAreas - $rMarginFourAreas, 't' => $hFourAreas + $tMarginFourAreas, 'b' => $hFourAreas * 2 - $bMarginFourAreas), array('l' => $wFourAreas + $lMarginFourAreas, 'r' => $wFourAreas * 2 - $rMarginFourAreas, 't' => $hFourAreas + $tMarginFourAreas, 'b' => $hFourAreas * 2 - $bMarginFourAreas));
     $objetosPostais = $this->plp->getEncomendas();
     $total = count($objetosPostais);
     while (count($objetosPostais)) {
         $this->pdf->AddPage();
         if (Bootstrap::getConfig()->getSimular()) {
             $this->pdf->SetFont('Arial', 'B', 50);
             $this->pdf->SetTextColor(240, 240, 240);
             $this->pdf->SetXY($lMarginFourAreas, $hFourAreas / 2 - $this->pdf->getLineHeigth() / 2);
             $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C');
             $this->pdf->SetXY($lMarginFourAreas, $margins[2]['t'] + $hFourAreas / 2 - $this->pdf->getLineHeigth() / 2);
             $this->pdf->MultiCellXp($this->pdf->w - $this->pdf->lMargin - $this->pdf->rMargin, "Simulação Documento sem valor", null, 0, 'C');
             $this->pdf->SetTextColor(0, 0, 0);
         }
         $crossMargin = 50;
         $this->pdf->SetDrawColor(200, 200, 200);
         for ($lineY = $crossMargin; $lineY < $this->pdf->h - $crossMargin; $lineY += 10) {
             $this->pdf->Line($wFourAreas, $lineY, $wFourAreas, $lineY + 3);
         }
         for ($lineX = $crossMargin; $lineX < $this->pdf->w - $crossMargin; $lineX += 10) {
             $this->pdf->Line($lineX, $hFourAreas, $lineX + 3, $hFourAreas);
         }
         $this->pdf->SetDrawColor(0, 0, 0);
         for ($area = 0; $area < 4; $area++) {
             if (!count($objetosPostais)) {
                 break;
             }
             /** @var $objetoPostal \PhpSigep\Model\ObjetoPostal */
             $objetoPostal = array_shift($objetosPostais);
             $lPosFourAreas = $margins[$area]['l'];
             $rPosFourAreas = $margins[$area]['r'];
             $tPosFourAreas = $margins[$area]['t'];
             $bPosFourAreas = $margins[$area]['b'];
             // Logo
             $this->pdf->SetXY($lPosFourAreas, $tPosFourAreas);
             $this->setFillColor(222, 222, 222);
             $headerColWidth = $wInnerFourAreas / 3;
             $headerHeigth = 106;
             if ($this->logoFile) {
                 $this->pdf->Image($this->logoFile);
             }
             $this->pdf->Line($lPosFourAreas, $tPosFourAreas, $lPosFourAreas, $bPosFourAreas);
             $this->pdf->Line($lPosFourAreas, $tPosFourAreas, $rPosFourAreas, $tPosFourAreas);
             $this->pdf->Line($rPosFourAreas, $tPosFourAreas, $rPosFourAreas, $bPosFourAreas);
             $this->pdf->Line($lPosFourAreas, $bPosFourAreas, $rPosFourAreas, $bPosFourAreas);
             //				$this->t($headerColWidth, 'Logo', 0, 'C', $headerHeigth);
             $this->pdf->Line($headerColWidth + $lPosFourAreas, $tPosFourAreas, $headerColWidth + $lPosFourAreas, $tPosFourAreas + $headerHeigth);
             $this->pdf->Line($lPosFourAreas, $tPosFourAreas + $headerHeigth, $lPosFourAreas + $headerColWidth, $tPosFourAreas + $headerHeigth);
             // Título da etiqueta
             $lPosHeaderCol2 = $headerColWidth + $lPosFourAreas;
             $this->pdf->SetXY($lPosHeaderCol2, $tPosFourAreas);
             $this->setFillColor(200, 200, 200);
             $this->pdf->SetFontSize(15);
             $this->pdf->SetFont('', 'B');
             $this->t($headerColWidth * 2, 'Cartão de Postagem', 2, 'C');
             // Número da plp
             $this->setFillColor(150, 200, 200);
             $this->pdf->SetFont('', '');
             $this->pdf->SetFontSize(10);
             $this->t($headerColWidth * 2, $this->idPlpCorreios, 0, 'C');
             // Chancela
             $this->setFillColor(150, 150, 200);
             $wChancela = 101.5;
             $hChancela = 72.5;
             $lPosChancela = $rPosFourAreas - $wChancela;
             $bPosHeader = $tPosFourAreas + $headerHeigth;
             $tPosChancela = $bPosHeader - $hChancela;
             $this->pdf->SetXY($lPosChancela, $tPosChancela);
             //$this->t($wChancela, 'Chancela', 0, 'C', $hChancela);
             $servicoDePostagem = $objetoPostal->getServicoDePostagem();
             $nomeRemetente = $this->plp->getRemetente()->getNome();
             $accessData = $this->plp->getAccessData();
             switch ($servicoDePostagem->getCodigo()) {
                 case ServicoDePostagem::SERVICE_PAC_41068:
                 case ServicoDePostagem::SERVICE_PAC_41106:
                 case ServicoDePostagem::SERVICE_PAC_GRANDES_FORMATOS:
                     $chancela = new Pac($lPosChancela, $tPosChancela, $nomeRemetente, $accessData);
                     break;
                 case ServicoDePostagem::SERVICE_E_SEDEX_STANDARD:
                     $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_E_SEDEX, $accessData);
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_40096:
                 case ServicoDePostagem::SERVICE_SEDEX_40436:
                 case ServicoDePostagem::SERVICE_SEDEX_40444:
                 case ServicoDePostagem::SERVICE_SEDEX_A_VISTA:
                 case ServicoDePostagem::SERVICE_SEDEX_VAREJO_A_COBRAR:
                 case ServicoDePostagem::SERVICE_SEDEX_PAGAMENTO_NA_ENTREGA:
                 case ServicoDePostagem::SERVICE_SEDEX_AGRUPADO:
                     $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX, $accessData);
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_12:
                     $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_12, $accessData);
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_10:
                 case ServicoDePostagem::SERVICE_SEDEX_10_PACOTE:
                     $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_10, $accessData);
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_HOJE_40290:
                 case ServicoDePostagem::SERVICE_SEDEX_HOJE_40878:
                     $chancela = new Sedex($lPosChancela, $tPosChancela, $nomeRemetente, Sedex::SERVICE_SEDEX_HOJE, $accessData);
                     break;
                 case ServicoDePostagem::SERVICE_CARTA_COMERCIAL_A_FATURAR:
                 case ServicoDePostagem::SERVICE_CARTA_REGISTRADA:
                     $chancela = new Carta($lPosChancela, $tPosChancela, $nomeRemetente, $accessData);
                     break;
                 case ServicoDePostagem::SERVICE_SEDEX_REVERSO:
                 default:
                     $chancela = null;
                     break;
             }
             if ($chancela) {
                 $chancela->draw($this->pdf);
             }
             // Peso
             $this->setFillColor(100, 150, 200);
             $this->pdf->SetFontSize(9);
             $lineHeigth = $this->pdf->getLineHeigth(100 / $this->pdf->k);
             $this->pdf->SetXY($lPosHeaderCol2, $bPosHeader - $lineHeigth * 2);
             $this->t($lPosChancela - $lPosHeaderCol2, 'Peso: ' . (double) $objetoPostal->getPeso() . 'g', 2, 'C', $lineHeigth);
             // Volume
             $this->setFillColor(100, 150, 200);
             //				$this->t($lPosChancela - $lPosHeaderCol2, 'Volume: ' . ($total - count($objetosPostais)) . '/' . $total, 0, 'C', $lineHeigth);
             $this->t($lPosChancela - $lPosHeaderCol2, 'Volume: 1/1', 0, 'C', $lineHeigth);
             // Número da etiqueta
             $this->setFillColor(100, 100, 200);
             $this->pdf->SetXY($lPosFourAreas, $bPosHeader + 5);
             $this->pdf->SetFontSize(10);
             $this->pdf->SetFont('', 'B');
             $etiquetaComDv = $objetoPostal->getEtiqueta()->getEtiquetaComDv();
             $this->t($wInnerFourAreas, $etiquetaComDv, 1, 'C');
             // Código de barras da etiqueta
             $this->setFillColor(0, 0, 0);
             $hEtiquetaBarCode = 40;
             $tPosEtiquetaBarCode = $this->pdf->GetY();
             $wEtiquetaBarCode = $un * 65.44;
             $code128 = new \PhpSigep\Pdf\Script\BarCode128();
             $code128->draw($this->pdf, $lPosFourAreas + $wInnerFourAreas / 2 - $wEtiquetaBarCode / 2, $tPosEtiquetaBarCode, $etiquetaComDv, $wEtiquetaBarCode, $hEtiquetaBarCode);
             // Destinatário
             $wAddressLeftCol = $wInnerFourAreas / 4 * 2.2;
             $wAddressRightCol = $wInnerFourAreas - $wAddressLeftCol;
             $lAddressRigthCol = $wAddressLeftCol + $lPosFourAreas;
             $tPosAfterBarCode = $tPosEtiquetaBarCode + $hEtiquetaBarCode + 5;
             $t = $this->writeDestinatario($lPosFourAreas, $tPosAfterBarCode, $wAddressLeftCol, $objetoPostal);
             $t += $this->pdf->getLineHeigth() / 2;
             $this->writeRemetente($lPosFourAreas, $t, $wAddressLeftCol, $this->plp->getRemetente());
             $destino = $objetoPostal->getDestino();
             $hCepBarCode = 0;
             if ($destino instanceof \PhpSigep\Model\DestinoNacional) {
                 // Número do CEP
                 $cep = $destino->getCep();
                 $cep = preg_replace('/[^\\d]/', '', $cep);
                 $this->setFillColor(215, 115, 15);
                 $this->pdf->SetXY($lAddressRigthCol, $tPosAfterBarCode + 15);
                 $this->t($wAddressRightCol, $cep, 2, 'C');
                 $tPosCepBarCode = $this->pdf->GetY();
                 // Etiqueta do CEP
                 $hCepBarCode = 25;
                 $wCepBarCode = $un * 38.44;
                 $this->setFillColor(0, 0, 0);
                 $code128->draw($this->pdf, $lAddressRigthCol + $wAddressRightCol / 2 - $wCepBarCode / 2, $tPosCepBarCode, $cep, $wCepBarCode, $hCepBarCode);
             }
         }
     }
     $this->pdf->Output();
 }
 /**
  * @return \PhpSigep\Model\AccessData
  */
 public function getAccessData()
 {
     return $this->accessData ? $this->accessData : Bootstrap::getConfig();
 }