Ir para conteúdo
  • Cadastre-se

dev botao

Chave fixa GerarPDF


Ver Solução Respondido por Victor H. Gonzales - Panda,
  • Este tópico foi criado há 193 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

Bom dia Estou realizando o registro do boleto Sicoob via WebService. Ao registrar, preciso obter obter o boleto em Base64. Observei que na classe TBoletoW_Bancoob, existe a "procedure RequisicaoJson()". Nela temos a adição do seguinte parâmetro ao JSON: LJson.AddPair('gerarPdf',False); Como teste, alterei o valor para True e enviei a requisição para registrar o boleto: LJson.AddPair('gerarPdf',True); Assim consegui obter no JSON de retorno o boleto na Base64. O problema é que o valor do parâmetro adicionado no JSON esta fixo (por padrão False). Existe a possibilidade de alteração deste valor através de propriedade? LJson.AddPair('gerarPdf',StrToInt(IfThen(aTitulo.GerarPdf,'1','0')));

  • Consultores
  • Solution
Postado

Hoje o componente não trabalha capturando o pdf dos webservice...

É necessário gerar a ficha de pagamento por dentro do componente, porém é possível você imprimir um pdf em stream e este transformar em base64

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

  • Membros Pro
Postado
23 horas atrás, Sistema Auditor disse:

Bom dia Estou realizando o registro do boleto Sicoob via WebService. Ao registrar, preciso obter obter o boleto em Base64. Observei que na classe TBoletoW_Bancoob, existe a "procedure RequisicaoJson()". Nela temos a adição do seguinte parâmetro ao JSON: LJson.AddPair('gerarPdf',False); Como teste, alterei o valor para True e enviei a requisição para registrar o boleto: LJson.AddPair('gerarPdf',True); Assim consegui obter no JSON de retorno o boleto na Base64. O problema é que o valor do parâmetro adicionado no JSON esta fixo (por padrão False). Existe a possibilidade de alteração deste valor através de propriedade? LJson.AddPair('gerarPdf',StrToInt(IfThen(aTitulo.GerarPdf,'1','0')));

Alinhando o que foi conversado no Discord. Estou precisando da Propriedade "GerarPDF" para que quando eu receba o Json do banco ele me retorne o Stream do Boleto em Base 64 PDF que eu quero utilizar o layout do banco pois qualquer alteração feita por eles eu não preciso me preocupar pois já vai vim automaticamente. 

  • Consultores
Postado

Como explicado no escopo inicial e tambem pelo discord.

o Componente não trabalha hoje com o download do stream do boleto via webservices, porem como foi dito, você pode com a ficha de impressão do componente gerar seu stream próprio e transformar em base64 como você deseja.

 

um exemplo rápido e simplório (Delphi RAD12) utilizando o programa exemplo.

procedure SalvarStringEmArquivo(const AString: string; const ANomeArquivo: string);
var
  LArquivo: TextFile;
begin
  AssignFile(LArquivo, ANomeArquivo);
  try
    Rewrite(LArquivo);
    Write(LArquivo, AString);
  finally
    CloseFile(LArquivo);
  end;
end;

procedure TfrmDemoBoleto.btnImpressaoStreamClick(Sender: TObject);
var
  LMeuStream : TMemoryStream;
  LBase64 : string;
begin
  if not Assigned(FACBrBoleto.ACBrBoletoFC) then
    raise Exception.Create(MOTOR_NAO_SELECIONADO);

  LMeuStream := TMemoryStream.Create;
  try
    FACBrBoleto.ACBrBoletoFC.Filtro := fiPDF;
    FACBrBoleto.ACBrBoletoFC.PdfSenha := edtSenhaPDF.Text;
    FACBrBoleto.Imprimir(LMeuStream);

    LBase64 := TNetEncoding.Base64.EncodeBytesToString(LMeuStream.Memory, LMeuStream.Size);

    SalvarStringEmArquivo(LBase64, 'MeuArquivo.Base64');
  finally
    LMeuStream.Free;
  end;
end;

em ultima instancia, se você mesmo assim não quiser criar o stream, você pode estender a classe do componente ou criar uma classes helper personalizando o comportamento do componente.

image.png

Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

  • Membros Pro
Postado (editado)

Pessoal, bom dia.
Me chamo Douglas Miiller, e sou analista de implantação aqui no Sistema Auditor. Sou o analista aqui incumbido de implantar o boleto via WebService em nosso ERP.

Não sou programador como vocês, e gostaria de que me corrigissem caso eu esteja errado.

Pelo andar da conversa, imagino que está tendo alguma desinformação.

Pelo que entendi conversando com nosso programador, a tag “GerarPDF ” (nem sei se chama assim) esta fixa no código de vocês como “False”.

O que nosso esta precisando, seria o ACBr corrigir isso para que aceite o que o nosso ERP enviar (False ou True).

Já mudamos aqui para realização de teste para “True” e o banco Sicoob retornou corretamente o BASE64 do boleto.

