guarasemini Postado 24 Junho Postado 24 Junho Boa tarde a todos. Estou com um problema no loadfromFile do acbrNFe para a impressão de um DANFE. O nome do emitente tem acento, quando eu faço o loadfromFile do arquivo XML e passa no XMLStr := ConverteXMLtoNativeString(XMLStr); ele remove o acento e coloca um caractere especial. O XML não tem a tag de utf-8, mas quando entra no "function UTF8ToNativeString(const AUTF8String: AnsiString): String;" para maior que delphi 12, e faz o "UTF8ToString(AUTF8String);", ele "quebra" o XML. Como algumas DANFEs minhas precisam ser apresentadas para orgao publico, alguns estão incomodados com isso. Na DANFE está marcado para remover acentos, mas o problema é quando faz esse conversão. Alguem pode me auxiliar ?
Fundadores Daniel Simoes Postado 24 Junho Fundadores Postado 24 Junho O ACBr presume, que todos os XMLs de DFe's são UTF8 Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
guarasemini Postado 25 Junho Autor Postado 25 Junho 14 horas atrás, Daniel Simoes disse: O ACBr presume, que todos os XMLs de DFe's são UTF8 então, mas não sendo e convertendo gera esse problema de caracteres especiais. Tem algo que posso fazer ?
butcher4556 Postado 25 Junho Postado 25 Junho Pelo que parece o problema está na codificação do XML. O ACBr espera UTF-8, então se o arquivo vem sem essa definição pode acabar quebrando os caracteres. Eu verificaria primeiro como esse XML está sendo gerado, porque corrigir na origem costuma ser melhor do que tratar depois no carregamento. 1
guarasemini Postado 25 Junho Autor Postado 25 Junho 27 minutos atrás, butcher4556 disse: Pelo que parece o problema está na codificação do XML. O ACBr espera UTF-8, então se o arquivo vem sem essa definição pode acabar quebrando os caracteres. Eu verificaria primeiro como esse XML está sendo gerado, porque corrigir na origem costuma ser melhor do que tratar depois no carregamento. concordo com você ! O problema é que é um xml de fornecedor, dai fica complicado
Agnaldo Prates Postado 25 Junho Postado 25 Junho Ao que parece,o problema não está no ACBr, mas na função que UTF8ToUnicodeString do Delphi. Prates, Agnaldo
guarasemini Postado 25 Junho Autor Postado 25 Junho Estou colocando os "problemas" que localizei. Mudei para o loadfromfile novamente e estou colocando as imagens de onde está "certo" e onde "quebra" para ver se alguem pode me auxiliar. As imagens são debbugando a TNotasFiscais.LoadFromFile. No memorystrema como utf está correto e no ansi quebra. Deixei destacado a quebra do caractere especial em questão. Novamente, obrigado pela atenção de todos.
Fundadores Daniel Simoes Postado 25 Junho Fundadores Postado 25 Junho Se possivel, anexe o XML para analise Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
guarasemini Postado 25 Junho Autor Postado 25 Junho 26 minutos atrás, Daniel Simoes disse: Se possivel, anexe o XML para analise Desculpa, havia esquecido 35260443987515000725550010000549591147977207.xml
Fundadores Daniel Simoes Postado 25 Junho Fundadores Postado 25 Junho Parece tudo correto, com o XML.. está em UTF8 e tem a Declaração de Encoding, no inicio do arquivo Como reproduzir o Problema, no Demo do ACBr ? Basta carregar o arquivo, e imprimir a DANFE ? Você está usando Fast, Fortes ou FPDPF ? Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
guarasemini Postado 25 Junho Autor Postado 25 Junho 6 minutos atrás, Daniel Simoes disse: Parece tudo correto, com o XML.. está em UTF8 e tem a Declaração de Encoding, no inicio do arquivo Como reproduzir o Problema, no Demo do ACBr ? Basta carregar o arquivo, e imprimir a DANFE ? Você está usando Fast, Fortes ou FPDPF ? Sim, eu fiz o seguinte: criei um novo projeto, adicionei acbrnfe e acbrdanfefr (uso fastreport), so apontei para o DANFeRetrato.fr3 que fica dentro a pasta report do exemplo do AcbrNFe. Coloquei 1 button e fiz acbrnfe1.notafiscais.loadfromfile(<path do XML>) e a danfe sai com o caractere errado. Estou utilizando delphi 13.1 + fastrerport 2026.2.1. E sim, esta com a tag utf, verifiquei isso pelo notaped ++. Mas quando passas nas rotinas que deixei na mensagem anterior, ele quebra.
Fundadores Daniel Simoes Postado 25 Junho Fundadores Postado 25 Junho O problema pode estar na Classe do Fast Report do ACBr, ou ainda no arquivo .fr3 Você está usando o .FR3 disponibilizado pelo ACBr ? Infelizmente não consigo testar, usando o Fast Report Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
Fundadores Daniel Simoes Postado 25 Junho Fundadores Postado 25 Junho No Demo do ACBr, em Fortes, não ocorre o problema procedure TfrmACBrNFe.btnImprimirClick(Sender: TObject); begin OpenDialog1.Title := 'Selecione a NFe'; OpenDialog1.DefaultExt := '*-nfe.XML'; OpenDialog1.Filter := 'Arquivos NFe (*-nfe.XML)|*-nfe.XML|Arquivos XML (*.XML)|*.XML|Todos os Arquivos (*.*)|*.*'; OpenDialog1.InitialDir := ACBrNFe1.Configuracoes.Arquivos.PathSalvar; if OpenDialog1.Execute then begin ACBrNFe1.NotasFiscais.Clear; ACBrNFe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName); ACBrNFe1.NotasFiscais.Imprimir; end; end; Também não ocorreu, usando o FPDF 35260443987515000725550010000549591147977207-nfe.pdf Ahh.. fiz o testes em Lazarus/FPC... Qual a sua IDE e Sistema Operacional ? Daniel Simões de Almeida O melhor TEF, é com o Projeto ACBr - Clique e Conheça Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976.
guarasemini Postado 25 Junho Autor Postado 25 Junho 2 horas atrás, Daniel Simoes disse: No Demo do ACBr, em Fortes, não ocorre o problema procedure TfrmACBrNFe.btnImprimirClick(Sender: TObject); begin OpenDialog1.Title := 'Selecione a NFe'; OpenDialog1.DefaultExt := '*-nfe.XML'; OpenDialog1.Filter := 'Arquivos NFe (*-nfe.XML)|*-nfe.XML|Arquivos XML (*.XML)|*.XML|Todos os Arquivos (*.*)|*.*'; OpenDialog1.InitialDir := ACBrNFe1.Configuracoes.Arquivos.PathSalvar; if OpenDialog1.Execute then begin ACBrNFe1.NotasFiscais.Clear; ACBrNFe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName); ACBrNFe1.NotasFiscais.Imprimir; end; end; Também não ocorreu, usando o FPDF 35260443987515000725550010000549591147977207-nfe.pdf 7.93 kB · 1 download Ahh.. fiz o testes em Lazarus/FPC... Qual a sua IDE e Sistema Operacional ? Estou com windows 11, Delphi 13.1 e fastReport 2026.2.1
Thobias Sobczak Postado Terça as 18:05 Postado Terça as 18:05 To com o mesmo erro aqui, tanto em Fast quando Fortes ( Win 10 e Rad Studio 11 ) e mesmo com o 'Usar unicode UTF-8 para suporte de linguagem mundial' DESMARCADO Estranho que todos xmls tem o RetirarAcentos = True no componente e a declaração '<?xml version="1.0" encoding="UTF-8"?>' no cabeçalho do xml De um tempo pra cá que parou de funcionar, mesmo após reinstalar o ACBr
Thobias Sobczak Postado Terça as 19:58 Postado Terça as 19:58 (editado) ACBNFe.XMLReader Rev 46038 Ponto de definição do xNome para o Destinatario //Nessa revisão foi comitado um 're-parse' com DECODE = TRUE ( parametro DEFAULT da ParseText ), no meu cenário de debug isso matou a acentuação que já estava correta pelo ParseText da ObterConteudo NFe.Dest.xNome := ParseText(ObterConteudo(ANode.Childrens.Find('xNome'), tcStr)); ** POSSIVEL CORREÇÃO ** SE EU DESLIGO O DECODE AQUI RESOLVE: NFe.Dest.xNome := ParseText(ObterConteudo(ANode.Childrens.Find('xNome'), tcStr), False); <--DECODE=FALSE // O obterCounteudo já faz um parse sem DECODE function TNFeXmlReader.ObterConteudo(const ANode: TACBrXmlNode; const Tipo: TACBrTipoCampo): variant; begin Result := inherited ObterConteudo(ANode, Tipo); if Tipo in [tcStr, tcEsp, tcStrOrig] then Result := ParseText(Result, False); <-- DECODE = FALSE end; 04/05/2026 -- ACBrNFeXmlReader -- [-] ACBr-8858 Corrige erro de parse de nomes com elementos XML/XHTML [*] https://www.projetoacbr.com.br/forum/topic/89759-acbr-8858-correção-de-visualização-no-danfe-entidades-htmlxml-em-nomes-xnome/#comment-583416 Por: Soma Soluções em TI Demais pontos , como NFe.Emit.xNome := ObterConteudo(ANode.Childrens.Find('xNome'), tcStr); NFe.Emit.xFant := ObterConteudo(ANode.Childrens.Find('xFant'), tcStr); aparentemente foram corrigidos na revisão 46981!! Parece que faltou o mesmo tratamento para a NFe.Dest.xNome e NFe.Transp.Transporta.xNome Editado Terça as 20:07 por Thobias Sobczak
Solution guarasemini Postado Quinta as 13:34 Autor Solution Postado Quinta as 13:34 Depois da atualização realmente voltou a não aparecer mais o caractere especial, então resolveu. obrigado a todos.
Recommended Posts
Crie uma conta ou entre para comentar
Você precisar ser um membro para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar Agora