Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 876 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Olá, tive a necessidade de implementar um método para gerar a NFSe em formato de imagem BMP, gostaria que fosse anexado aos fontes do projeto, segue abaixo as alterações que realizei e os arquivos anexados:

ACBrNFSeXDANFSeClass.pas:

///declaração 
procedure SalvarDANFSeBMP(NFSe: TNFSe = nil); overload; virtual;

///implementação 
procedure TACBrNFSeXDANFSeClass.SalvarDANFSeBMP(NFSe: TNFSe);
begin
  ErroAbstract('SalvarDANFSeBMP');
end;

ACBrNFSeXDANFSeRLClass.pas

///declaração 
procedure SalvarDANFSeBMP(NFSe: TNFSe = nil); overload; override;

///implementação 
procedure TACBrNFSeXDANFSeRL.SalvarDANFSeBMP(NFSe: TNFSe);
var
  i: integer;
begin
  TfrlXDANFSeRLRetrato.QuebradeLinha(TACBrNFSeX(ACBrNFSe).Provider.ConfigGeral.QuebradeLinha);

  if NFSe = nil then
  begin
    for i := 0 to TACBrNFSeX(ACBrNFSe).NotasFiscais.Count - 1 do
    begin
      if Trim(self.NomeDocumento) <> ''  then
        FPArquivoPDF := PathWithDelim(Self.PathPDF) + self.NomeDocumento + '.bmp'
      else
        FPArquivoPDF := PathWithDelim(Self.PathPDF) +
          TACBrNFSeX(ACBrNFSe).NumID[TACBrNFSeX(ACBrNFSe).NotasFiscais.Items[i].NFSe] + '.bmp';

      TfrlXDANFSeRLRetrato.SalvarBMP(Self, TACBrNFSeX(ACBrNFSe).NotasFiscais.Items[i].NFSe, FPArquivoPDF);
    end;
  end
  else
  begin
    if Trim(self.NomeDocumento) <> ''  then
      FPArquivoPDF := PathWithDelim(Self.PathPDF) + self.NomeDocumento + '.bmp'
    else
      FPArquivoPDF := PathWithDelim(Self.PathPDF) + TACBrNFSeX(ACBrNFSe).NumID[NFSe] + '.bmp';

    TfrlXDANFSeRLRetrato.SalvarBMP(Self, NFSe, FPArquivoPDF);
  end;
end;

ACBrNFSeXDANFSeRL.pas

///declaração 
class procedure SalvarBMP(ADANFSe: TACBrNFSeXDANFSeRL; ANFSe: TNFSe; AFile: String); overload;

///implementação 
class procedure TfrlXDANFSeRL.SalvarBMP(ADANFSe: TACBrNFSeXDANFSeRL; ANFSe: TNFSe; AFile: String);
var
  DANFSeReport: TfrlXDANFSeRL;
  Bitmap: TBitmap;
  i: integer;
  NomeArquivo: string;
begin
  DANFSeReport := Create(nil);
  try
    DANFSeReport.fpNFSe := ANFSe;
    DANFSeReport.fpDANFSe := ADANFSe;
    if ADANFSe.AlterarEscalaPadrao then
    begin
      DANFSeReport.Scaled := False;
      DANFSeReport.ScaleBy(ADANFSe.NovaEscala , Screen.PixelsPerInch);
    end;

    TDFeReportFortes.AjustarReport(DANFSeReport.RLNFSe, DANFSeReport.fpDANFSe);

    DANFSeReport.RLNFSe.Prepare;

     for i := 0 to DANFSeReport.RLNFSe.Pages.PageCount - 1 do
     begin
       Bitmap := NeedAuxBitmap;
       Bitmap.Width := DANFSeReport.RLNFSe.Pages[i].Width;
       Bitmap.Height := DANFSeReport.RLNFSe.Pages[i].Height;
       Bitmap.PixelFormat := pf32bit;

       Bitmap.Canvas.Brush.Color := clWhite;
       Bitmap.Canvas.Brush.Style := bsSolid;
       Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));

       DANFSeReport.RLNFSe.Pages[i].PaintTo(Bitmap.Canvas, Rect(0, 0, Bitmap.Width, Bitmap.Height));
       NomeArquivo := ChangeFileExt(AFile, '');
       Bitmap.SaveToFile(NomeArquivo + FormatCurr('000', I+1) + '.bmp');
     end;

  finally
    FreeAndNil(DANFSeReport);
  end;
