示例#1
0
        private static void GerarPDFNfce(Core.NotasFiscais.NotaFiscal notaFiscal)
        {
            Warning[] warnings;
            string[]  streamIds;
            string    mimeType  = string.Empty;
            string    encoding  = string.Empty;
            string    extension = string.Empty;

            Byte[] data;
            Bitmap qrCodeAsBitmap;
            string qrCodeUrl = GetQrCodeUrl(notaFiscal.QrCodeUrl);

            using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
            {
                Url        generator  = new Url(qrCodeUrl);
                string     payload    = generator.ToString();
                QRCodeData qrCodeData = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.Q);
                QRCode     qrCode     = new QRCode(qrCodeData);
                qrCodeAsBitmap = qrCode.GetGraphic(10);
            }

            using (var memoryStream = new MemoryStream())
            {
                qrCodeAsBitmap.Save(memoryStream, ImageFormat.Bmp);
                data = memoryStream.ToArray();
            }

            notaFiscal.Identificacao.QrCodeImage = data;

            SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

            using (ReportViewer reportViewer = new ReportViewer())
            {
                reportViewer.LocalReport.ReleaseSandboxAppDomain();

                var emitente     = notaFiscal.Emitente;
                var destinatario = notaFiscal.Destinatario ?? new Destinatario("CONSUMIDOR NÃO IDENTIFICADO");

                var produtos = notaFiscal.Produtos.Select(produto =>
                {
                    return(new Produto()
                    {
                        Codigo = produto.Codigo,
                        Descricao = produto.Descricao,
                        Quantidade = produto.QtdeUnidadeComercial,
                        ValorUnitario = produto.ValorUnidadeComercial,
                        ValorTotal = produto.ValorTotal
                    });
                }).ToList();

                var pagamentos = notaFiscal.Pagamentos.Select(pagamento =>
                {
                    return(new Pagamento()
                    {
                        Nome = pagamento.FormaPagamentoTexto,
                        Valor = pagamento.Valor
                    });
                }).ToList();

                var reportNFCeReadModel = new ReportNFCeReadModel
                {
                    Chave                   = notaFiscal.Identificacao.ChaveMasked,
                    Numero                  = notaFiscal.Identificacao.Numero,
                    Serie                   = notaFiscal.Identificacao.Serie.ToString(),
                    DataHoraEmissao         = notaFiscal.Identificacao.DataHoraEmissao,
                    Protocolo               = notaFiscal.ProtocoloAutorizacao,
                    DataHoraAutorizacao     = notaFiscal.DhAutorizacao.Replace("-", "/"),
                    InformacaoAdicional     = notaFiscal.InfoAdicional.InfoAdicionalComplementar,
                    LinkConsultaChave       = notaFiscal.Identificacao.LinkConsultaChave,
                    InformacaoInteresse     = notaFiscal.Identificacao.MensagemInteresseContribuinte,
                    QuantidadeTotalProdutos = notaFiscal.QtdTotalProdutos,
                    ValorTotalProdutos      = notaFiscal.ValorTotalProdutos,
                    QrCodeImage             = data,
                    Emissor                 = new Model.Emissor()
                    {
                        CNPJ       = emitente.CNPJ,
                        Nome       = emitente.Nome,
                        Logradouro = emitente.Endereco.Logradouro,
                        Numero     = emitente.Endereco.Numero,
                        Bairro     = emitente.Endereco.Bairro,
                        Municipio  = emitente.Endereco.Municipio,
                        UF         = emitente.Endereco.UF,
                        CEP        = emitente.Endereco.Cep
                    },
                    Destinatario = new Model.Destinatario()
                    {
                        Nome       = destinatario.NomeRazao,
                        Documento  = destinatario.DocumentoDanfe,
                        Logradouro = destinatario.Endereco != null ? destinatario.Endereco.Logradouro : null,
                        Numero     = destinatario.Endereco != null ? destinatario.Endereco.Numero : null,
                        Bairro     = destinatario.Endereco != null ? destinatario.Endereco.Bairro : null,
                        Municipio  = destinatario.Endereco != null ? destinatario.Endereco.Municipio : null,
                        UF         = destinatario.Endereco != null ? destinatario.Endereco.UF : null,
                        CEP        = destinatario.Endereco != null ? destinatario.Endereco.Cep : null
                    },
                    Produtos   = produtos,
                    Pagamentos = pagamentos
                };

                ReportDataSource dadosDataSource = new ReportDataSource()
                {
                    Name  = "Dados",
                    Value = new List <ReportNFCeReadModel>()
                    {
                        reportNFCeReadModel
                    }
                };

                ReportDataSource produtosDataSource = new ReportDataSource()
                {
                    Name  = "Produtos",
                    Value = reportNFCeReadModel.Produtos
                };

                ReportDataSource pagamentosDataSource = new ReportDataSource()
                {
                    Name  = "Pagamentos",
                    Value = reportNFCeReadModel.Pagamentos
                };

                reportViewer.LocalReport.DataSources.Add(dadosDataSource);
                reportViewer.LocalReport.DataSources.Add(produtosDataSource);
                reportViewer.LocalReport.DataSources.Add(pagamentosDataSource);

                reportViewer.ProcessingMode         = ProcessingMode.Local;
                reportViewer.LocalReport.ReportPath = Path.Combine(Directory.GetCurrentDirectory(), @"Reports\ReportNfce.rdlc");
#if DEBUG
                byte[] bytes = reportViewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);

                string pathToPdf = Path.Combine(Path.GetTempPath(), "temppdf_" + notaFiscal.Identificacao.Chave + ".pdf");
                File.WriteAllBytes(pathToPdf, bytes);
                Process.Start(pathToPdf);
