Closed julioverissimo88 closed 4 years ago
@julioverissimo88 Nesta versao do BoletoNet a impressao ficou externa ao componente, então vc precisa pegar o HTML e usar outro componente, por exemplo: https://www.nuget.org/packages/HtmlToPDFCore/
@carloscds A respeito da geração ser interna OK. Porem ao usar a função de geração do HTML não deveria ter recebido os bytes do HTML?
@julioverissimo88 A funcao recebe o texto do HTML.
@carloscds acho que me expressei de forma incorreta. Baseado nas Classes de teste (https://github.com/BoletoNet/BoletoNetCore/blob/master/BoletoNetCore.Testes/BancoSicoobCarteira1_01Tests.cs ) estou tentando gerar um boleto. E não consegui até o momento. Preenchendo todos os campos conforme o exemplo das classes de teste e usando a função
byte[] result = boleto.ImprimirHtml();
recebo uma exception de NotImplementedException
Estou usando a lib BoletoNetCore v3.0.1.39 baixada via NUGET
tentei também usar a função de gerar remessa (Essa não gerou erro porem também não vi o arquivo de remessa ser gerado)
Minha api é .net core 3.1
@julioverissimo88 Sugiro vc baixar o codigo daqui inicialmente e fazer o teste. Acredito que o nuget nao esta atualizado.
@carloscds baixei o repositório https://github.com/BoletoNet/BoletoNetCore/tree/master
Vinculei o Projeto na minha solução e usei a partir do código e ocorre o mesmo caso de erro.
percebi só agora pelo projeto que de fato em BoletoHelper a função ImprimirHtml que é um método de extensão do tipo Boleto realmente não está implementada.
public static byte[] ImprimirHtml(this Boleto boleto)
{
throw new NotImplementedException();
}
O projeto não possui a geração do HTML ou PDF implementada? Se não é possível obter nenhum dos dois através desse método a partir de qual método posso conseguir isso?
@julioverissimo88 Eu realmente nao sei cmo ficou a implementacao nesta versao do projeto. Precisa pegar o codigo que esta no boletonet e modificar para o Core.
@julioverissimo88 vou verificar aqui, daqui a pouco te mando um feedback.
@julioverissimo88 vou postar um exemplo aqui de como devolver um boleto a partir de um ID interno hipotético.
public IActionResult BoletoById(long id)
{
var doc = context.Documento.Include(q => q.IdBoletoAtualNavigation)
.Include(q=>q.IdClienteFornecedorNavigation).Include(q => q.IdPoliticaCobrancaNavigation)
.Include(qd => qd.IdMeioPagamentoNavigation)
.Include(q => q.IdContratoNavigation)
.Include(q => q.Boleto)
.FirstOrDefault(q => q.Id == id );
BoletoNetCore.Boleto boleto = null;
string errorMsg = "";
var bmContext = new BoletoManager(membership, context);
var boletos = doc.Boleto.Where(q => !q.IsDeleted && !string.IsNullOrEmpty(q.NossoNumero) && !q.IsBaixado.GetValueOrDefault());
var docCount = boletos.Count();
if (docCount == 0)
{
return Ok("<h1>Boleto não Encontrado. Caso seja um boleto registrado, verifique se a remessa foi registrada e sensibilizada.</h1>");
}
if (doc.IdBoletoAtualNavigation == null)
{
//modelo de transição: Boletos não registrados que não usam IdBoletoAtual - Excluir no futuro
if (docCount == 1)
{
//apenas um boleto. Perfeito! Atualiza e finaliza
doc.IdBoletoAtualNavigation = doc.Boleto.Where(q => !q.IsDeleted).FirstOrDefault();
}
if (docCount > 1)
{
//regra de transição,
doc.IdBoletoAtualNavigation = boletos.OrderByDescending(q => q.DatRegistro).ThenByDescending(q => q.NumRemessa).FirstOrDefault();
}
}
var bb = doc.IdBoletoAtualNavigation;
if (bb.IsDeleted)
return Content("<h1>O Boleto foi excluído</h1>", new MediaTypeHeaderValue("text/html"));
if (bb.IsRegistrado == false && string.IsNullOrWhiteSpace(bb.NumRegistro))
return Content("<h1>O Boleto é de carteira registrada e ainda não foi processado; Favor aguardar o registro para possibilitar a sua emissão</h1>", new MediaTypeHeaderValue("text/html"));
doc.IdBoletoAtual = doc.IdBoletoAtualNavigation.Id;
context.SaveChanges();
boleto = bmContext.BuildBoletoBancario(doc, bb, ref errorMsg, doc.IdContratoNavigation, doc.IdMeioPagamentoNavigation);
return Content(new BoletoBancario()
{
Boleto = boleto,
Banco = boleto.Banco,
}.MontaHtmlEmbedded(false), new MediaTypeHeaderValue("text/html"));
}
No caso, o método pra montar o boleto é o MontaHtmlEmbedded
@olavorn Muito Obrigado você me deu a direção correta com esse método consigo gerar o HTML do boleto O Código de barras ficou pequeno e mal posicionado porem o boleto foi gerado.
Outra dúvida é qual a função válida para gerar o arquivo de remessas? E assim de memória sabe como resolver o problema da formatação do HTML do boleto?
Na pasta BoletoNetCore/BoletoImpressao/Parts tem as partes HTML do boleto. Fique a vontade para formatar o HTML da forma como vc achar melhor. Contudo, nesse caso, você terá que buildar uma versão customizada da versão padrão da biblioteca.
Também verifique se o CSS está sendo carregado com a resposta: https://github.com/BoletoNet/BoletoNetCore/blob/master/BoletoNetCore/BoletoImpressao/BoletoNetPDF.css
@olavorn Muito Obrigado pelo seu suporte você foi certeiro em todas as suas observações como ultimo ponto. Percebi agora que o motivo pelo qual meu boleto deve estar errado deve ser por falta de preenchimento de alguma informação . Notei que minha linha digitável do boleto está vazia tem um exemplo de preenchimento do Objeto da Classe Boleto para um boleto completo? só para critério de comparação?
Acho que isso é +/- o que é necessário pra criar um Boleto usando a classe BoletoProxy
BoletoNetCoreProxy proxy = new BoletoNetCoreProxy();
mensagemErro = mensagemErro ?? "";
ClienteFornecedor cf = item.IdClienteFornecedorNavigation;
var tipoCarteira = (int)TipoCarteira.CarteiraCobrancaSimples;
var tipoFormaCadastramento = (int) (boleto.IsRegistrado ? TipoFormaCadastramento.ComRegistro : TipoFormaCadastramento.SemRegistro);
proxy.SetupCobranca(cpfCnpj, meioPagto.Nome, meioPagto.Endereco, meioPagto.NumeroEndereco, "", contrato.Bairro, contrato.Municipio, contrato.Uf, contrato.Cep, "", meioPagto.CodBanco.Value, meioPagto.Agencia, meioPagto.DigitoAgencia, null,
meioPagto.Conta, meioPagto.DigitoConta, meioPagto.CodCedente.Split("-")[0], (meioPagto.CodCedente.Split("-").Count() > 1 ? meioPagto.CodCedente.Split("-")[1] : ""), null,
meioPagto.Carteira.Split("-")[0], (meioPagto.Carteira.Split("-").Count() > 1 ? meioPagto.Carteira.Split("-")[1] : null),
tipoCarteira, tipoFormaCadastramento, (int)TipoImpressaoBoleto.Empresa, (int)TipoDocumento.Tradicional, ref mensagemErro);
proxy.NovoBoleto(ref mensagemErro);
proxy.DefinirPagador((cf.NumDocumento).GetNumbers().FormatCpfOrCnpj(), cf.Nome, cf.Endereco ?? "", cf.NumeroEndereco, cf.Complemento, cf.Bairro ?? "", cf.Cidade ?? "", cf.Estado , cf.Cep ?? "00000-000", "", ref mensagemErro);
var politica = item.IdPoliticaCobrancaNavigation;
proxy.DefinirBoleto(meioPagto.EspecieDocumento, boleto.NumDocumento.ToString(), boleto.NossoNumero, boleto.DatCriacao.Value, boleto.DatCriacao.Value, boleto.DatVencimento, boleto.Valor, boleto.NumRegistro, politica.Aceite, ref mensagemErro);
if (politica.ValorMulta > 0 || politica.PercMulta > 0)
{
proxy.DefinirMulta(boleto.DatVencimento, politica.ValorMulta ?? 0m, politica.PercMulta ?? 0m / 100m, ref mensagemErro);
//instrucaoMulta = item.IdPoliticaCobrancaNavigation.ValorMulta != null ? string.Format("Multa de R$ {0}", item.IdPoliticaCobrancaNavigation.ValorMulta) : string.Format("Multa de {0}%", item.IdPoliticaCobrancaNavigation.PercMulta);
}
if (politica.PercJurosMes > 0)
{
proxy.DefinirJuros(boleto.DatVencimento, 0, meioPagto.PercJurosMes ?? 0m / 100m, ref mensagemErro);
//instrucaoJuros = string.Format("Juros de {0}% a.m.", item.IdPoliticaCobrancaNavigation.PercJurosMes);
}
if (politica.DiasDesconto > 0)
{
proxy.DefinirDesconto(boleto.DatVencimento.AddDays(-politica.DiasDesconto.Value), politica.ValorDesconto ?? 0m + (politica.PercDesconto ?? 0m * boleto.Valor / 100m), ref mensagemErro);
//instrucaoJuros = string.Format("Juros de {0}% a.m.", item.IdPoliticaCobrancaNavigation.PercJurosMes);
}
proxy.FecharBoleto(ref mensagemErro);
//controle de boletobancario (viewModel
//Boleto2Net.BoletoBancario boletoBancario = new Boleto2Net.BoletoBancario();
//boletoBancario.Banco = Boleto2Net.Banco.Instancia( Convert.ToInt16(meioPagto.CodBanco) );
//boletoBancario.Boleto = b;
return proxy.boleto;
Estou recebendo uma exception de não implementado quando tento usar o método de gerar o HTML
byte[] result = boleto.ImprimirHtml();
Alguem tem algum exemplo válido para geração do PDF ou do HTML?