private Info PreencherTabelaHorarios(GeradorArgs args, Bitmap bmpFolhaPonto) { var info = GetInformacoes(bmpFolhaPonto, out var linhasConteudo); this.DoBeforePreencherTabelaHorarios(args, info); int indexLinha = 0; Random rnd = new Random(); foreach (int linha in linhasConteudo) { var conteudoLinha = this.DoGetConteudoLinha(args, info, indexLinha++); MesclaBitmap(bmpFolhaPonto, conteudoLinha.Inicio, new Point(SPosicaoInicio, linha), args.CorCaneta); MesclaBitmap(bmpFolhaPonto, conteudoLinha.IntervaloInicio, new Point(SPosicaoIntervaloInicio, linha), args.CorCaneta); MesclaBitmap(bmpFolhaPonto, conteudoLinha.IntervaloFim, new Point(SPosicaoIntervaloFim, linha), args.CorCaneta); MesclaBitmap(bmpFolhaPonto, conteudoLinha.Fim, new Point(SPosicaoFim, linha), args.CorCaneta); if (args.Assinar) { MesclaBitmap(bmpFolhaPonto, conteudoLinha.Assinatura, new Point(rnd.Next(SPosicaoAssinatura - 10, SPosicaoAssinatura + 10), linha), args.CorCaneta); } } this.DoAfterPreencherTabelaHorarios(args, info); return(info); }
void IGerador.Execute(GeradorArgs args) { var img = PdfToBitmap(args.PdfSourcePath); var info = this.PreencherTabelaHorarios(args, img); this.PreencherData(args, info, img); if (args.Assinar) { this.PreencherAssinatura(args, img); } this.Save(args.PdfDestinationPath, img); }
private void PreencherAssinatura(GeradorArgs args, Bitmap bmpFolhaPonto) { var delta = GeraVariacaoPosicaoAleatoria(-20, -5, 20, 0); delta.Y = -5; var assinatura = this.GetAssinatura(); var xCentralizado = SPosicaoAssinaturaLeft + (SPosicaoAssinaturaWidth - assinatura.Width) / 2; var y = GetPosicaoTopDataAssinatura(bmpFolhaPonto) - assinatura.Height; bmpFolhaPonto.Merge(assinatura, new Point(xCentralizado + delta.X, y + delta.Y), args.CorCaneta); AddNoise(bmpFolhaPonto, new Random().Next(20, 30)); }
protected override Padrao DoGetConteudoLinha(GeradorArgs args, Info info, int numeroLinha) { var path = base.GetPastaImagemAleatoria(); return(new Padrao() { Inicio = BitmapHelper.LoadIfExists(System.IO.Path.Combine(path, "inicio.png")), IntervaloInicio = BitmapHelper.LoadIfExists(System.IO.Path.Combine(path, "IntInicio.png")), IntervaloFim = BitmapHelper.LoadIfExists(System.IO.Path.Combine(path, "IntFim.png")), Fim = BitmapHelper.LoadIfExists(System.IO.Path.Combine(path, "Fim.png")), Assinatura = BitmapHelper.LoadIfExists(System.IO.Path.Combine(path, "Assinatura.png")) }); }
public int Gerar(Type geradorType, GeradorArgs args) { var pdfFiles = System.IO.Directory.GetFiles(args.PdfSourcePath, "*.pdf"); foreach (var pdfFile in pdfFiles) { IGerador gerador = GeradorFactory.Create(geradorType); var pdfOutput = System.IO.Path.Combine(args.PdfDestinationPath, System.IO.Path.GetFileName(pdfFile)); gerador.Execute(new GeradorArgs(args.CorCaneta, args.MargemAtraso, args.DetectorPeriodo, args.Assinar, pdfFile, pdfOutput)); } return(pdfFiles.Length); }
private void PreencherData(GeradorArgs args, Info info, Bitmap bmpFolhaPonto) { var delta = GeraVariacaoPosicaoAleatoria(0, -3, 2, 1); var pathImagem = GetPastaImagemAleatoria(); var date = args.DetectorPeriodo.ObterDataReferencia(args, info); if (date != default) { var dia = GeradorNumeros.FromNumber(pathImagem, info.UltimoDiaUtil, 2); var mes = GeradorNumeros.FromNumber(pathImagem, date.Month, 2); var ano = GeradorNumeros.FromNumber(pathImagem, date.Year, 4); var y = GetPosicaoTopDataAssinatura(bmpFolhaPonto) - dia.Height + delta.Y; bmpFolhaPonto.Merge(dia, new Point(SPosicaoLeftDataDia + delta.X, y), args.CorCaneta); bmpFolhaPonto.Merge(mes, new Point(SPosicaoLeftDataMes + delta.X, y), args.CorCaneta); bmpFolhaPonto.Merge(ano, new Point(SPosicaoLeftDataAno + delta.X, y), args.CorCaneta); } }
private Padrao[] GeraConteudosAleatorios(GeradorArgs args) { var pathPadrao = base.GetPastaImagemAleatoria(); var result = new List <Padrao>(); int variacaoMin = args.MargemAtraso.MinimoMinutos; int variacaoMax = args.MargemAtraso.MaximoMinutos; for (int dia = 1; dia <= 31; dia++) { result.Add(new Padrao() { Inicio = GeradorNumeros.FromTimeSpan(pathPadrao, GerarTimespanAleatorio(9, variacaoMin, variacaoMax, true)), IntervaloInicio = GeradorNumeros.FromTimeSpan(pathPadrao, GerarTimespanAleatorio(12, variacaoMin, variacaoMax, false)), IntervaloFim = GeradorNumeros.FromTimeSpan(pathPadrao, GerarTimespanAleatorio(14, variacaoMin, variacaoMax, true)), Fim = GeradorNumeros.FromTimeSpan(pathPadrao, GerarTimespanAleatorio(19, variacaoMin, variacaoMax, false)), Assinatura = BitmapHelper.LoadIfExists(System.IO.Path.Combine(pathPadrao, "Assinatura.png")) }); } return(result.ToArray()); }
public DateTime ObterDataReferencia(GeradorArgs args, Info info) { IOcr ocr = new OcrGoogleCloudVision(); var bmpFolhaPonto = info.FolhaPonto; var imgData = bmpFolhaPonto.Clone(new Rectangle(509, 68, 60, 12), bmpFolhaPonto.PixelFormat); var strData = ocr.ConvertImageToText(imgData).FirstOrDefault(); if (!string.IsNullOrWhiteSpace(strData)) { if (DateTime.TryParseExact(strData.Trim(), new string[] { "dd/MM/yyyy", "d/MM/yyyy", "dd/M/yyyy", "d/M/yyyy" }, CultureInfo.CurrentCulture, DateTimeStyles.None, out DateTime date)) { return(date); } else { throw new ArgumentException($"Erro ao obter data do documento. Data inválida. {strData}"); } } return(default);
DateTime IDetectorPeriodoFolha.ObterDataReferencia(GeradorArgs args, Info info) { var strDate = ExtratDateStringFromPath(args.PdfSourcePath); return(!string.IsNullOrEmpty(strDate) ? StringToDatetime(strDate) : default);
protected abstract Padrao DoGetConteudoLinha(GeradorArgs args, Info info, int numeroLinha);
protected virtual void DoAfterPreencherTabelaHorarios(GeradorArgs args, Info info) { }
protected override Padrao DoGetConteudoLinha(GeradorArgs args, Info info, int numeroLinha) { return(this._conteudosAleatorios[numeroLinha]); }
protected override void DoBeforePreencherTabelaHorarios(GeradorArgs args, Info info) { this._conteudosAleatorios = this.GeraConteudosAleatorios(args); }