/// <summary> /// Gera as tres imagens necessárias para o Boleto /// </summary> /// <param name="lrImagemLogo">O Logo do Banco</param> /// <param name="lrImagemBarra">A Barra Horizontal</param> /// <param name="lrImagemCodigoBarra">O Código de Barras</param> void GeraGraficosParaEmailOffLine(out LinkedResource lrImagemLogo, out LinkedResource lrImagemBarra, out LinkedResource lrImagemCodigoBarra) { //OnLoad(EventArgs.Empty); var randomSufix = new Random().Next().ToString(); // para podermos colocar no mesmo email varios boletos diferentes var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BoletoNetCore.Imagens." + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"); lrImagemLogo = new LinkedResource(stream, MediaTypeNames.Image.Jpeg) { ContentId = "logo" + randomSufix }; var assembly = Assembly.GetExecutingAssembly(); var ms = assembly.GetManifestResourceStream("BoletoNetCore.Imagens.barra.jpg"); lrImagemBarra = new LinkedResource(ms, MediaTypeNames.Image.Jpeg) { ContentId = "barra" + randomSufix }; var cb = new BarCode2of5i(Boleto.CodigoBarra.CodigoDeBarras, 1, 50, Boleto.CodigoBarra.CodigoDeBarras.Length); ms = new MemoryStream(Utils.ConvertImageToByte(cb.ToBitmap())); lrImagemCodigoBarra = new LinkedResource(ms, MediaTypeNames.Image.Gif) { ContentId = "codigobarra" + randomSufix }; }
/// <summary> /// Monta o Html do boleto bancário /// </summary> /// <param name="fileName">Caminho do arquivo</param> /// <param name="fileName">Caminho do logo do cedente</param> /// <returns>Html do boleto gerado</returns> public string MontaHtml(string fileName, string logoCedente) { if (fileName == null) { fileName = Path.GetTempPath(); } if (logoCedente != null) { _vLocalLogoCedente = logoCedente; } var fnLogo = fileName + @"BoletoNet" + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"; if (!File.Exists(fnLogo)) { var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BoletoNetCore.Imagens." + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"); using (Stream file = File.Create(fnLogo)) { CopiarStream(stream, file); } } var fnBarra = fileName + @"BoletoNetBarra.gif"; if (!File.Exists(fnBarra)) { var streamBarra = Assembly.GetExecutingAssembly().GetManifestResourceStream("BoletoNetCore.Imagens.barra.gif"); using (Stream file = File.Create(fnBarra)) { CopiarStream(streamBarra, file); } /*Trecho de código abaixo não funciona em .NET Core devido a incompatibilidades de conversão/serialização. * Vide: https://github.com/dotnet/coreclr/blob/0fbd855e38bc3ec269479b5f6bf561dcfd67cbb6/src/System.Private.CoreLib/src/System/Resources/ResourceReader.cs */ //var imgConverter = new ImageConverter(); //var imgBuffer = (byte[])imgConverter.ConvertTo(Html.barra, typeof(byte[])); //var ms = new MemoryStream(imgBuffer); //using (Stream stream = File.Create(fnBarra)) //{ // CopiarStream(ms, stream); // ms.Flush(); // ms.Dispose(); //} } var fnCodigoBarras = Path.GetTempFileName(); var cb = new BarCode2of5i(Boleto.CodigoBarra.CodigoDeBarras, 1, 50, Boleto.CodigoBarra.CodigoDeBarras.Length); cb.ToBitmap().Save(fnCodigoBarras); //return HtmlOffLine(fnCorte, fnLogo, fnBarra, fnPonto, fnBarraInterna, fnCodigoBarras).ToString(); return(HtmlOffLine(null, fnLogo, fnBarra, fnCodigoBarras).ToString()); }
/// <summary> /// Função utilizada para gravar em um arquivo local o conteúdo do boleto. Este arquivo pode ser aberto em um browser sem que o site esteja no ar. /// </summary> /// <param name="fileName">Path do arquivo que deve conter o código html.</param> //public void MontaHtmlNoArquivoLocal(string fileName) //{ // using (var f = new FileStream(fileName, FileMode.Create)) // { // var w = new StreamWriter(f, Encoding.Default); // w.Write(MontaHtml()); // w.Close(); // f.Close(); // } //} /// <summary> /// Monta o Html do boleto bancário /// </summary> /// <returns>string</returns> //public string MontaHtml() //{ // return MontaHtml(null, null); //} /// <summary> /// Monta o Html do boleto bancário /// </summary> /// <param name="fileName">Caminho do arquivo</param> /// <param name="fileName">Caminho do logo do beneficiario</param> /// <returns>Html do boleto gerado</returns> //public string MontaHtml(string fileName, string logoBeneficiario) //{ // if (fileName == null) // fileName = Path.GetTempPath(); // if (logoBeneficiario != null) // _vLocalLogoBeneficiario = logoBeneficiario; // //OnLoad(EventArgs.Empty); // var fnLogo = fileName + @"BoletoNet" + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"; // if (!File.Exists(fnLogo)) // { // var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BoletoNetCore.Imagens." + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"); // using (Stream file = File.Create(fnLogo)) // { // CopiarStream(stream, file); // } // } // var fnBarra = fileName + @"BoletoNetBarra.gif"; // if (!File.Exists(fnBarra)) // { // var imgConverter = new ImageConverter(); // var imgBuffer = (byte[])imgConverter.ConvertTo(Html.barra, typeof(byte[])); // var ms = new MemoryStream(imgBuffer); // using (Stream stream = File.Create(fnBarra)) // { // CopiarStream(ms, stream); // ms.Flush(); // ms.Dispose(); // } // } // var fnCodigoBarras = Path.GetTempFileName(); // var cb = new BarCode2of5i(Boleto.CodigoBarra.CodigoDeBarras, 1, 50, Boleto.CodigoBarra.CodigoDeBarras.Length); // cb.ToBitmap().Save(fnCodigoBarras); // //return HtmlOffLine(fnCorte, fnLogo, fnBarra, fnPonto, fnBarraInterna, fnCodigoBarras).ToString(); // return HtmlOffLine(null, fnLogo, fnBarra, fnCodigoBarras).ToString(); //} /// <summary> /// Monta o Html do boleto bancário para View ASP.Net MVC /// <code> /// <para>Exemplo:</para> /// <para>public ActionResult VisualizarBoleto(string Id)</para> /// <para>{</para> /// <para> BoletoBancario bb = new BoletoBancario();</para> /// <para> //...</para> /// <para> ViewBag.Boleto = bb.MontaHtml("/Content/Boletos/", "teste1");</para> /// <para> return View();</para> /// <para>}</para> /// <para>//Na view</para> /// <para>@{Layout = null;}@Html.Raw(ViewBag.Boleto)</para> /// </code> /// </summary> /// <param name="Url">Pasta dos boletos. Exemplo MontaHtml("/Content/Boletos/", "000100")</param> /// <param name="fileName">Nome do arquivo para o boleto</param> /// <returns>Html do boleto gerado</returns> /// <desenvolvedor>Sandro Ribeiro</desenvolvedor> /// <criacao>16/11/2012</criacao> //public string MontaHtml(string url, string fileName, bool useMapPathSecure = true) //{ // //Variável para o caminho físico do servidor // var pathServer = ""; // //Verifica se o usuário informou uma url válida // if (url == null) // { // //Obriga o usuário a especificar uma url válida // throw new ArgumentException("Você precisa informar uma pasta padrão."); // } // else // { // if (useMapPathSecure) // { // //Verifica se o usuário usou barras no início e no final da url // if (url.Substring(url.Length - 1, 1) != "/") // url = url + "/"; // if (url.Substring(0, 1) != "/") // url = url + "/"; // //Mapeia o caminho físico dos arquivos // pathServer = MapPathSecure(string.Format("~{0}", url)); // } // //Verifica se o caminho existe // if (!Directory.Exists(pathServer)) // throw new ArgumentException("A o caminho físico '{0}' não existe.", pathServer); // } // //Verifica o nome do arquivo // if (fileName == null) // { // fileName = DateTime.Now.Ticks.ToString(); // } // else // { // if (fileName == "") // fileName = DateTime.Now.Ticks.ToString(); // } // //Mantive o padrão // //OnLoad(EventArgs.Empty); // //Prepara o arquivo da logo para ser salvo // var fnLogo = pathServer + @"BoletoNet" + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"; // //Prepara o arquivo da logo para ser usado no html // var fnLogoUrl = url + @"BoletoNet" + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"; // //Salvo a imagem apenas 1 vez com o código do banco // if (!File.Exists(fnLogo)) // { // var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BoletoNetCore.Imagens." + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"); // using (Stream file = File.Create(fnLogo)) // { // CopiarStream(stream, file); // } // } // //Prepara o arquivo da barra para ser salvo // var fnBarra = pathServer + @"BoletoNetBarra.gif"; // //Prepara o arquivo da barra para ser usado no html // var fnBarraUrl = url + @"BoletoNetBarra.gif"; // //Salvo a imagem apenas 1 vez // if (!File.Exists(fnBarra)) // { // var imgConverter = new ImageConverter(); // var imgBuffer = (byte[])imgConverter.ConvertTo(Html.barra, typeof(byte[])); // var ms = new MemoryStream(imgBuffer); // using (Stream stream = File.Create(fnBarra)) // { // CopiarStream(ms, stream); // ms.Flush(); // ms.Dispose(); // } // } // //Prepara o arquivo do código de barras para ser salvo // var fnCodigoBarras = string.Format("{0}{1}_codigoBarras.jpg", pathServer, fileName); // //Prepara o arquivo do código de barras para ser usado no html // var fnCodigoBarrasUrl = string.Format("{0}{1}_codigoBarras.jpg", url, fileName); // var cb = new BarCode2of5i(Boleto.CodigoBarra.CodigoDeBarras, 1, 50, Boleto.CodigoBarra.CodigoDeBarras.Length); // //Salva o arquivo conforme o fileName // cb.ToBitmap().Save(fnCodigoBarras); // //Retorna o Html para ser usado na view // return HtmlOffLine(null, fnLogoUrl, fnBarraUrl, fnCodigoBarrasUrl).ToString(); //} /// <summary> /// Monta o Html do boleto bancário com as imagens embutidas no conteúdo, sem necessidade de links externos /// de acordo com o padrão http://en.wikipedia.org/wiki/Data_URI_scheme /// /// Alterado por Olavo Rocha @ Exodus para utilizar arquivos dentro da própria DLL para .net core 2.2 /// </summary> /// <param name="convertLinhaDigitavelToImage">Converte a Linha Digitável para imagem, com o objetivo de evitar malwares.</param> /// <param name="urlImagemLogoBeneficiario">Url/Imagem Base64 da Logo do Beneficiário</param> /// <returns>Html do boleto gerado</returns> /// <desenvolvedor>Iuri André Stona, Olavo Rocha Neto</desenvolvedor> /// <criacao>23/01/2014</criacao> /// <alteracao>07/07/2019</alteracao> public string MontaHtmlEmbedded(bool convertLinhaDigitavelToImage = false, bool usaCsspdf = false, string urlImagemLogoBeneficiario = null) { //OnLoad(EventArgs.Empty); var assembly = Assembly.GetExecutingAssembly(); var streamLogo = assembly.GetManifestResourceStream("BoletoNetCore.Imagens." + Boleto.Banco.Codigo.ToString("000") + ".jpg"); var base64Logo = Convert.ToBase64String(new BinaryReader(streamLogo).ReadBytes((int)streamLogo.Length)); var fnLogo = string.Format("data:image/jpg;base64,{0}", base64Logo); var streamBarra = assembly.GetManifestResourceStream("BoletoNetCore.Imagens.barra.jpg"); var base64Barra = Convert.ToBase64String(new BinaryReader(streamBarra).ReadBytes((int)streamBarra.Length)); var fnBarra = string.Format("data:image/jpg;base64,{0}", base64Barra); var cb = new BarCode2of5i(Boleto.CodigoBarra.CodigoDeBarras, 1, 50, Boleto.CodigoBarra.CodigoDeBarras.Length); var base64CodigoBarras = Convert.ToBase64String(cb.ToByte()); var fnCodigoBarras = string.Format("data:image/gif;base64,{0}", base64CodigoBarras); if (convertLinhaDigitavelToImage) { var linhaDigitavel = Boleto.CodigoBarra.LinhaDigitavel.Replace(" ", " ").Trim(); var imagemLinha = Utils.DrawText(linhaDigitavel, new Font("Arial", 30, FontStyle.Bold), Color.Black, Color.White); var base64Linha = Convert.ToBase64String(Utils.ConvertImageToByte(imagemLinha)); var fnLinha = string.Format("data:image/gif;base64,{0}", base64Linha); Boleto.CodigoBarra.LinhaDigitavel = @"<img style=""max-width:420px; margin-bottom: 2px"" src=" + fnLinha + " />"; } if (!string.IsNullOrEmpty(urlImagemLogoBeneficiario)) { _vLocalLogoBeneficiario = urlImagemLogoBeneficiario; } var s = HtmlOffLine(null, fnLogo, fnBarra, fnCodigoBarras, usaCsspdf).ToString(); if (convertLinhaDigitavelToImage) { s = s.Replace(".w500", ""); } return(s); }
public Image GeraImagemCodigoBarras(Boleto boleto) { var cb = new BarCode2of5i(boleto.CodigoBarra.CodigoDeBarras, 1, 50, boleto.CodigoBarra.CodigoDeBarras.Length); return(cb.ToBitmap()); }
/// <summary> /// Monta o Html do boleto bancário para View ASP.Net MVC /// <code> /// <para>Exemplo:</para> /// <para>public ActionResult VisualizarBoleto(string Id)</para> /// <para>{</para> /// <para> BoletoBancario bb = new BoletoBancario();</para> /// <para> //...</para> /// <para> ViewBag.Boleto = bb.MontaHtml("/Content/Boletos/", "teste1");</para> /// <para> return View();</para> /// <para>}</para> /// <para>//Na view</para> /// <para>@{Layout = null;}@Html.Raw(ViewBag.Boleto)</para> /// </code> /// </summary> /// <param name="Url">Pasta dos boletos. Exemplo MontaHtml("/Content/Boletos/", "000100")</param> /// <param name="fileName">Nome do arquivo para o boleto</param> /// <returns>Html do boleto gerado</returns> /// <desenvolvedor>Sandro Ribeiro</desenvolvedor> /// <criacao>16/11/2012</criacao> public string MontaHtml(string url, string fileName, bool useMapPathSecure = true) { //Variável para o caminho físico do servidor var pathServer = ""; //Verifica se o usuário informou uma url válida if (url == null) { //Obriga o usuário a especificar uma url válida throw new ArgumentException("Você precisa informar uma pasta padrão."); } else { if (useMapPathSecure) { //Verifica se o usuário usou barras no início e no final da url if (url.Substring(url.Length - 1, 1) != "/") { url = url + "/"; } if (url.Substring(0, 1) != "/") { url = url + "/"; } //Mapeia o caminho físico dos arquivos // pathServer = MapPathSecure(string.Format("~{0}", url)); } //Verifica se o caminho existe if (!Directory.Exists(pathServer)) { throw new ArgumentException("A o caminho físico '{0}' não existe.", pathServer); } } //Verifica o nome do arquivo if (fileName == null) { fileName = DateTime.Now.Ticks.ToString(); } else { if (fileName == "") { fileName = DateTime.Now.Ticks.ToString(); } } //Prepara o arquivo da logo para ser salvo var fnLogo = pathServer + @"BoletoNet" + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"; //Prepara o arquivo da logo para ser usado no html var fnLogoUrl = url + @"BoletoNet" + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"; //Salvo a imagem apenas 1 vez com o código do banco if (!File.Exists(fnLogo)) { var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("BoletoNetCore.Imagens." + Utils.FormatCode(Boleto.Banco.Codigo.ToString(), 3) + ".jpg"); using (Stream file = File.Create(fnLogo)) { CopiarStream(stream, file); } } //Prepara o arquivo da barra para ser salvo var fnBarra = pathServer + @"BoletoNetBarra.gif"; //Prepara o arquivo da barra para ser usado no html var fnBarraUrl = url + @"BoletoNetBarra.gif"; //Salvo a imagem apenas 1 vez if (!File.Exists(fnBarra)) { using (var ms = new MemoryStream()) { Html.barra.Save(ms, ImageFormat.Bmp); using (Stream stream = File.Create(fnBarra)) { CopiarStream(ms, stream); ms.Flush(); ms.Dispose(); } } } //Prepara o arquivo do código de barras para ser salvo var fnCodigoBarras = string.Format("{0}{1}_codigoBarras.jpg", pathServer, fileName); //Prepara o arquivo do código de barras para ser usado no html var fnCodigoBarrasUrl = string.Format("{0}{1}_codigoBarras.jpg", url, fileName); var cb = new BarCode2of5i(Boleto.CodigoBarra.CodigoDeBarras, 1, 50, Boleto.CodigoBarra.CodigoDeBarras.Length); //Salva o arquivo conforme o fileName cb.ToBitmap().Save(fnCodigoBarras); //Retorna o Html para ser usado na view return(HtmlOffLine(null, fnLogoUrl, fnBarraUrl, fnCodigoBarrasUrl).ToString()); }