end;

[]'s

ACBrNFSeXDANFSeClass.pas ACBrNFSeXDANFSeRL.pas ACBrNFSeXDANFSeRLClass.pas

  • 3 semanas depois ...
  • Administradores
Postado

Boa tarde,

Nos desculpe a demora no retorno...mas poderia explicar qual foi a necessidade que motivou esta implementação?

At.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • 2 semanas depois ...
Postado

Sim claro, tenho um pequeno sistema de controle de cobrança do qual existe uma funcionalidade que gera uma "previsão" de envio de cobrança, onde ele apresenta a mensagem que será enviada por e-mail "traduzida" de acordo com uma configuração de tags dinâmicas na mensagem original, e também apresenta a imagem do boleto gerado e a imagem da nota fiscal, tudo de uma maneira bastante simples, separado por 3 abas (Mensagem, Boleto, NFSe) para que o usuário visualize rapidamente essas informações antes de fazer o envio por e-mail. Se eu fosse utilizar o método de pré-visualização do componente de impressão não seria possível obter o mesmo resultado, nem mesmo utilizando o arquivo PDF gerado, que me forçaria a utilizar componentes externos para visualizar o seu conteúdo, por isso utilizei a implementação de geração de imagem de boleto que já existia e a refiz no ACBRNFSeX, pois inclusive quando a nota fiscal é gerada eu já gravo a imagem da mesma no banco para ser utilizada nessa pré-visualização de cobrança, resultando em uma operação muito mais rápida do que executar novamente o componente do ACBRNFSeX para montar a exibição da nota fiscal.

[]'s

  • Curtir 1
  • Moderadores
Postado

Boa tarde.

discutimos entre os consultores e caimos na seguinte situação, se implementarmos isso será necessário colocar em fast report também, além de todos os demais impressos.

uma sugestão é tu colocar um visualizador de pdf dentro de sua aplicação e abrir. como sugestão chegou a testar esse https://www.gnostice.com/PDFtoolkit_VCL.asp

  • Curtir 2
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

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

 

Postado

Boa tarde, então, antes de implementar isso pesquisei e vi esse PDFToolkit, ele é pago... outras soluções disponíveis dependem da instalação da aplicação para abrir o pdf na maquina do usuário e não funcionaram muito bem, por isso acabei implementando a exportação de imagem mesmo.

No entanto... entendo que faz sentido ter o mesmo recurso de uma engine de relatório para os outros já existentes, mas também entendo que uma coisa não exclui a outra, se alguém tiver a necessidade de fazer a mesma coisa que eu fiz para outro engine como o fast, que implemente, ja tem até o exemplo do código funcional pra isso... afinal eh um código aberto. Enfim, é uma pequena contribuição que fiz para o Fortes, um recurso a mais para o ACBRNFSeX, mas se não for aceita vou viver fazendo merge aqui só 🤣

  • Administradores
Postado

Boa tarde,

20 horas atrás, Ivan Orosco disse:

entendo que faz sentido ter o mesmo recurso de uma engine de relatório para os outros já existentes, mas também entendo que uma coisa não exclui a outra, se alguém tiver a necessidade de fazer a mesma coisa que eu fiz para outro engine como o fast, que implemente,

Ficamos muito gratos por sua iniciativa, mas para que evitemos os problemas relativos a falta de padrão entre os reports, vamos aguardar um colega da comunidade nos enviar as alterações para o fast.

At.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Este tópico foi criado há 876 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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.