Ivan Orosco Postado 2 Junho, 2022 Postado 2 Junho, 2022 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
Administradores Juliana Tamizou Postado 17 Junho, 2022 Administradores Postado 17 Junho, 2022 Boa tarde, Nos desculpe a demora no retorno...mas poderia explicar qual foi a necessidade que motivou esta implementação? At. Juliana Tamizou Gerente de Projetos ACBr / Diretora de Marketing AFRAC Ajude o Projeto ACBr crescer - Seja Pro (15) 2105-0750 (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 !!
Ivan Orosco Postado 27 Junho, 2022 Autor Postado 27 Junho, 2022 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 1
Moderadores Juliomar Marchetti Postado 29 Junho, 2022 Moderadores Postado 29 Junho, 2022 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 2 Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Ivan Orosco Postado 29 Junho, 2022 Autor Postado 29 Junho, 2022 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ó
Moderadores Juliomar Marchetti Postado 30 Junho, 2022 Moderadores Postado 30 Junho, 2022 uma outra solução pra ti não viver com merge. é tu fazer um helper no delphi e dai só declara a uses onde for usar e chamar vai fazer o seu método. Juliomar Marchetti skype: juliomar telegram: juliomar e-mail: [email protected] http://www.juliomarmarchetti.com.br
Administradores Juliana Tamizou Postado 30 Junho, 2022 Administradores Postado 30 Junho, 2022 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. Juliana Tamizou Gerente de Projetos ACBr / Diretora de Marketing AFRAC Ajude o Projeto ACBr crescer - Seja Pro (15) 2105-0750 (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 !!
Membros Pro Quality Automação Postado 13 Fevereiro Membros Pro Postado 13 Fevereiro Em 02/06/2022 at 10:11, Ivan Orosco disse: 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.pasUnavailable ACBrNFSeXDANFSeRL.pasUnavailable ACBrNFSeXDANFSeRLClass.pasUnavailable Bom dia, estou precisando disso nfce, as maquininhas de cartao trabalham mais rapido e com mais qualidade usando bmp, vou ter que implementar
Consultores Italo Giurizzato Junior Postado 13 Fevereiro Consultores Postado 13 Fevereiro Bom dia @Quality Automação, Quais "maquininhas de cartão" você se refere? Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
Membros Pro Quality Automação Postado 14 Fevereiro Membros Pro Postado 14 Fevereiro 18 horas atrás, Italo Giurizzato Junior disse: Bom dia @Quality Automação, Quais "maquininhas de cartão" você se refere? cielo, rede, stone, atualmente eu pego o pdf converto em bmp e mando imprimir.
Consultores Italo Giurizzato Junior Postado 14 Fevereiro Consultores Postado 14 Fevereiro Bom dia @Quality Automação, Vou passar para os demais membros da Equipe ACBr para que todos possam opinar sobre esse implementação. 1 Italo Giurizzato Junior Ajude o Projeto ACBr crescer - Assine o SAC Analista de Sistemas / Araraquara-SP Araraquara - A era dos Trólebus
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