11.4. Utilidadades
11.4.3. Gerar PDF do DACTE
11.4.2. Envia e-mail
« Anterior
11.4.4. Identar XML
Próximo »

11.4.3. Gerar PDF do DACTE

Gerar PDF do DACTE

Assinatura:

int geraPdfDACTE(string XML, string logo, string quadroRecibo, string visualizar, string parametros, out string msgResultado);

Descrição:

Funcionalidade gerar o PDF de XML do CT-e.

Exemplos para cumprimento "Lei da Transparência"

Optando o contribuinte pela informação dos valores aproximados dos tributos no documento fiscal, o "Valor Aproximado dos Tributos" calculado pela empresa (vTotTrib), correspondente a totalidade dos tributos federais, estaduais e municipais, cuja incidência influa na formação do respectivo preço de venda, aparecerá no DACTE no quadro de "Uso Exclusivo do Emissor do CT-e' , campo de Uso Livre do Contribuinte (tags: xCampo e xTexto, id:92 e 93).

Assim, como exemplo e sugestão: vTotTrib = R$ 152,00, xCampo = Lei da Transparência, xTexto = O valor aproximado de tributos incidentes sobre o preço deste serviço é de R$ 152,00.

   <ObsCont xCampo="LEI DA TRANSPARENCIA">
      <xTexto>O valor aproximado de tributos incidentes sobre o preço deste serviço é de R$ 152,00.</xTexto>
   </ObsCont>


Requisitos de uso:


Exemplos de parâmetros parametros"

parametros = "[SumatraPDF][RODAPE=Powered by CTe_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 CTe_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 DACTE utilizando o SumatraPDF como aplicativo para visualizar/imprimir o PDF gerado.

parametros = "[SumatraPDF][ARQUIVO=" + nomeArquivo + "][PASTA" + pasta + "][IMPRIMIR=" + copias + "]"

Efeito - gera um arquivo com o nome contido em nomeArquivo na pasta informada em pasta e imprime a quantidade cópias informada em copias, a DLL vai tentar utilizar o SumatraPDF para imprir o PDF.

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

Efeito - gera um arquivo com o nome contido em nomeArquivo na pasta informada em pasta e imprime a quantidade cópias informada em copias, a DLL vai tentar utilizar o Acrobat reader para imprir o PDF.

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>


Obs.: É possível mesclar estas informações com um logo, basta criar um logo sem informar os dados do emissor.

Logotipo do Emissor

Logotipo do Emissor Baixa Resolução - 339 x 114

Logotipo do Emissor Média Resolução - 678 x 228

Logotipo do Emissor Alta Resolução - 1356 x 456


       <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 do CT-e ou procCTe 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 EPEC (tpEmis=5) terão a expressão SEM VALOR FISCAL no DACTE gerado.
