Ir para conteúdo
  • Cadastre-se

dev botao

Danfe NF-e e NFC-e FPDF Linux


Ver Solução Respondido por Daniel Simoes,

Recommended Posts

  • Membros Pro
Postado (editado)

Bom dia.

Estou desenvolvendo uma aplicação que irá rodar em windows/linux, responsável por realizar a emissão de documentos fiscais. Porém ao gerar o DANFe da NF-e/NFC-e utilizando o FPDF no linux(sem ambiente visual), está gerando problemas de codificação.

Fiz inumeros testes antes de solicitar auxílio aqui no fórum, porém sem sucesso. Meu ambiente linux é um Debian 12 (Bookworm) sem GUI, com o pacote ttf-mscorefonts instalado e a configuração de locale em UTF-8 conforme imagem enviada.

Exemplo de requisição do app demo em anexo.

 

DemoACBr.zip

 

Danfe.png

Linux.png

ExemploRequisição.png

Editado por arpa_sistemas
Corpo da mensagem ficou com dados errados
  • Consultores
Postado

Tópico movido para a área do SAC, para que o SLA de respostas seja considerado

14 minutos atrás, arpa_sistemas disse:

Bom dia.

Estou desenvolvendo uma aplicação que irá rodar em windows/linux, responsável por realizar a emissão de documentos fiscais. Porém ao gerar o DANFe da NF-e/NFC-e utilizando o FPDF no linux(sem ambiente visual), está gerando problemas de codificação.

Fiz inumeros testes antes de solicitar auxílio aqui no fórum, porém sem sucesso. Meu ambiente linux é um Debian 12 (Bookworm) sem GUI, com o pacote ttf-mscorefonts instalado e a configuração de locale em UTF-8 conforme imagem enviada.

Exemplo de requisição do app demo em anexo.

 

DemoACBr.zip 13.04 kB · 0 downloads

 

Danfe.png

Linux.png

ExemploRequisição.png

Um momento

  • Consultores
Postado
29 minutos atrás, arpa_sistemas disse:

Bom dia.

Estou desenvolvendo uma aplicação que irá rodar em windows/linux, responsável por realizar a emissão de documentos fiscais. Porém ao gerar o DANFe da NF-e/NFC-e utilizando o FPDF no linux(sem ambiente visual), está gerando problemas de codificação.

Fiz inumeros testes antes de solicitar auxílio aqui no fórum, porém sem sucesso. Meu ambiente linux é um Debian 12 (Bookworm) sem GUI, com o pacote ttf-mscorefonts instalado e a configuração de locale em UTF-8 conforme imagem enviada.

Exemplo de requisição do app demo em anexo.

 

DemoACBr.zip 13.04 kB · 1 download

 

Danfe.png

Linux.png

ExemploRequisição.png

Use o comando file no arquivo gerado para saber o tipo de codificação do arquivo:
 

file <nome do arquivo>

 

  • Membros Pro
Postado

Estou subindo um ubuntu também para efetuar outros testes.

2 minutos atrás, Júlio Cavalcanti disse:

Como está a configuração de região e idioma?

Seria a imagem que te passei no início? 

image.thumb.png.aec6af4aec8586233411221d9016f474.png

  • Fundadores
Postado

Qual compilador é IDE você está usando no Linux ?

Observe no código do DANFCe que ele liga os IsITF8 se for FPC... creio que seja necessário o mesmo quando for Linux

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado

Eu compilo no Delphi 12 e rodo no Linux, pois o meu Linux não tem interface gráfica.

Tentei ativar via código também, porém da mesma forma não obtive sucesso.

Continuo testando aqui, caso tenha algum parecer informo. 

  • Membros Pro
Postado (editado)

Já tentei isso também, testei tanto no Debian 12 quando no Ubuntu 22.04.

Já testei usando instalação normal do Linux, usando o WSL do windows e usando docker.

Editado por arpa_sistemas
  • Fundadores
Postado
46 minutos atrás, arpa_sistemas disse:

Já tentei isso também, testei tanto no Debian 12 quando no Ubuntu 22.04.

Por favor teste com a Unit em anexo... Mudei a linha abaixo:

  SetUTF8({$IfDef USE_UTF8}true{$else}false{$EndIf});   

ACBrNFCeDANFeFPDF.pas

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado (editado)

Ocorre a mesma coisa.

Estou testando as conversões de UTF-8 para Ansi no método ConvertTextToAnsi, para ver se surte algum efeito.

Editado por arpa_sistemas
  • Fundadores
Postado

Os fontes estão em ANSI, cp1252...

Mas estou desconfiado que o compilador Linix do Delphi converte ele para UTF8..

Por favor experimente cercar uma String acentuada com o ACBrStr()

Exemplo;

ACBrStr('Homologação')

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado

Boa noite Daniel, efetuei os testes que solicitou e continua ocorrendo o problema.

Também tentei alterar o CodePage na compilação do Delphi nesse local, para ver se resolvi o problema.

image.thumb.png.d53151419494489b58a17518048ffd20.png

  • Curtir 1
  • Fundadores
Postado

Notei que o comando final, que salva o Buffer em Disco, quando em Linux, sempre salva o arquivo como UTF8... e não ANSI (e por enquanto, o FPDF-Pascal, só suporta ANSI)

Vou tentar algum ajuste nessa rotina

procedure TFPDF.SaveToFile(const vFile: String);
begin
  //Save file locally
  Close;
  try
    Self.buffer.SaveToFile(vFile);
  except
    on E: Exception do
      Error('Unable to create output file: ' + vFile, E);
  end;
end;

 

  • Curtir 4
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Membros Pro
Postado

Bom dia, @Daniel Simoes estava efetuando alguns testes e percebi o seguinte.

Primeiramente desliguei a flag Compress para obter o texto em plain text, após isso, fiz gravar o conteúdo do pdf em Stream sem passar pelo disco, e comecei a validação da codificação do mesmo.

Usando a função TEncoding.GetBufferEncoding retorna que o texto é ANSI, e usando a função IsUTF8String  da unit System.WideStrUtils retorna que o texto é UTF8.

Retornando o texto gerado pelo FPDF para o Windows ocorre o problema dos caracteres, agora, se utilizado a função UTF8ToAnsi e retornar o texto gerado o problema dos caracteres é resolvido.

Acredito que algo no FPDF continua gerando o caracteres em UTF8 mesmo após a tua sugestão de alteração.

Não sei se te ajuda em algo, mas continuo tentando achar uma solução aqui também.

  • Curtir 2
  • Fundadores
Postado

Oi @arpa_sistemas, sim.. eu notei que parece haver algo errado até mesmo na Unit ACBrUtil.Strings, quando em POSIX (Linux)...

Ainda estou investigando o problema... (mas infelizmente estou com pouco tempo para "sentar" na frente do PC)

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

  • Fundadores
Postado

Ainda não consegui compreender, em que momento, o Delphi Linux, converte o conteúdo para UTF8...

De forma paliativa, você poderia:

- Remover todos os acentos do PDF
- Rodar o comando abaixo, para converter o arquivo de UTF8 para ANSI CP1252

iconv -f UTF-8 -t CP1252 -o ArquivoEmCP1252.pdf ArquivoEmUTF8.pdf

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.