- 13.4. Utilidadades
13.4.7. Gerar PDF do DANFE [28-08-18] - 13.4.6. UpLoadNFe
« Anterior - 13.4.8. calcICMSUFDest400 [10-01-18]
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:
- Componente Report.NET, a DLL Reports.dll deve existir na mesma pasta da DLL NFe_Util.dll;
Aplicativo visualizador de PDF para fazer a visualização e impressão do PDF, opções:
- Adobe Acrobat Reader - A DLL Reports.NET pode ter problemas com versões mais recentes do Acrobat Reader, pois ela foi escrita para as versões 5/6 do Acrobat Reader.
- SumatraPDF - Este aplicativo não requer instalação no equipamento e tem a vantagem de ser compacto.
Personalização possíveis
Quadro de Identificação do Emitente
- Informação do XML - configuração padrão, as informações de identificação do emitente são obtidas no XML da NF-e;
- Impresso personalizado - uso de impresso personalizado que contenha os dados do emissor, neste caso a DLL não imprime os dados do emitente;
- Logotipo do Emissor - uso de arquivo de logotipo da empresa. O logotipo deve ser uma imagem de 339 x 114 pixels com as informações do emitente da NF-e. A figura indicada irá ocupar todo o quadro de dados do emitente, assim o logotipo deve ter as informações cadastrais do emissor como no exemplo abaixo:
Obs.: •quem desejar ter uma melhor resolução do logo, pode informar um logo com mais detalhes aumentando o tamanho da imagem, o aumento deve ser proporcional na altura e largura, ex.: dobrar a quantidade de pontos 339 x 114 -> 678 x 228.
personalização dos dados do emissor quando informar o arquivo de logo, exemplo:
Exemplo:
[DadosEmissor=<DadosEmissor><Item><cxMM>39</cxMM><cyMM>7</cyMM><fonteMM>2,7</fonteMM><texto>MRM KATO ASAKURA EPP</texto></Item><Item><cxMM>10</cxMM><cyMM>16</cyMM><fonteMM>2,5</fonteMM><texto>Av. Altino Arantes 131, 14º andar - sala 145</texto></Item><Item><cxMM>15</cxMM><cyMM>20</cyMM><fonteMM>2,2</fonteMM><texto>CEP: 19.900-030 - Centro - Ourinhos/SP</texto></Item><Item><cxMM>14</cxMM><cyMM>24</cyMM><fonteMM>2,2</fonteMM><texto>Tel: (14)-3302-1000 - fax: (14)-3302-2000</texto></Item><Item><cxMM>22</cxMM><cyMM>28</cyMM><fonteMM>2,2</fonteMM><texto>suporte@www.flexdocs.com.br</texto></Item></DadosEmissor>]
Para gerar o texto "MRM KATO ASAKURA EPP" será gerado com fonte 2,7 mm na coordenada 39mm , 7 mm do quadro dos dados do emitente, devemos informar:
<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>
- Quadro Recibo de Entrega - o quadro recibo de entrega pode ser posicionado no topo ou no rodapé do DANFE. O DANFE emitido com uso de Formulário de Segurança (FS/FS-DA) deve ter o recibo posicionado no topo;
- Omissão do Quadro FATURA / ISSQN - os quadros FATURA/ISSQN podem ser omitidos se não existirem informações para os quadros;
- Gravar PDF - possibilita a gravação do PDF do DANFE identificado com a chave de acesso da NF-e.
- Envio do PDF para a impressora - nova funcionalidade, permite o envio do PDF para impressora padrão, informar o literal [IMPRIMIR=n], a DLL irá enviar o PDF para impressora padrão. O n pode variar de 1 a 5.
- Impressão dos dados da FATURA - impressão dos dados da FATURA (número, valor original, valor do desconto e valor líquido) no quadro de informações adicionais;
- Omissão da Coluna Desconto - omissão da coluna desconto no corpo do DANFE;
- Mensagem de rodapé - impressão de mensagem de interesse do desenvolvedor no rodapé da primeira folha do DANFE;
- Mensagem no corpo do DANFE - impressão de mensagem em destaque no corpo do DANFE;
- Pasta de gravação do PDF - possibilidade de indicar a pasta de gravação do PDF;
- Impressão das observações do fisco - possibilidade de imprimir as observações do fisco no quadro de informações complementares Informar [OBSFISCO];
- Impressão das observações do contribuinte - possibilidade de imprimir as observações do contribuinte no quadro de informações complementares. Informar [OBSCONTRIBUINTE];
- Impressão de quadro de produtos completo - possibilidade de imprimir o quadro de produtos completo até o quadro de Informações Complementares, mesmo que não existam itens de produto. Informar [QUADROPRODUTO];
- Impressão do separador de item de produto; [15-05-12]
- Quebra de linha - é possível definir um caractere ou string como quebra de linha de das informações complementares e das informações adicionais do produto. O caractere ponto-e-vírgula é o caractere padrão de quebra de linha, informar [SALTALINHA=caractere ou string] caso o usuário deseje informar outro caractere ou string; [15-05-12]
- Mostrar valor e a base de cálculo do ICMS retido por Substituição tributária no formato ""BC ICMS-ST: 999,99 / ICMS-ST: 99,99"" detalhe do produto;; [15-05-12]
- Personalização da cor do sombreado; [15-05-12]
- Personalização da quantidade de casas decimais das tags vUnCom vUnTrib qCom e qTrib; [15-05-12]
- Possibilidade de uso do aplicativo SumatraPDF; [15-05-12]
- Personalizar a apresentação das informações da identificação do emissor da NF-e; [15-05-12]
- Personalização da mensagem do Recibo de Entrega (Canhoto); [15-05-12]
- Personalização da altura do quadro Recibo de Entrega (Canhoto) [AltQuadroRECIBO=n] , onde n >= 18 e <= 40 - para permitir a personalização da altura do quadro do Recibo; [25-06-12]
Possibilidade de uso de marca d´água [25-06-12] [MarcaDagua=xml], permite acrescentar imagens no DANFE, informar um XML com pelo menos um item:
[MarcaDagua=<MarcaDagua><Item><cxMM>100</cxMM><cyMM>150</cyMM><imagem>c:\logo.jpg</imagem><largMM>100</largMM><altMM>100</altMM></Item></MarcaDagua>]
estrutura do XML identado para melhor visualização
<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:
- a versão atual ainda não oferece suporte para impressão do DANFE em formato paisagem.
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:
- 2011-09-08 - 2Gv0.8- Versão preliminar.
- 2011-09-18 - 2Gv0.8a
- 2011-10-15 - 2Gv0.8b - opção de impressão do PDF
- 2011-11-03 - 2Gv0.8d - novos parâmetros de geração do DANFE
- 2012-05-15 - 2Gv0.9 - novos parâmetros de geração do DANFE
- 2012-06-25 - 2Gv0.9a - novos parâmetros de geração do DANFE
- 2013-09-29 - atualização (v1.3 e 1.4)
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 [28-08-18]
13.4. Utilidadades - « Anterior
13.4.6. UpLoadNFe - Próximo »
13.4.8. calcICMSUFDest400 [10-01-18]