A conversão para PDF é por nossa conta, dentro do nosso sistema. Pois queremos utilizar o Boleto padrão do Banco, pois se eles em algum momento mudar o layout do boleto, não precisaremos ficar programando nada a mais.

Editado por Sistema Auditor
  • Membros Pro
Postado
20 horas atrás, Victor H. Gonzales - Panda disse:

Como explicado no escopo inicial e tambem pelo discord.

o Componente não trabalha hoje com o download do stream do boleto via webservices, porem como foi dito, você pode com a ficha de impressão do componente gerar seu stream próprio e transformar em base64 como você deseja.

 

um exemplo rápido e simplório (Delphi RAD12) utilizando o programa exemplo.

procedure SalvarStringEmArquivo(const AString: string; const ANomeArquivo: string);
var
  LArquivo: TextFile;
begin
  AssignFile(LArquivo, ANomeArquivo);
  try
    Rewrite(LArquivo);
    Write(LArquivo, AString);
  finally
    CloseFile(LArquivo);
  end;
end;

procedure TfrmDemoBoleto.btnImpressaoStreamClick(Sender: TObject);
var
  LMeuStream : TMemoryStream;
  LBase64 : string;
begin
  if not Assigned(FACBrBoleto.ACBrBoletoFC) then
    raise Exception.Create(MOTOR_NAO_SELECIONADO);

  LMeuStream := TMemoryStream.Create;
  try
    FACBrBoleto.ACBrBoletoFC.Filtro := fiPDF;
    FACBrBoleto.ACBrBoletoFC.PdfSenha := edtSenhaPDF.Text;
    FACBrBoleto.Imprimir(LMeuStream);

    LBase64 := TNetEncoding.Base64.EncodeBytesToString(LMeuStream.Memory, LMeuStream.Size);

    SalvarStringEmArquivo(LBase64, 'MeuArquivo.Base64');
  finally
    LMeuStream.Free;
  end;
end;

em ultima instancia, se você mesmo assim não quiser criar o stream, você pode estender a classe do componente ou criar uma classes helper personalizando o comportamento do componente.

image.png

Então @Victor H. Gonzales - Panda, eu estou querendo utilizar o layout q o Banco devolve ao marcar a opção gerarPdf igual a "true". Não quero utilizar o layout do ACBR, que ai qualquer alteração que tiver eu já vou pegar imediatamente sem me preocupar com layout pois quem vai gerar o pdf é o banco. O que estou pedindo é tão simples que eu já até alterei aqui mas toda vez q tenho q atualizar o ACBR tenho que refazer minha alteração. Por isso que estou pedindo para liberar a propriedade e deixa ela com valor default igual a "false" que não altera para ninguem e quem mudar altera esta flag.

  • Consultores
Postado

Boa tarde Douglas.

Como dito nas mensagens anteriores, o componente não trabalha com download de stream via webservices, você precisa gerar a ficha de compensação pelo componente, porem o componente permite que essa ficha seja impressa sim via stream, como mesmo demonstrado no programa exemplo do componente e acima demonstrado como converter para um base64.

procedure SalvarStringEmArquivo(const AString: string; const ANomeArquivo: string);
var
  LArquivo: TextFile;
begin
  AssignFile(LArquivo, ANomeArquivo);
  try
    Rewrite(LArquivo);
    Write(LArquivo, AString);
  finally
    CloseFile(LArquivo);
  end;
end;

procedure TfrmDemoBoleto.btnImpressaoStreamClick(Sender: TObject);
var
  LMeuStream : TMemoryStream;
  LBase64 : string;
begin
  if not Assigned(FACBrBoleto.ACBrBoletoFC) then
    raise Exception.Create(MOTOR_NAO_SELECIONADO);

  LMeuStream := TMemoryStream.Create;
  try
    FACBrBoleto.ACBrBoletoFC.Filtro := fiPDF;
    FACBrBoleto.ACBrBoletoFC.PdfSenha := edtSenhaPDF.Text;
    FACBrBoleto.Imprimir(LMeuStream);

    LBase64 := TNetEncoding.Base64.EncodeBytesToString(LMeuStream.Memory, LMeuStream.Size);

    SalvarStringEmArquivo(LBase64, 'MeuArquivo.Base64');
  finally
    LMeuStream.Free;
  end;
end;

 

Esse recurso não há disponível em todos os bancos, o "KB" retornado acaba ficando maior por conta da informação, e o componente acaba não tratando a mesma.

Diante de tudo como seu desenvolvedor é Delphi você ainda pode fazer um ClassHelper, ou até mesmo Estender a classe, para a forma que vocês querem.

  • Curtir 1
Consultor SAC ACBr

Victor H Gonzales - Pandaaa
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

"Aprender é a única coisa que a mente nunca se cansa, nunca tem medo e nunca se arrepende” - Leonardo da Vinci

"Ter sucesso é falhar repetidamente, mas sem perder o entusiasmo"

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