13.4. Utilidadades
13.4.7. Gerar PDF do DANFE
13.4.6. UpLoadNFe
« Anterior
13.4.8. calcICMSUFDest400
Próximo »

13.4.7. Gerar PDF do DANFE [28-08-18]

Gerar PDF do DANFE

Assinatura:

int geraPdfDANFE(string XML, string origemDadosEmissor, string quadroRecibo, string quadroFatura, string quadroISSQN, string DPEC, string separadorItem, string gravaPDF, out string msgResultado)

Descrição:

Funcionalidade gerar o PDF de XML da NF-e.

Requisitos de uso:

Personalização possíveis

         <DadosEmissor>
              <Item>
                 <cxMM>39</cxMM>                          <==== posição x em MM 
                 <cyMM>7</cyMM>                           <==== posição y em MM
                 <fonteMM>2,7</fonteMM>                   <==== tamanho do fonte em MM
                  <texto>MRM KATO ASAKURA EPP</texto>     <==== texto a ser impresso
              </Item>
           </DadosEmissor>
       <MarcaDagua>
           <Item>
                 <cxMM>100</cxMM>                // coordenada x (centro da imagem)
                 <cyMM>150</cyMM>                // coordenada y (superior)
                 <imagem>c:\logo.jpg</imagem>
                 <largMM>100</largMM>
                 <altMM>100</altMM>
            </Item>
        </MarcaDagua>

Limitação de uso:

Parâmetros:

nome tipo fluxo descrição
XML string entrada informar uma string com o XML da NF-e ou procNFe que deseja gerar o PDF.
Os arquivos que não tiver sido emitido para ambiente de produção (tpAmb = 1) e não tiver a autorização de uso quando exigido (tpEmis=1 ou 3) ou não tiver os dados do DPEC (tpEmis=5) terão a expressão SEM VALOR FISCAL no DANFE gerado.
origemDadosEmissor string entrada informar a forma de identificação do emitente, possibilidades:
sem conteúdo - se o parâmetro for informado com vazio, os dados de identificação do emissor serão obtidos do XML da NF-e;
nome de arquivo - se informado com um nome de arquivo, a imagem do arquivo informado irá ocupar o quadro de identificação do emitente. A imagem deve ser um arquivo jpg de 339 x 114 pixels que deverá ter os dados cadastrais do emitente da NF-e, pois a imagem irá ocupar todo o quadro do emissor.
impresso personalizado - se informado o literal [SEM DADOS EMITENTE], nenhum dado será impresso no quadro de identificação do emitente.
quadroRecibo string entrada informar S ou I para indicar a posição onde será gerado o quadro do Recibo de Entrega: posição [S]uperior ou posição [I]nferior
quadroFatura string entrada informar S ou N para indicar a impressão do quadro Fatura/Duplicatas, se existir informação o quadro Fatura/Duplicatas será impresso independente do valor informado.
quadroISSQN string entrada informar S ou N para indicar a impressão do quadro ISSQN, se existir informação de ISSQN o quadro ISSQN será impresso independente do valor informado.
DPEC string entrada informar o número e a data e hora de registro do DPEC quando a NF-e tiver sido emitido em contingência DPEC
separadorItem string entrada informar L ou T ou B ou Z para indicar a forma de separação dos itens de detalhes nos casos em que a linha de detalhe ocupar mais de uma linha, significado das valores: [L]inha, [T]racejado, espaço em [B]ranco, e [Z]ebrado.
Para força a geração do separador, basta informar o literal em minúsculo: [l]inha, [t]racejado, espaço em [b]ranco, e [z]ebrado
gravaPDF string entrada Gerar arquivo PDF - informar o nome do arquivo PDF que será gravado, se o conteúdo for omitido, a PDF será gerado para visualização.
A visualização do PDF só é possível se existir o Acrobat Reader instalado no equipamento.
Este parâmetro permite a seguintes personalizações:
[IMPRIMIR=n], a DLL irá enviar o PDF para impressora padrão. O n pode variar de 1 a 5;
[NFeId.PDF] -> grava arquivo com nome = chave de acesso da NF-e;
[SEM COLUNA DESCONTO] -> não gera a coluna de desconto;
[RODAPE=texto do rodape] -> imprime o "texto do rodape" informado no RODAPE;
[PASTA=nomePasta] -> indica a pasta de gravação do PDF;
[VISUALIZAR] -> indica visualização da PDF;
[ARQUIVO=nomeArquivo] -> grava o PDF com o nome indicado;
[COM FATURA] -> indica que os dados da fatura devem ser impressos em informações adicionais;
[MENSAGEM=texto da mensagem] -> imprime o "texto da mensagem" informado no corpo do DANFE;
[SEM DADOS EMITENTE] -> não imprime os dados do emitente para atender quem tem impresso personalizado;
[SEM QUADRO EMITENTE] -> não imprime os dados do emitente e nem o quadro do emitente para atender quem tem impresso personalizado;
[SumatraPDF] -> indica o uso do SumatraPDF para visualização e impressão do PDF, necessário ter o SumatraPDF na pasta da aplicação;
[vUnComDEC=n] -> permite indicar a quantidade de casas decimais do vUnCom, a quantidade de decimais deve ser informada em n que pode ser informado com um valor compreendido entre 0 a 10;
[vUnTribDEC=n] -> permite indicar a quantidade de casas decimais do vUnTrib, a quantidade de decimais deve ser informada em n que pode ser informado com um valor compreendido entre 0 a 10;
[qComDEC=n] -> permite indicar a quantidade de casas decimais do qCom, a quantidade de decimais deve ser informada em n que pode ser informado com um valor compreendido entre 0 a 4;
[qTribDEC=n] -> permite indicar a quantidade de casas decimais do qTrib, a quantidade de decimais deve ser informada em n que pode ser informado com um valor compreendido entre 0 a 4;
[SALTALINHA=string] -> permite indicar a string utilizada para indicar a quebra de linha nas informações adicionais do produto e nas informações complementares. [SALTALINHA=;] -> indica ";" como identificador de quebra de linha; [SALTALINHA=-/-] -> indica "-/-" como identificador de quebra de linha;
[MOSTRARICMSST] -> acrescenta a informação "BC ICMS-ST: 999,99 / ICMS-ST: 99,99" no detalhe do produto;
[CORSOMBREADO=cor] -> permite indicar a cor do sombreado utilizado para destaque do item do produto, a cor deve ser informada no padrão de cores da tabela de cores HTML color, ex.: [CORSOMBREADO=#808080] , a cor #808080 é a cor default utilizada pela DLL em caso de omissão ou cor inválida: darkgray= #A9A9A9; silver = #C0C0C0; lightgray = #D3D3D3, gainsboro = #DCDCDC, whitesmoke = #F5F5F5, etc.
[MENSAGEMRECIBO=mensagem] -> permite indicar o texto que será mostrado no quadro do Recibo de Entrega (canhoto);
[MarcaDagua=xml] -> permite acrescentar imagens no DANFE, informar um XML com pelo menos uma figura;
[AltQuadroRECIBO=n] -> onde n >= 18 e <= 40 - para permitir a personalização da altura do quadro do Recibo;
[DadosEmissor=xml] -> permite a personalização dos dados do emissor;
[QUADROPRODUTO] -> possibilidade de imprimir o quadro de produtos completo até o quadro de Informações Complementares, mesmo que não existam itens de produto;
[SEMDADOSVEICULOSNOVOS] -> omitir os dados do grupo de veículos novos;
[FSSEMESTAMPAFISCAL] -> não omitir o quadro de RESERVADO AO FISCO;
[COLUNAVALORTRIBUTO] -> mostrar a coluna Valor Aproximado de Tributos e campo no Grupo Total do ICMS, mesmo quando não houver informação;
[QUEBRADADOSVEICULOSNOVOS] -> inserção de quebra de linha nas informações de Veiculos Novos (grupo veicProd);
[NAOGERARZEROSICMS] -> não impressão de 0,00 e 0 do BC ICMS, VALOR ICMS e Aliq ICMS quando os valores forem zero;
[NAOGERARZEROSIPI] -> não impressão de 0,00 e 0 do VALOR IPI e Aliq IPI quando os valores forem zero;
[NAOGERARENDERECOENTREGA] -> não gerar os dados do local de entrega;
[NAOGERARENDERECORETIRADA] -> não gerar os dados do local de retirad;
[MOSTRARFCI] -> mostrar o nFCI na descrição do produto;
[SEM DIFAL] -> não gerar texto do DIFAL em informações complementares;
[nFat+nDup] - possibilidade de mostrar o nFat + nDup concatenado;
[sem uTrib] - possibilidade de omitir o uTrib quando uTrib diferente de uCom;
msgResultado string saída retorna a literal do resultado da chamada do WS.


Exemplos de parâmetros gravaPDF"

gravaPDF = "nomeArquivo.pdf"

Efeito - gera um PDF com nomeArquivo.pdf

gravaPDF = "[RODAPE=Powered by NFe_Util.dll - FlexDocs Documentos Eletronicos - (C) 2011 - Todos os direitos reservados.][VISUALIZAR][IMPRIMIR=1][ARQUIVO=TESTE.PDF][PASTA=C:\]";

Efeito - gera um PDF TESTE.PDF na pasta c:\ que tem a mensagem "Powered by NFe_Util.dll - FlexDocs Documentos Eletronicos - (C) 2011 - Todos os direitos reservados." no rodapé, além de imprimir uma via na impressora padrão e oferecer a visualização do DANFE.

gravaPDF = "[ARQUIVO=" + nomeArquivo + "][PASTA" + pasta + "][IMPRIMIR=" + copias + "]"

Efeito - gera um arquivo com o nome contido em nomeArquivo na pasta informada em pasta e imprime a quatidade cópias informada em copias


Retorno:

O resultado da chamada é um valor inteiro com um dos seguintes códigos:

código Mensagem origem regra
7900 PDF da DANFE da NF-e: [chave da NF-e] foi gerado com sucesso DLL -
7901 PDF da DANFE da NF-e: [chave da NF-e] foi gravado com nome [valor informado] com sucesso DLL -
7911 PDF do DANFE da NF-e : [chave da NF-e] foi enviado para impressora com sucesso" DLL -
7902 Erro: Indicador de Imprimir Quadro de Recibo informado [valor informado] inválido, divergente de: [S]uperior ou [I]nferior DLL -
7903 Erro: Indicador de Imprimir Quadro de Fatura informado [valor informado inválido, divergente de: [S]im ou [N]ão DLL -
7904 Erro: Indicador de Imprimir Quadro de ISSQN informado [valor informado] inválido, divergente de: [S]im ou [N]ão DLL -
7905 Erro: Tipo Separador informado [valor informado] inválido, divergente de: [T]racejado, [L]inha, [B]ranco ou [Z]ebrado" DLL -
7906 Erro: Falha na gravação do PDF [nome arquivo], motivo da falha: [Mensagem de Erro] DLL -
7907 Erro: Falha na leitura do XML da NF-e:[Mensagem de Erro] DLL -
7908 Erro: Situação imprevista Erro do Windows:[{Mensagem de Erro] DLL -
7909 Erro: Falha no processo de tratamento do XML, examine a mensagem de erro do Windows: [Mensagem de Erro] DLL -
7910 Erro: Falha na leitura do arquivo de logo:[Mensagem de Erro] DLL -
7912 Erro: Falha no processo de impressão do PDF, examine a mensagem de erro do Windows: [Mensagem de Erro] DLL -
7913 Erro: Falha no processo de tratamento dos DadosEmissor=[conteúdo informado como DadosEmissor], examine a mensagem de erro do Windows: [Mensagem de Erro] DLL -
7914 Erro: SumatraPDF.exe inexiste na pasta da DLL: [pasta da DLL] DLL -
7915 Erro: Falha no processo de tratamento da MarcaDagua =[Mensagem de Erro], examine a mensagem de erro do Windows: [Mensagem de Erro] DLL -
7916 Erro: Arquivo de imagem:[nomeArquivoImagem] não localizado DLL -
7917 Erro: Falha na leitura do arquivo de imagem:[nomeArquivoImagem], examine a mensagem de erro do Windows: [Mensagem de Erro] DLL -

Histórico de atualização:

Exemplos:

Visual Basic

 
'
' declaração das variáveis que serão utilizadas na passagem de parâmetros da DLL
'
Dim XML As String                 ' informar o XML da NF-e da versão 2.00
Dim OrigDadosEmissor As String    ' origem dos dados do emissor
Dim quadroRecibo As String        ' posicão de impressão do quadroRecibo [S]uperior [I]nferior
Dim quadroFatura As String        ' indicador de impressão do quadro de Fatura/Duplicata
Dim quadroISSQN As String         ' indicador de impressão do quadro ISSQN
Dim DPEC As String                ' data e número do registro do DPEC
Dim separadorItem As String       ' indicador do separador de item que será utilizado quando o item ocupar mais de
                                  ' uma linha: [L]inha, [T]racejado, espaço em [B]ranco, e [Z]ebrado.
Dim gravaPDF As String            ' serve para indicar o nome do arquivo que será gravado, se o conteúdo for omitido
                                  ' o PDF será visualizado na tela; 
                                  ' informe [NFeId.PDF] para gravar um arquivo com a chave da NF-e;
                                  ' Se informado o literal [IMPRIMIR=n], a DLL irá enviar o PDF para impressora padrão,
                                  ' o n pode varia de 1 a 5.
Dim cResultado As Long            ' código deretorno da chamada da DLL
Dim msgResultado As String        ' literal com resultado da chamada da DLL

'
'
'  Importante: todas as variáveis utilizadas como parâmetro da DLL devem ser inicializadas
'
'
Dim nomeArquivo As String   ' nome do arquivo que será assinado
'
nomeArquivo = "exemplo.xml"
'
'   Carrega o conteúdo do nome do arquivo em XMLString
'
Open nomeArquivo For Input As #1
XML = Input$(LOF(1), #1)
Close #1
'
OrigDadosEmissor = ""           ' origem dos dados do emissor no XML, possibilidades:
                                '  sem conteúdo -> os dados do emissor serão obtidos do XML;
                                '  nome arquivo -> a imagem informada irá ocupar todo o quadro dados do emitente;
                                '  literal [SEM DADOS EMITENTE] -> nenhum dado será impresso no quado dados do emitente;
quadroRecibo = "S"              ' quadro do recibo no topo
quadroFatura = "S"              ' imprimir o quadro de Fatura/Duplicatas
quadroISSQN = "S"               ' imprimir o quadro de ISSQN
DPEC = ""                       ' informar quando a NF-e tiver sido emitido em contingência DPEC
separadorItem = "T"             ' traço para separar o item quando o item ocupar mais de uma linha
gravaPDF = ""                   ' informar o nome do arquivo do PDF.
                                ' Se informado o literal [NFeId.PDF] a DLL irá gravar o PDF identificado com o chave de acesso da NF-e.
                                ' A omissão do nome gera uma visualização em tela.
                                '-----------------------------------------------------
                                'NOVO***NOVO***NOVO***NOVO
                                ' Parâmetro gravaPDF, valores válidos:
                                ' nomeArquivo -> grava PDF com nomeArquivo se existir apenas o nomeArquivo no parâmetro;
                                ' [NFeId.PDF] -> grava arquivo com nome = chave de acesso da NF-e;
                                ' [SEM COLUNA DESCONTO] -> não gera a coluna de desconto;
                                ' [RODAPE=texto do rodape] -> imprime o "texto do rodape" informado no RODAPE;
                                ' [PASTA=] -> indica a pasta de gravação do PDF;
                                ' [VISUALIZAR] -> indica visualização da PDF;
                                ' [ARQUIVO=nomeArquivo] -> grava o PDF com o nome indicado;
                                ' [COM FATURA] -> indica que os dados da fatura devem ser impressos em informações adicionais;
                                ' [MENSAGEM=texto da mensagem] -> imprime o "texto da mensagem" informado no corpo do DANFE;
                                '

cResultado = 0
msgResultado = ""
'
' instancia a DLL - late binding
'
Dim objNFeUtil As Object
'
Set objNFeUtil = CreateObject("NFe_Util_2G.util")
'
' chama DLL
'
cResultado = objNFeUtil.geraPdfDANFE(XML, OrigDadosEmissor, quadroRecibo, quadroFatura, quadroISSQN, DPEC, separadorItem, gravaPDF, msgResultado)
'
'  tratar retorno
'
If resultado < 7902 Then            ' sucesso, conversão OK

MsgBox msgResultado, vbInformation, "Informação"
 
Else
'

MsgBox "Processo de geração do PDF falhou..." & vbCrLf & msgResultado, vbExclamation, "Atenção"
 
End If
'
'  liberar DLL
'
Set objNFeUtil = Nothing

Delphi

 
procedure TForm1.Button6Click(Sender: TObject);
 
var
 
 Util: OleVariant;
 
 j:integer;
 cResultado : integer;
 nomeArquivo : widestring;
 XML : widestring;
 origemDadosEmissor : widestring;
 quadroRecibo : widestring;
 quadroFatura : widestring;
 quadroISSQN : widestring;
 DPEC : widestring;
 separadorItem : widestring;
 gravaPDF : widestring;
 msgResultado : widestring;
 
 
begin
 
 nomeArquivo := 'c:\nota.xml';
 XML := '';
 origemDadosEmissor := '';
 quadroRecibo := 'S';
 quadroFatura := 'N';
 quadroISSQN := 'N';
 DPEC := '';
 separadorItem := 'B';
 gravaPDF := '[VISUALIZAR][RODAPE=texto do rodape]';
 msgResultado := '';
 cResultado := 0;
 
  Util := CreateOleObject('NFe_Util_2G.util');
 
  // ler arquivo XML
  //string LeArquivoANSI(string nomeArquivo, out int cResultado, out string msgResultado);
 
    XML := Util.LeArquivoANSI(nomeArquivo, cResultado, msgResultado);
 
    if cResultado=7330 then
       begin
 
          Set8087CW($133f); // para evitar o erro de overflow do .NET
 
          cResultado := Util.geraPdfDANFE(XML, origemDadosEmissor, quadroRecibo, quadroFatura, quadroISSQN, DPEC, separadorItem, gravaPDF, msgResultado);
          if (cResultado <> 7900) and (cResultado<> 7901) and (cResultado <> 7911) then
              MessageDlg( msgResultado, mtInformation, [mbOk], 0);
       end
    else
       MessageDlg( msgResultado, mtInformation, [mbOk], 0);
end;
13.4.7. Gerar PDF do DANFE
13.4. Utilidadades
« Anterior
13.4.6. UpLoadNFe
Próximo »
13.4.8. calcICMSUFDest400