logo 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 do CT-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 do CT-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
visualizar string entrada informar S ou N para indicar a visualização do PDF.
parametros string entrada [ARQUIVO=nomeArquivo], a DLL irá gravar um PDF com no nome indicado na pasta da aplicação;
[CTeId.PDF] -> grava arquivo com nome = chave de acesso do CT-e;
[RODAPE=texto do rodape] -> imprime o "texto do rodape" informado no RODAPE;
[PASTA=nomePasta] -> indica a pasta de gravação do PDF;
[IMPRIMIR=n], a DLL irá enviar o PDF para impressora padrão. O n pode variar de 1 a 5;
[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 DACTE;
[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;
[MENSAGEMRECIBO=mensagem] -> permite indicar o texto que será mostrado no quadro do Recibo de Entrega (canhoto);
[MarcaDagua=xml] -> permite acrescentar imagens no DACTE, 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;
[OBSCONTRIBUINTE] -> imprimir os dados informados em ObsCont no quadro de uso exclusivo do emitente - sem qualquer formatação ou quebra de linha, assim recomendamos usar as obs geral;
[OBSFISCO] -> imprimir os dados informados em ObsFisco no quadro de uso exclusivo do fisco - sem qualquer formatação ou quebra de linha, assim recomendamos usar as obs geral;
[MOSTRADADOSTOMADOR] -> se deseja mostrar os dados do tomador que é remetente, expedidor, recebedor ou destinatário. Por padrão a DLL não mostra os dados do tomador que já consta como parte no CT-e, exemplo: se o tomador for o destinatário, a DLL só irá indicar (Destinatário nos dados do tomador;
[EPEC=numero protocolo de registro EPEC] -> para mostrar o número do protocolo do registro do EPEC no DACTE;
msgResultado string saída retorna a literal do resultado da chamada do WS.


Exemplos de parâmetros parametros"

parametros = "[SumatraPDF][RODAPE=Powered by CTe_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 CTe_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 DACTE utilizando o SumatraPDF como aplicativo para visualizar/imprimir o PDF gerado.

parametros = "[SumatraPDF][ARQUIVO=" + nomeArquivo + "][PASTA" + pasta + "][IMPRIMIR=" + copias + "]"

Efeito - gera um arquivo com o nome contido em nomeArquivo na pasta informada em pasta e imprime a quantidade cópias informada em copias, a DLL vai tentar utilizar o SumatraPDF para imprir o PDF.

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

Efeito - gera um arquivo com o nome contido em nomeArquivo na pasta informada em pasta e imprime a quantidade cópias informada em copias, a DLL vai tentar utilizar o Acrobat reader para imprir o PDF.


Retorno:

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

código Mensagem origem regra
7900 PDF da DACTE do CT-e: [chave do CT-e] foi gerado com sucesso DLL -
7901 PDF da DACTE do CT-e: [chave do CT-e] foi gravado com nome [valor informado] 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 visualização informado [valor informado] inválido, divergente de: [S]imr ou [N]ão DLL -
7904 Erro: A DLL não oferece suporte para geração do modal: [valor informado] desejado DLL -
7905 Erro: A DLL não oferece suporte para geração do PDF para a versão do CT-e: [versão do XML] 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 do CT-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 -
7911 Erro: Falha no processo de visualização do PDF, examine a mensagem de erro do Windows: [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 do CT-e da versão 1.04
Dim logo As String                ' nome arquivo do logotipo
Dim quadroRecibo As String        ' posicão de impressão do quadroRecibo [S]uperior [I]nferior
Dim visualizar As String          ' data e número do registro do DPEC
Dim parametros As String          ' parametros da geracao do PDF
Dim cResultado As Long            ' código deretorno da chamada da DLL
Dim msgResultado As String        ' literal com resultado da chamada da DLL

Dim nomeArquivoCTe As String      ' nome do arquivo procCTe que será lido

nomeArquivoCTe = "c:\procCTe_000001294.xml"
 
 
On Error GoTo 0
'   Carrega o conteúdo do nome do arquivo em XMLString
'
Open nomeArquivoCTe For Input As #1
XML = Input$(LOF(1), #1)
Close #1
'
logo = ""                       ' nome arquivo logo
quadroRecibo = "S"              ' quadro do recibo no topo "S" ou rodape "I"
visualizar = "S"                ' visualizar PDF "S" ou "N"

                                ' Parâmetro, valores válidos:
                                ' [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;
                                ' [MENSAGEM=texto da mensagem] -> imprime o "texto da mensagem" informado no corpo do DANFE;
                                ' [IMPRIMIR=n] -> imprime n cópias do DACTE
                                '
parametros = "[RODAPE=Powered by CTe_Util.dll - FlexDocs Documentos Eletronicos - (C) 2013 - Todos os direitos reservados.][ARQUIVO=TESTE.PDF][PASTA=C:\]"
 
cResultado = 0
msgResultado = ""
'
' instancia a DLL - late binding
'
Dim objCTeUtil As Object
'
Set objCTeUtil = CreateObject("CTe_Util.Util")
'
' chama DLL
'
'geraPdfDACTE(string XML, string _logo, string _quadroRecibo, string _visualizar, string _parametros, out string msgResultado)
'

cResultado = objCTeUtil.geraPdfDACTE(XML, logo, quadroRecibo, visualizar, parametros, msgResultado)
 
'
'  tratar retorno
'

If cResultado < 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 objCTeUtil = Nothing

Delphi

 
procedure TForm1.Button6Click(Sender: TObject);
var
 
Util: OleVariant;                       // declarar a interface da DLL
 
//
// declaração das variáveis que serão utilizadas na passagem de parâmetros da DLL
//
 
XML : widestring;                 // informar o XML do CT-e da versão 1.04
logo : widestring;                // nome arquivo do logotipo
quadroRecibo : widestring;        // posicão de impressão do quadroRecibo [S]uperior [I]nferior
visualizar : widestring;          // data e número do registro do DPEC
parametros : widestring;          // parametros da geracao do PDF
cResultado : integer;             // código deretorno da chamada da DLL
msgResultado : widestring;        // literal com resultado da chamada da DLL
nomeArquivoCTe  : widestring;     // nome do arquivo procCTe que será lido
 
begin
 
 
nomeArquivoCTe := 'c:\procCTe.xml';
 
quadroRecibo := 'S';              // quadro do recibo no topo "S" ou rodape "I"
visualizar := 'S';               // visualizar PDF "S" ou "N"
 
                                // Parâmetro, valores válidos:
                                // [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;
                                // [MENSAGEM=texto da mensagem] -> imprime o "texto da mensagem" informado no corpo do DANFE;
                                // [IMPRIMIR=n] -> imprime n cópias do DACTE
                                //
parametros := '[RODAPE=Powered by CTe_Util.dll - FlexDocs Documentos Eletronicos - (C) 2013 - Todos os direitos reservados.][ARQUIVO=TESTE.PDF][PASTA=C:\]';
 
cResultado := 0;
msgResultado := '';
 
//
// instancia a DLL - late binding
//
 
Util := CreateOleObject('CTe_Util.util');            // instância a DLL
 
//
//  Ler arquivo xml
//
 
XML :=Util.LeArquivoANSI(nomeArquivoCTe, cResultado, msgResultado);
 
If cResultado = 7331 Then   // erro na leitura do XML
   MessageDlg( msgResultado, mtInformation, [mbOk], 0)
Else
   begin
 
   //
   // chama DLL
   //
 
   Set8087CW($133f); // para evitar o erro de overflow do .NET
 
   cResultado := Util.geraPdfDACTE(XML, logo, quadroRecibo, visualizar, parametros, msgResultado);
 
   //
   //  tratar retorno
   //
 
   If cResultado < 7902 Then            // sucesso, conversão OK
 
      MessageDlg( msgResultado, mtInformation, [mbOk], 0)
 
   else
 
      MessageDlg( 'Processo de geração do PDF falhou...' + chr(13) + msgResultado, mtInformation, [mbOk], 0);
 
   end;
 
end;
11.4.3. Gerar PDF do DACTE
11.4. Utilidadades
« Anterior
11.4.2. Envia e-mail
Próximo »
11.4.4. Identar XML