Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }
Beispiel #6
0
        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);
Beispiel #10
0
 protected abstract Padrao DoGetConteudoLinha(GeradorArgs args, Info info, int numeroLinha);
Beispiel #11
0
 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);
 }