Ir para conteúdo
  • Cadastre-se

dev botao

NFSeX - Correções e melhorias na impressão usando FPDF


Recommended Posts

Boa noite

Estou implementando a impressão da NFSeX usando o componente FPDF no Linux e me deparei com algumas situações:

1ª: Problema no encoding do PDF gerado, onde todos os caracteres com acentuação eram impressos como "?" ou algum outro símbolo, para correção precisei mudar a função TFPDF.ConvertTextToAnsi da unit ACBr_fpdf.pas.
Não sei se é uma particularidade do FPC para Linux, mas o método Utf8ToAnsi usado nessa função retorna a mesma string (em UTF-8) passada para ele sem nenhuma alteração, fiz algumas pesquisas e tudo o que falavam para fazer eu testei, e a única forma de conseguir gerar o PDF com os caracteres em ANSI foi converter a string para o encoding 1252 e depois apenas "dizer" para o sistema que ela está em UTF8, sem que faça a conversão, conforme o código abaixo, caso contrário, sempre que há uma concatenação com qualquer outra string, essa que está com encoding 1252 é convertida novamente para UTF-8. Na unit em anexo eu mantive o código original para outros sistemas (usando $IFDEF), pois testei apenas no FPC/Linux.

var S: RawByteString;
begin
  S := AText;
  SetCodePage(S, 1252, True);
  SetCodePage(S, CP_UTF8, False);
  Result := S;
end;

Obs.: Para quem for utilizar com FPC/Linux, além da alteração acima, é necessário converter o encoding do arquivo ACBr.DANFSeX.FPDFA4Retrato.pas para UTF-8 utilizando o comando abaixo. Caso não seja convertido, as strings fixas (títulos e cabeçalhos) que estão salvas no arquivo com encoding ANSI serão carregadas em UTF-8 na memória, sem converter, ai ao passar por esse código de conversão, vão ficar um símbolo de "?" da mesma forma (mesmo no código original). Não consegui resolver de outra forma, se souberem de algo, aceito sugestões. 

iconv -f "windows-1252" -t "UTF-8" ACBr.DANFSeX.FPDFA4Retrato.pas -o ACBr.DANFSeX.FPDFA4Retrato.pas

Screenshot_1.thumb.png.02e8b7b40afd001ae696f638fc953c37.png

2ª: Coluna VALOR TOTAL com título errado. Alterado texto na unit ACBr.DANFSeX.FPDFA4Retrato.pas.
image.png.a0b0ad9e6f166398093d29bf22344d85.png

3ª: Não imprimia informação SEM VALOR FISCAL em notas canceladas ou em homologação. Essa parte do código do componente (unit ACBrNFSeXDANFSeFPDFClass.pas) estava comentada, alterei com base na unit do FastReport.

4ª: Impressão de PDF direto para TStream não estava implementada, apesar do componente TFPDFEngine possuir o método. Implementei com base nos outros componentes.

Obs: As 3 units alteradas estão no arquivo units.zip, não consegui anexar o arquivo ACBr_fpdf.pas diretamente pois gerava um erro ao enviar.
image.png.41d170e1a330b8f1a94b6d8d71acd15d.png

units.zip

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Uma coisa que pode notar é que no ACBr todos os arquivos estão 1252 ou no caso ISO enão utf-8

pois temos a questão do delphi7 até 2007 que atendemos então não pode ser utf8. o fontes tem que estar em ANSI mesmo.

dai em cima disso é que devem ser revistos as conversões usadas.

 

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Postado (editado)

Bom dia, compreendo a necessidade de estar em ANSI, os arquivos anexados mantive dessa forma, porém não consegui fazer funcionar no FPC mesmo utilizando a diretiva -dDisableUTF8RTL na compilação.

A única forma que consegui fazer funcionar foi convertendo pra UTF-8.
Se puder subir as outras alterações que são layout e salvar para o TStream, agradeço, ai mantenho somente essa aqui separado.

Editado por Marciano da Rocha
.
Link para o comentário
Compartilhar em outros sites

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 conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.