#else
                PrintDocument printDoc = new PrintDocument();
                printDoc.PrinterSettings.PrinterName = @"EPSON TM-T20 Receipt";
                printDoc.PrintPage += PrintPage;
                printDoc.EndPrint  += EndPrint;

                _PrintingDPI.X = printDoc.DefaultPageSettings.PrinterResolution.X;
                _PrintingDPI.Y = printDoc.DefaultPageSettings.PrinterResolution.Y;

                var sb = new StringBuilder();
                var xr = XmlWriter.Create(sb);
                xr.WriteStartElement("DeviceInfo");
                xr.WriteElementString("OutputFormat", "EMF");
                xr.WriteElementString("PrintDpiX", _PrintingDPI.X.ToString());
                xr.WriteElementString("PrintDpiY", _PrintingDPI.Y.ToString());
                xr.WriteElementString("PageWidth", "3.14961in");
                xr.WriteElementString("MarginLeft", "0.118in");
                xr.Close();

                _PrintingStreams = new List <Stream>();

                reportViewer.LocalReport.Render("Image", sb.ToString(), CreateStream, out warnings);

                foreach (var s in _PrintingStreams)
                {
                    s.Position = 0;
                }

                printDoc.Print();
#endif
            }
        }
示例#2
0
        public static string ObterPdfEnvioNotaFiscalEmail(Core.NotasFiscais.NotaFiscal notaFiscal)
        {
            Warning[] warnings;
            string[]  streamIds;
            string    mimeType  = string.Empty;
            string    encoding  = string.Empty;
            string    extension = string.Empty;

            Byte[] data;
            Bitmap qrCodeAsBitmap;

            using (QRCodeGenerator qrGenerator = new QRCodeGenerator())
            {
                Url        generator  = new Url(notaFiscal.QrCodeUrl);
                string     payload    = generator.ToString();
                QRCodeData qrCodeData = qrGenerator.CreateQrCode(payload, QRCodeGenerator.ECCLevel.Q);
                QRCode     qrCode     = new QRCode(qrCodeData);
                qrCodeAsBitmap = qrCode.GetGraphic(10);
            }

            using (var memoryStream = new MemoryStream())
            {
                qrCodeAsBitmap.Save(memoryStream, ImageFormat.Bmp);
                data = memoryStream.ToArray();
            }

            notaFiscal.Identificacao.QrCodeImage = data;

            SqlServerTypes.Utilities.LoadNativeAssemblies(AppDomain.CurrentDomain.BaseDirectory);

            using (ReportViewer reportViewer = new ReportViewer())
            {
                reportViewer.LocalReport.ReleaseSandboxAppDomain();

                var emitente     = notaFiscal.Emitente;
                var destinatario = notaFiscal.Destinatario ?? new Destinatario("CONSUMIDOR NÃO IDENTIFICADO");

                var produtos = notaFiscal.Produtos.Select(produto =>
                {
                    return(new Produto()
                    {
                        Codigo = produto.Codigo,
                        Descricao = produto.Descricao,
                        Quantidade = produto.QtdeUnidadeComercial,
                        ValorUnitario = produto.ValorUnidadeComercial,
                        ValorTotal = produto.ValorTotal
                    });
                }).ToList();

                var pagamentos = notaFiscal.Pagamentos.Select(pagamento =>
                {
                    return(new Pagamento()
                    {
                        Nome = pagamento.FormaPagamentoTexto,
                        Valor = pagamento.Valor
                    });
                }).ToList();

                var reportNFCeReadModel = new ReportNFCeReadModel
                {
                    Chave                   = notaFiscal.Identificacao.ChaveMasked,
                    Numero                  = notaFiscal.Identificacao.Numero,
                    Serie                   = notaFiscal.Identificacao.Serie.ToString(),
                    DataHoraEmissao         = notaFiscal.Identificacao.DataHoraEmissao,
                    Protocolo               = notaFiscal.ProtocoloAutorizacao,
                    DataHoraAutorizacao     = notaFiscal.DataHoraAutorização.ToString("dd/MM/yyyy HH:mm:ss").Replace("-", "/"),
                    InformacaoAdicional     = notaFiscal.InfoAdicional.InfoAdicionalComplementar,
                    LinkConsultaChave       = notaFiscal.Identificacao.LinkConsultaChave,
                    InformacaoInteresse     = notaFiscal.Identificacao.MensagemInteresseContribuinte,
                    QuantidadeTotalProdutos = notaFiscal.QtdTotalProdutos,
                    ValorTotalProdutos      = notaFiscal.ValorTotalProdutos,
                    QrCodeImage             = data,
                    Emissor                 = new Model.Emissor()
                    {
                        CNPJ       = emitente.CNPJ,
                        Nome       = emitente.Nome,
                        Logradouro = emitente.Endereco.Logradouro,
                        Numero     = emitente.Endereco.Numero,
                        Bairro     = emitente.Endereco.Bairro,
                        Municipio  = emitente.Endereco.Municipio,
                        UF         = emitente.Endereco.UF,
                        CEP        = emitente.Endereco.Cep
                    },
                    Destinatario = new Model.Destinatario()
                    {
                        Nome       = destinatario.NomeRazao,
                        Documento  = destinatario.DocumentoDanfe,
                        Logradouro = destinatario.Endereco != null ? destinatario.Endereco.Logradouro : null,
                        Numero     = destinatario.Endereco != null ? destinatario.Endereco.Numero : null,
                        Bairro     = destinatario.Endereco != null ? destinatario.Endereco.Bairro : null,
                        Municipio  = destinatario.Endereco != null ? destinatario.Endereco.Municipio : null,
                        UF         = destinatario.Endereco != null ? destinatario.Endereco.UF : null,
                        CEP        = destinatario.Endereco != null ? destinatario.Endereco.Cep : null
                    },
                    Produtos   = produtos,
                    Pagamentos = pagamentos
                };

                ReportDataSource dadosDataSource = new ReportDataSource()
                {
                    Name  = "Dados",
                    Value = new List <ReportNFCeReadModel>()
                    {
                        reportNFCeReadModel
                    }
                };

                ReportDataSource produtosDataSource = new ReportDataSource()
                {
                    Name  = "Produtos",
                    Value = reportNFCeReadModel.Produtos
                };

                ReportDataSource pagamentosDataSource = new ReportDataSource()
                {
                    Name  = "Pagamentos",
                    Value = reportNFCeReadModel.Pagamentos
                };

                reportViewer.LocalReport.DataSources.Add(dadosDataSource);
                reportViewer.LocalReport.DataSources.Add(produtosDataSource);
                reportViewer.LocalReport.DataSources.Add(pagamentosDataSource);

                reportViewer.ProcessingMode         = ProcessingMode.Local;
                reportViewer.LocalReport.ReportPath = Path.Combine(Directory.GetCurrentDirectory(), @"Reports\ReportNfceEmail.rdlc");

                byte[] bytes = reportViewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);

                string pathToPdf = Path.Combine(Path.GetTempPath(), notaFiscal.Identificacao.Chave + ".pdf");
                File.WriteAllBytes(pathToPdf, bytes);

                return(pathToPdf);
            }
        }