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
2ª: Coluna VALOR TOTAL com título errado. Alterado texto na unit ACBr.DANFSeX.FPDFA4Retrato.pas.
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.
units.zip