protected function pCabecalhoDANFE($x = 0, $y = 0, $pag = '1', $totPag = '1')
{
$oldX = $x;
$oldY = $y;
if ($this->orientacao == 'P') {
$maxW = $this->wPrint;
} else {
if ($pag == 1) {
// primeira página
$maxW = $this->wPrint - $this->wCanhoto;
} else {
// páginas seguintes
$maxW = $this->wPrint;
}
}
//####################################################################################
//coluna esquerda identificação do emitente
$w = round($maxW * 0.41, 0);
if ($this->orientacao == 'P') {
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => 'I');
} else {
$aFont = array('font' => $this->fontePadrao, 'size' => 8, 'style' => 'B');
}
$w1 = $w;
$h = 32;
$oldY += $h;
$this->pTextBox($x, $y, $w, $h);
$texto = 'IDENTIFICAÇÃO DO EMITENTE';
$this->pTextBox($x, $y, $w, 5, $texto, $aFont, 'T', 'C', 0, '');
//estabelecer o alinhamento
//pode ser left L, center C, right R, full logo L
//se for left separar 1/3 da largura para o tamanho da imagem
//os outros 2/3 serão usados para os dados do emitente
//se for center separar 1/2 da altura para o logo e 1/2 para os dados
//se for right separa 2/3 para os dados e o terço seguinte para o logo
//se não houver logo centraliza dos dados do emitente
// coloca o logo
if (is_file($this->logomarca)) {
$logoInfo = getimagesize($this->logomarca);
//largura da imagem em mm
$logoWmm = $logoInfo[0] / 72 * 25.4;
//altura da imagem em mm
$logoHmm = $logoInfo[1] / 72 * 25.4;
if ($this->logoAlign == 'L') {
$nImgW = round($w / 3, 0);
$nImgH = round($logoHmm * ($nImgW / $logoWmm), 0);
$xImg = $x + 1;
$yImg = round(($h - $nImgH) / 2, 0) + $y;
//estabelecer posições do texto
$x1 = round($xImg + $nImgW + 1, 0);
$y1 = round($h / 3 + $y, 0);
$tw = round(2 * $w / 3, 0);
} elseif ($this->logoAlign == 'C') {
$nImgH = round($h / 3, 0);
$nImgW = round($logoWmm * ($nImgH / $logoHmm), 0);
$xImg = round(($w - $nImgW) / 2 + $x, 0);
$yImg = $y + 3;
$x1 = $x;
$y1 = round($yImg + $nImgH + 1, 0);
$tw = $w;
} elseif ($this->logoAlign == 'R') {
$nImgW = round($w / 3, 0);
$nImgH = round($logoHmm * ($nImgW / $logoWmm), 0);
$xImg = round($x + ($w - (1 + $nImgW)), 0);
$yImg = round(($h - $nImgH) / 2, 0) + $y;
$x1 = $x;
$y1 = round($h / 3 + $y, 0);
$tw = round(2 * $w / 3, 0);
} elseif ($this->logoAlign == 'F') {
$nImgH = round($h - 5, 0);
$nImgW = round($logoWmm * ($nImgH / $logoHmm), 0);
$xImg = round(($w - $nImgW) / 2 + $x, 0);
$yImg = $y + 3;
$x1 = $x;
$y1 = round($yImg + $nImgH + 1, 0);
$tw = $w;
}
$this->pdf->Image($this->logomarca, $xImg, $yImg, $nImgW, $nImgH);
} else {
$x1 = $x;
$y1 = round($h / 3 + $y, 0);
$tw = $w;
}
// monta as informações apenas se diferente de full logo
if ($this->logoAlign !== 'F') {
//Nome emitente
$aFont = array('font' => $this->fontePadrao, 'size' => 12, 'style' => 'B');
$texto = $this->emit->getElementsByTagName("xNome")->item(0)->nodeValue;
$this->pTextBox($x1, $y1, $tw, 8, $texto, $aFont, 'T', 'C', 0, '');
//endereço
$y1 = $y1 + 5;
$aFont = array('font' => $this->fontePadrao, 'size' => 8, 'style' => '');
$fone = !empty($this->enderEmit->getElementsByTagName("fone")->item(0)->nodeValue) ? $this->enderEmit->getElementsByTagName("fone")->item(0)->nodeValue : '';
$lgr = $this->pSimpleGetValue($this->enderEmit, "xLgr");
$nro = $this->pSimpleGetValue($this->enderEmit, "nro");
$cpl = $this->pSimpleGetValue($this->enderEmit, "xCpl", " - ");
$bairro = $this->pSimpleGetValue($this->enderEmit, "xBairro");
$CEP = $this->pSimpleGetValue($this->enderEmit, "CEP");
$CEP = $this->pFormat($CEP, "#####-###");
$mun = $this->pSimpleGetValue($this->enderEmit, "xMun");
$UF = $this->pSimpleGetValue($this->enderEmit, "UF");
$texto = $lgr . ", " . $nro . $cpl . "\n" . $bairro . " - " . $CEP . "\n" . $mun . " - " . $UF . " " . "Fone/Fax: " . $fone;
$this->pTextBox($x1, $y1, $tw, 8, $texto, $aFont, 'T', 'C', 0, '');
}
//####################################################################################
//coluna central Danfe
$x += $w;
$w = round($maxW * 0.17, 0);
//35;
$w2 = $w;
$h = 32;
$this->pTextBox($x, $y, $w, $h);
if (!$this->pNotaCancelada()) {
// A PRINCIPIO NÃO PRECISAVA, POIS A NFE ESTÁ AUTORIZADA,
// SÓ SE RETIRA O DANFE PARA NOTAS NÃO AUTORIZADAS
$texto = "DANFE";
$aFont = array('font' => $this->fontePadrao, 'size' => 14, 'style' => 'B');
$this->pTextBox($x, $y + 1, $w, $h, $texto, $aFont, 'T', 'C', 0, '');
$aFont = array('font' => $this->fontePadrao, 'size' => 8, 'style' => '');
$texto = 'Documento Auxiliar da Nota Fiscal Eletrônica';
$h = 20;
$this->pTextBox($x, $y + 6, $w, $h, $texto, $aFont, 'T', 'C', 0, '', false);
}
$aFont = array('font' => $this->fontePadrao, 'size' => 8, 'style' => '');
$texto = '0 - ENTRADA';
$y1 = $y + 14;
$h = 8;
$this->pTextBox($x + 2, $y1, $w, $h, $texto, $aFont, 'T', 'L', 0, '');
$texto = '1 - SAÍDA';
$y1 = $y + 17;
$this->pTextBox($x + 2, $y1, $w, $h, $texto, $aFont, 'T', 'L', 0, '');
//tipo de nF
$aFont = array('font' => $this->fontePadrao, 'size' => 12, 'style' => 'B');
$y1 = $y + 13;
$h = 7;
$texto = $this->ide->getElementsByTagName('tpNF')->item(0)->nodeValue;
$this->pTextBox($x + 27, $y1, 5, $h, $texto, $aFont, 'C', 'C', 1, '');
//numero da NF
$aFont = array('font' => $this->fontePadrao, 'size' => 10, 'style' => 'B');
$y1 = $y + 20;
$numNF = str_pad($this->ide->getElementsByTagName('nNF')->item(0)->nodeValue, 9, "0", STR_PAD_LEFT);
$numNF = $this->pFormat($numNF, "###.###.###");
$texto = "Nº. " . $numNF;
$this->pTextBox($x, $y1, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
//Série
$y1 = $y + 23;
$serie = str_pad($this->ide->getElementsByTagName('serie')->item(0)->nodeValue, 3, "0", STR_PAD_LEFT);
$texto = "Série " . $serie;
$this->pTextBox($x, $y1, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
//numero paginas
$aFont = array('font' => $this->fontePadrao, 'size' => 8, 'style' => 'I');
$y1 = $y + 26;
$texto = "Folha " . $pag . "/" . $totPag;
$this->pTextBox($x, $y1, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
//####################################################################################
//coluna codigo de barras
$x += $w;
$w = $maxW - $w1 - $w2;
//85;
$w3 = $w;
$h = 32;
$this->pTextBox($x, $y, $w, $h);
$this->pdf->SetFillColor(0, 0, 0);
$chave_acesso = str_replace('NFe', '', $this->infNFe->getAttribute("Id"));
$bW = 75;
$bH = 12;
//codigo de barras
$this->pdf->Code128($x + ($w - $bW) / 2, $y + 2, $chave_acesso, $bW, $bH);
//linhas divisorias
$this->pdf->Line($x, $y + 4 + $bH, $x + $w, $y + 4 + $bH);
$this->pdf->Line($x, $y + 12 + $bH, $x + $w, $y + 12 + $bH);
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$y1 = $y + 4 + $bH;
$h = 7;
$texto = 'CHAVE DE ACESSO';
$this->pTextBox($x, $y1, $w, $h, $texto, $aFont, 'T', 'L', 0, '');
$aFont = array('font' => $this->fontePadrao, 'size' => 8, 'style' => 'B');
$y1 = $y + 8 + $bH;
$texto = $this->pFormat($chave_acesso, $this->formatoChave);
$this->pTextBox($x + 2, $y1, $w - 2, $h, $texto, $aFont, 'T', 'C', 0, '');
$y1 = $y + 12 + $bH;
$aFont = array('font' => $this->fontePadrao, 'size' => 8, 'style' => '');
$chaveContingencia = "";
if ($this->pNotaDPEC()) {
$cabecalhoProtoAutorizacao = 'NÚMERO DE REGISTRO DPEC';
} else {
$cabecalhoProtoAutorizacao = 'PROTOCOLO DE AUTORIZAÇÃO DE USO';
}
if (($this->tpEmis == 2 || $this->tpEmis == 5) && !$this->pNotaDPEC()) {
$cabecalhoProtoAutorizacao = "DADOS DA NF-E";
$chaveContingencia = $this->pGeraChaveAdicionalDeContingencia();
$this->pdf->SetFillColor(0, 0, 0);
//codigo de barras
$this->pdf->Code128($x + 11, $y1 + 1, $chaveContingencia, $bW * 0.9, $bH / 2);
} else {
$texto = 'Consulta de autenticidade no portal nacional da NF-e';
$this->pTextBox($x + 2, $y1, $w - 2, $h, $texto, $aFont, 'T', 'C', 0, '');
$y1 = $y + 16 + $bH;
$texto = 'www.nfe.fazenda.gov.br/portal ou no site da Sefaz Autorizadora';
$this->pTextBox($x + 2, $y1, $w - 2, $h, $texto, $aFont, 'T', 'C', 0, 'http://www.nfe.fazenda.gov.br/portal ou no site da Sefaz Autorizadora');
}
//####################################################################################
//Dados da NF do cabeçalho
//natureza da operação
$texto = 'NATUREZA DA OPERAÇÃO';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$w = $w1 + $w2;
$y = $oldY;
$oldY += $h;
$x = $oldX;
$h = 7;
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'T', 'L', 1, '');
$texto = $this->ide->getElementsByTagName("natOp")->item(0)->nodeValue;
$aFont = array('font' => $this->fontePadrao, 'size' => 10, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'B', 'C', 0, '');
$x += $w;
$w = $w3;
//PROTOCOLO DE AUTORIZAÇÃO DE USO ou DADOS da NF-E
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w, $h, $cabecalhoProtoAutorizacao, $aFont, 'T', 'L', 1, '');
// algumas NFe podem estar sem o protocolo de uso portanto sua existencia deve ser
// testada antes de tentar obter a informação.
// NOTA : DANFE sem protocolo deve existir somente no caso de contingência !!!
// Além disso, existem várias NFes em contingência que eu recebo com protocolo de autorização.
// Na minha opinião, deveríamos mostra-lo, mas o manual da NFe v4.01 diz outra coisa...
if (($this->tpEmis == 2 || $this->tpEmis == 5) && !$this->pNotaDPEC()) {
$aFont = array('font' => $this->fontePadrao, 'size' => 8, 'style' => 'B');
$texto = $this->pFormat($chaveContingencia, "#### #### #### #### #### #### #### #### ####");
$cStat = '';
} else {
$aFont = array('font' => $this->fontePadrao, 'size' => 10, 'style' => 'B');
if ($this->pNotaDPEC()) {
$texto = $this->numero_registro_dpec;
$cStat = '';
} else {
if (isset($this->nfeProc)) {
$texto = !empty($this->nfeProc->getElementsByTagName("nProt")->item(0)->nodeValue) ? $this->nfeProc->getElementsByTagName("nProt")->item(0)->nodeValue : '';
$tsHora = $this->pConvertTime($this->nfeProc->getElementsByTagName("dhRecbto")->item(0)->nodeValue);
if ($texto != '') {
$texto .= " - " . date('d/m/Y H:i:s', $tsHora);
}
$cStat = $this->nfeProc->getElementsByTagName("cStat")->item(0)->nodeValue;
} else {
$texto = '';
$cStat = '';
}
}
}
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'B', 'C', 0, '');
//####################################################################################
//INSCRIÇÃO ESTADUAL
$w = round($maxW * 0.333, 0);
$y += $h;
$oldY += $h;
$x = $oldX;
$texto = 'INSCRIÇÃO ESTADUAL';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'T', 'L', 1, '');
$texto = $this->pSimpleGetValue($this->emit, "IE");
$aFont = array('font' => $this->fontePadrao, 'size' => 10, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'B', 'C', 0, '');
//INSCRIÇÃO ESTADUAL DO SUBST. TRIBUT.
$x += $w;
$texto = 'INSCRIÇÃO ESTADUAL DO SUBST. TRIBUT.';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'T', 'L', 1, '');
$texto = !empty($this->emit->getElementsByTagName("IEST")->item(0)->nodeValue) ? $this->emit->getElementsByTagName("IEST")->item(0)->nodeValue : '';
$aFont = array('font' => $this->fontePadrao, 'size' => 10, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'B', 'C', 0, '');
//CNPJ
$x += $w;
$w = $maxW - 2 * $w;
$texto = 'CNPJ';
$aFont = array('font' => $this->fontePadrao, 'size' => 6, 'style' => '');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'T', 'L', 1, '');
$texto = $this->emit->getElementsByTagName("CNPJ")->item(0)->nodeValue;
$texto = $this->pFormat($texto, "##.###.###/####-##");
$aFont = array('font' => $this->fontePadrao, 'size' => 10, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'B', 'C', 0, '');
//####################################################################################
//Indicação de NF Homologação, cancelamento e falta de protocolo
$tpAmb = $this->ide->getElementsByTagName('tpAmb')->item(0)->nodeValue;
//indicar cancelamento
if ($this->pNotaCancelada()) {
//101 Cancelamento
$x = 10;
$y = $this->hPrint - 130;
$h = 25;
$w = $maxW - 2 * $x;
$this->pdf->SetTextColor(90, 90, 90);
$texto = "NFe CANCELADA";
$aFont = array('font' => $this->fontePadrao, 'size' => 48, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
$this->pdf->SetTextColor(0, 0, 0);
}
if ($this->pNotaDPEC() || $this->tpEmis == 4) {
//DPEC
$x = 10;
$y = $this->hPrint - 130;
$h = 25;
$w = $maxW - 2 * $x;
$this->pdf->SetTextColor(200, 200, 200);
$texto = "DANFE impresso em contingência -\n" . "DPEC regularmente recebido pela Receita\n" . "Federal do Brasil";
$aFont = array('font' => $this->fontePadrao, 'size' => 48, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
$this->pdf->SetTextColor(0, 0, 0);
}
if ($this->pNotaDenegada()) {
//110 301 302 Denegada
$x = 10;
$y = $this->hPrint - 130;
$h = 25;
$w = $maxW - 2 * $x;
$this->pdf->SetTextColor(90, 90, 90);
$texto = "NFe USO DENEGADO";
$aFont = array('font' => $this->fontePadrao, 'size' => 48, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
$y += $h;
$h = 5;
$w = $maxW - 2 * $x;
if (isset($this->infProt)) {
$xMotivo = $this->infProt->getElementsByTagName("xMotivo")->item(0)->nodeValue;
} else {
$xMotivo = '';
}
$texto = "SEM VALOR FISCAL\n" . $xMotivo;
$aFont = array('font' => $this->fontePadrao, 'size' => 48, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
$this->pdf->SetTextColor(0, 0, 0);
}
//indicar sem valor
if ($tpAmb != 1) {
$x = 10;
if ($this->orientacao == 'P') {
$y = round($this->hPrint * 2 / 3, 0);
} else {
$y = round($this->hPrint / 2, 0);
}
$h = 5;
$w = $maxW - 2 * $x;
$this->pdf->SetTextColor(90, 90, 90);
$texto = "SEM VALOR FISCAL";
$aFont = array('font' => $this->fontePadrao, 'size' => 48, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
$aFont = array('font' => $this->fontePadrao, 'size' => 30, 'style' => 'B');
$texto = "AMBIENTE DE HOMOLOGAÇÃO";
$this->pTextBox($x, $y + 14, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
$this->pdf->SetTextColor(0, 0, 0);
} else {
$x = 10;
if ($this->orientacao == 'P') {
$y = round($this->hPrint * 2 / 3, 0);
} else {
$y = round($this->hPrint / 2, 0);
}
//fim orientacao
$h = 5;
$w = $maxW - 2 * $x;
$this->pdf->SetTextColor(90, 90, 90);
//indicar FALTA DO PROTOCOLO se NFe não for em contingência
if (($this->tpEmis == 2 || $this->tpEmis == 5) && !$this->pNotaDPEC()) {
//Contingência
$texto = "DANFE Emitido em Contingência";
$aFont = array('font' => $this->fontePadrao, 'size' => 48, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
$aFont = array('font' => $this->fontePadrao, 'size' => 30, 'style' => 'B');
$texto = "devido à problemas técnicos";
$this->pTextBox($x, $y + 12, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
} else {
if (!isset($this->nfeProc)) {
if (!$this->pNotaDPEC()) {
$texto = "SEM VALOR FISCAL";
$aFont = array('font' => $this->fontePadrao, 'size' => 48, 'style' => 'B');
$this->pTextBox($x, $y, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
}
$aFont = array('font' => $this->fontePadrao, 'size' => 30, 'style' => 'B');
$texto = "FALTA PROTOCOLO DE APROVAÇÃO DA SEFAZ";
if (!$this->pNotaDPEC()) {
$this->pTextBox($x, $y + 12, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
} else {
$this->pTextBox($x, $y + 25, $w, $h, $texto, $aFont, 'C', 'C', 0, '');
}
}
//fim nefProc
}
//fim tpEmis
$this->pdf->SetTextColor(0, 0, 0);
}
return $oldY;
}