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 } }
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); } }