예제 #1
0
        public override void Imprimir(string xmlcontent)
        {
            base.Imprimir(xmlcontent);

            _CFe = CFe.Load(new MemoryStream(Encoding.UTF8.GetBytes(xmlcontent)), Encoding.UTF8);

            #region Cabeçalho

            #region Logotipo
            if (Logotipo != null)
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.Image(Logotipo);
            }
            #endregion

            #region Dados do Emitente
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.BoldMode(PrinterModeState.On);
            _Printer.WriteLine(_CFe.InfCFe.Emit.XFant.LimitarString(ColunasNormal).RemoveAccent());

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.BoldMode(PrinterModeState.Off);
            _Printer.WriteLine(_CFe.InfCFe.Emit.XNome.LimitarString(ColunasNormal).RemoveAccent());

            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita($"Cnpj: {_CFe.InfCFe.Emit.CNPJ.FormatoCpfCnpj()}", $"I.E.: {_CFe.InfCFe.Emit.IE}", ColunasCondensadas));

            _Printer.Write("End.: ");
            _Printer.WriteLine($"{_CFe.InfCFe.Emit.EnderEmit.XLgr.RemoveAccent()},{_CFe.InfCFe.Emit.EnderEmit.Nro.RemoveAccent()} {_CFe.InfCFe.Emit.EnderEmit.XCpl.RemoveAccent()}");

            _Printer.Write("Bairro: ");
            _Printer.WriteLine($"{_CFe.InfCFe.Emit.EnderEmit.XBairro.RemoveAccent()} - {_CFe.InfCFe.Emit.EnderEmit.XMun.RemoveAccent()} - {_CFe.InfCFe.Emit.EnderEmit.CEP.FormatoCep()}");

            _Printer.CondensedMode(PrinterModeState.Off);
            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            #endregion

            #region Número do extrato
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.BoldMode(PrinterModeState.On);
            _Printer.WriteLine($"Extrato No. {_CFe.InfCFe.Ide.NCFe:D6}");
            _Printer.WriteLine($"CUPOM FISCAL ELETRONICO SAT");
            #endregion

            #region Homologação
            if (_CFe.InfCFe.Ide.TpAmb == ACBr.Net.DFe.Core.Common.DFeTipoAmbiente.Homologacao)
            {
                _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.BoldMode(PrinterModeState.On);

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.WriteLine("AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");
                }
                else
                {
                    _Printer.WriteLine("AMBIENTE DE HOMOLOGACAO");
                    _Printer.WriteLine("SEM VALOR FISCAL");
                }

                _Printer.BoldMode(PrinterModeState.Off);
                _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            }
            #endregion

            #region Documento Cancelado
            if (DocumentoCancelado)
            {
                _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.BoldMode(PrinterModeState.On);
                _Printer.WriteLine("*** DOCUMENTO CANCELADO ***");
                _Printer.BoldMode(PrinterModeState.Off);
                _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            }
            #endregion

            #region Consumidor
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.Write("CPF/CNPJ do Consumidor: ");
            _Printer.WriteLine(_CFe.InfCFe.Dest?.CPF.IsNotNull() == true ? _CFe.InfCFe.Dest.CPF.FormatoCpfCnpj() :
                               _CFe.InfCFe.Dest?.CNPJ.IsNotNull() == true ? _CFe.InfCFe.Dest.CNPJ.FormatoCpfCnpj() :
                               "000.000.000-00");
            _Printer.Write("Razao Social/Nome: ");
            _Printer.WriteLine((_CFe.InfCFe.Dest?.Nome ?? "CONSUMIDOR").LimitarString(ColunasCondensadas));
            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            #endregion

            #region Detalhes
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.BoldMode("#|COD|DESC|QTD|UN|VL UN|DESC|VL ITEM");
            }
            else
            {
                _Printer.BoldMode("COD|DESC|QTD|UN|VL UN|DESC|VL ITEM");
            }

            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

            #region Produtos
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.CondensedMode(PrinterModeState.On);
            foreach (var det in _CFe.InfCFe.Det)
            {
                string textoE = string.Empty;

                string codProd = det.Prod.CProd;
                if (UsarBarrasComoCodigo)
                {
                    codProd = $"{(UsarBarrasComoCodigo && det.Prod.CEAN.IsNotNull() ? det.Prod.CEAN : det.Prod.CProd).PadRight(13)}";
                }

                if (ProdutoDuasLinhas)
                {
                    textoE = $"{ det.NItem:D3} | {codProd}";
                }
                else
                {
                    textoE = $"{ det.NItem:D3} | {codProd} {det.Prod.XProd}";
                }

                string textoR = $"{det.Prod.QCom:N3} {det.Prod.UCom} x {det.Prod.VUnCom:N2} = {det.Prod.VItem:N2}";

                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita(textoE, textoR, ColunasCondensadas));

                if (ProdutoDuasLinhas)
                {
                    _Printer.WriteLine(det.Prod.XProd.LimitarString(ColunasCondensadas));
                }

                if (det.Prod.VOutro > 0)
                {
                    _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Acrescimos:", det.Prod.VDesc.ToString("C2", Cultura), ColunasCondensadas));
                }

                if (det.Prod.VDesc > 0)
                {
                    _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Descontos:", det.Prod.VDesc.ToString("C2", Cultura), ColunasCondensadas));
                }
            }
            _Printer.CondensedMode(PrinterModeState.Off);
            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

            #region Totais
            _Printer.BoldMode(PrinterModeState.On);
            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Qtde. total de itens:", _CFe.InfCFe.Det.Count.ToString("N0", Cultura), ColunasCondensadas));

            _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Subtotal:", _CFe.InfCFe.Total.ICMSTot.VProd.ToString("C2", Cultura), ColunasCondensadas));

            if (_CFe.InfCFe.Total.ICMSTot.VOutro > 0)
            {
                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Acrescimos:", _CFe.InfCFe.Total.ICMSTot.VOutro.ToString("C2", Cultura), ColunasCondensadas));
            }

            if (_CFe.InfCFe.Total.ICMSTot.VDesc > 0)
            {
                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Descontos:", _CFe.InfCFe.Total.ICMSTot.VDesc.ToString("C2", Cultura), ColunasCondensadas));
            }

            _Printer.CondensedMode(PrinterModeState.Off);


            _Printer.BoldMode(GereneHelpers.TextoEsquerda_Direita("Valor TOTAL:", _CFe.InfCFe.Total.VCFe.ToString("C2", Cultura), ColunasNormal));

            _Printer.BoldMode(PrinterModeState.Off);
            #endregion
            #endregion

            _Printer.NewLine();
            #endregion

            #region Pagamentos
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.CondensedMode(PrinterModeState.On);

            foreach (var _pagto in _CFe.InfCFe.Pagto.Pagamentos)
            {
                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita(_pagto.CMp.GetDescription().RemoveAccent(), _pagto.VMp.ToString("C2", Cultura), ColunasCondensadas));
            }

            _Printer.CondensedMode(PrinterModeState.Off);

            _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Troco:", _CFe.InfCFe.Pagto.VTroco.ToString("C2", Cultura), ColunasNormal));
            _Printer.NewLine();
            #endregion

            #region Rodape
            #region Dados da entrega
            if (_CFe.InfCFe.Entrega != null && !_CFe.InfCFe.Entrega.XLgr.IsNull())
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.BoldMode(PrinterModeState.On);
                _Printer.WriteLine("DADOS PARA ENTREGA");

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignLeft();
                }

                _Printer.BoldMode(PrinterModeState.Off);
                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.Write("End.: ");
                _Printer.WriteLine($"{_CFe.InfCFe.Entrega.XLgr.RemoveAccent()}, {_CFe.InfCFe.Entrega.Nro.RemoveAccent()} {_CFe.InfCFe.Entrega.XCpl.RemoveAccent()}");
                _Printer.Write("Bairro: ");
                _Printer.WriteLine($"{_CFe.InfCFe.Entrega.XBairro.RemoveAccent()} - {_CFe.InfCFe.Entrega.XMun.RemoveAccent()}/{_CFe.InfCFe.Entrega.UF}");
                _Printer.CondensedMode(PrinterModeState.Off);

                _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            }
            #endregion

            #region Observações do Fisco
            if (_CFe.InfCFe.InfAdic.ObsFisco.Any())
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignLeft();
                }

                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.BoldMode("Observacoes do Fisco");

                foreach (var fisco in _CFe.InfCFe.InfAdic.ObsFisco)
                {
                    string texto = $"{fisco.XCampo} - {fisco.XTexto}";

                    foreach (var txt in texto.Split(40))
                    {
                        _Printer.WriteLine(txt.RemoveAccent());
                    }
                }

                _Printer.NewLine();

                _Printer.CondensedMode(PrinterModeState.Off);
            }
            #endregion

            #region Observações do Contribuinte
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.BoldMode("Observacoes do Contribuinte");

            if (!_CFe.InfCFe.InfAdic.InfCpl.IsNull())
            {
                foreach (var txt in _CFe.InfCFe.InfAdic.InfCpl.Split(40))
                {
                    _Printer.WriteLine(txt.RemoveAccent());
                }
            }

            _Printer.NewLine();

            _Printer.CondensedMode(PrinterModeState.Off);

            #endregion

            #region Tributos
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.BoldMode(PrinterModeState.Off);
            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Valor aproximado dos Tributos deste Cupom", _CFe.InfCFe.Total.VCFeLei12741.ToString("C2", Cultura), ColunasCondensadas));
            _Printer.WriteLine("(Conforme Lei Fed. 12.741/2012)");
            _Printer.CondensedMode(PrinterModeState.Off);

            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            #endregion

            #region Número do extrato
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.WriteLine($"SAT No. {_CFe.InfCFe.Ide.NSerieSAT:D9}");
            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.WriteLine($"Data e Hora {_CFe.InfCFe.Ide.DEmi:dd/MM/yyyy} {_CFe.InfCFe.Ide.HEmi:HH:mm:ss}");
            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            #region Chave de Acesso
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.CondensedMode(PrinterModeState.On);
            string chave = Regex.Replace(_CFe.InfCFe.Id.OnlyNumber(), ".{4}", "$0 ");

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.BoldMode(chave);
            }
            else
            {
                _Printer.BoldMode(chave.Substring(0, 24).Trim());
                _Printer.BoldMode(chave.Substring(24).Trim());
            }

            _Printer.Code128(_CFe.InfCFe.Id.OnlyNumber().Substring(0, 22));
            _Printer.Code128(_CFe.InfCFe.Id.OnlyNumber().Substring(22));

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.NewLine();
            }

            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            #region QrCode
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            string _qrCode = $"{_CFe.InfCFe.Id.OnlyNumber()}|" +
                             $"{_CFe.InfCFe.Ide.DhEmissao:yyyyMMddHHmmss}|" +
                             $"{_CFe.InfCFe.Total.VCFe:0.00}|" +
                             $"{(_CFe.InfCFe.Dest?.CNPJ.IsNotNull() == true ? _CFe.InfCFe.Dest.CNPJ : _CFe.InfCFe.Dest.CPF)}|" +
                             $"{_CFe.InfCFe.Ide.AssinaturaQrcode}";

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.QrCode(_qrCode, QrCodeSize.Size1);
            }
            else
            {
                _Printer.QrCode(_qrCode, QrCodeSize.Size0);
            }

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.NewLine();
            }
            #endregion

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.CondensedMode(PrinterModeState.On);

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.WriteLine("Consulte o QR Code pelo aplicativo \"De olho na nota\"");
                _Printer.WriteLine("disponível na AppStore (Apple) e PlayStore (Android)");
            }
            else
            {
                _Printer.WriteLine("Consulte o QR Code pelo aplicativo");
                _Printer.WriteLine("\"De olho na nota\" disponível na");
                _Printer.WriteLine("AppStore (Apple) e PlayStore (Android)");
            }

            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            if (CortarPapel)
            {
                _Printer.PartialPaperCut();
            }

            _Printer.PrintDocument();
        }
예제 #2
0
        public void ImprimirCancelamento(string xmlContent)
        {
            base.Imprimir(xmlContent);

            _CFeCanc = CFeCanc.Load(new MemoryStream(Encoding.UTF8.GetBytes(xmlContent)), Encoding.UTF8);

            #region Logotipo
            if (Logotipo != null)
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.Image(Logotipo);
            }
            #endregion

            #region Dados do Emitente
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.BoldMode(PrinterModeState.On);
            _Printer.WriteLine((_CFeCanc.InfCFe.Emit.XFant.IsNotNull() ? _CFeCanc.InfCFe.Emit.XFant : _CFeCanc.InfCFe.Emit.XNome).LimitarString(ColunasNormal).RemoveAccent());

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.BoldMode(PrinterModeState.Off);
            _Printer.WriteLine(_CFeCanc.InfCFe.Emit.XNome.LimitarString(ColunasNormal).RemoveAccent());

            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita($"Cnpj: {_CFeCanc.InfCFe.Emit.CNPJ.FormatoCpfCnpj()}", $"I.E.: {_CFeCanc.InfCFe.Emit.IE}", ColunasCondensadas));

            _Printer.Write("End.: ");
            _Printer.WriteLine($"{_CFeCanc.InfCFe.Emit.EnderEmit.XLgr.RemoveAccent()},{_CFeCanc.InfCFe.Emit.EnderEmit.Nro.RemoveAccent()} {_CFeCanc.InfCFe.Emit.EnderEmit.XCpl.RemoveAccent()}");

            _Printer.Write("Bairro: ");
            _Printer.WriteLine($"{_CFeCanc.InfCFe.Emit.EnderEmit.XBairro.RemoveAccent()} - {_CFeCanc.InfCFe.Emit.EnderEmit.XMun.RemoveAccent()} - {_CFeCanc.InfCFe.Emit.EnderEmit.CEP.FormatoCep()}");

            _Printer.CondensedMode(PrinterModeState.Off);
            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            #endregion

            #region Número do extrato
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.BoldMode(PrinterModeState.On);
            _Printer.WriteLine($"Extrato No. {_CFeCanc.InfCFe.Ide.NCFe:D6}");
            _Printer.WriteLine($"CUPOM FISCAL ELETRONICO SAT");
            _Printer.WriteLine($"CANCELAMENTO");
            _Printer.BoldMode(PrinterModeState.Off);
            #endregion

            #region Homologação

            /*
             * if (_CFeCanc.InfCFe.Ide.TpAmb == ACBr.Net.DFe.Core.Common.DFeTipoAmbiente.Homologacao)
             * {
             *  _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
             *
             *  if (TipoPapel == TipoPapel.Tp80mm)
             *      _Printer.AlignCenter();
             *
             *  _Printer.BoldMode(PrinterModeState.On);
             *  _Printer.WriteLine("AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");
             *  _Printer.BoldMode(PrinterModeState.Off);
             *  _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
             * }
             */
            #endregion

            #region Dados do cupom cancelado
            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.BoldMode("DADOS DO CUPOM FISCAL ELETRONICO CANCELADO");
            }
            else
            {
                _Printer.BoldMode("DADOS DO CUPOM FISCAL");
                _Printer.BoldMode("ELETRONICO CANCELADO");
            }

            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.Write("CPF/CNPJ do Consumidor: ");
            _Printer.WriteLine(_CFeCanc.InfCFe.Dest?.CPF.IsNotNull() == true ? _CFeCanc.InfCFe.Dest.CPF.FormatoCpfCnpj() :
                               _CFeCanc.InfCFe.Dest?.CNPJ.IsNotNull() == true ? _CFeCanc.InfCFe.Dest.CNPJ.FormatoCpfCnpj() :
                               "000.000.000-00");
            _Printer.BoldMode(GereneHelpers.TextoEsquerda_Direita("Valor total:", _CFeCanc.InfCFe.Total.VCFe.ToString("C2", Cultura), ColunasCondensadas));

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.NewLine();
            }

            _Printer.CondensedMode(PrinterModeState.Off);

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.WriteLine($"SAT No. {_CFeCanc.InfCFe.Ide.NSerieSAT:D9}");
            _Printer.WriteLine($"Data e Hora {_CFeCanc.InfCFe.Ide.DEmi:dd/MM/yyyy} {_CFeCanc.InfCFe.Ide.HEmi:HH:mm:ss}");

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.CondensedMode(PrinterModeState.On);
            #region Chave de Acesso
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.NewLine();
            }

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            string chave = Regex.Replace(_CFeCanc.InfCFe.ChCanc.OnlyNumber(), ".{4}", "$0 ");

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.BoldMode(chave);
            }
            else
            {
                _Printer.BoldMode(chave.Substring(0, 24).Trim());
                _Printer.BoldMode(chave.Substring(24).Trim());
            }

            _Printer.Code128(_CFeCanc.InfCFe.ChCanc.OnlyNumber().Substring(0, 24));
            _Printer.Code128(_CFeCanc.InfCFe.ChCanc.OnlyNumber().Substring(24));

            _Printer.NewLine();
            #endregion

            _Printer.CondensedMode(PrinterModeState.Off);

            #region QrCode
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            string _qrCode = $"{_CFeCanc.InfCFe.ChCanc.OnlyNumber()}|" +
                             $"{_CFeCanc.InfCFe.Ide.DhEmissao:yyyyMMddHHmmss}|" +
                             $"{_CFeCanc.InfCFe.Ide.DhEmissao:0.00}|" +
                             $"{(_CFeCanc.InfCFe.Dest?.CNPJ.IsNotNull() == true ? _CFeCanc.InfCFe.Dest.CNPJ : _CFeCanc.InfCFe.Dest.CPF)}|" +
                             $"{_CFeCanc.InfCFe.Ide.AssinaturaQrcode}";

            _Printer.QrCode(_qrCode, TipoPapel == TipoPapel.Tp80mm ? QrCodeSize.Size1 : QrCodeSize.Size0);

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.NewLine();
            }
            #endregion

            #endregion

            #region Dados do cupom cancelado
            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.BoldMode("DADOS DO CUPOM FISCAL ELETRONICO DE CANCELAMENTO");
            }
            else
            {
                _Printer.BoldMode("DADOS DO CUPOM FISCAL");
                _Printer.BoldMode("ELETRONICO DE CANCELAMENTO");
            }

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.WriteLine($"SAT No. {_CFeCanc.InfCFe.Ide.NSerieSAT:D9}");
            _Printer.WriteLine($"Data e Hora {_CFeCanc.InfCFe.Ide.DEmi:dd/MM/yyyy} {_CFeCanc.InfCFe.Ide.HEmi:HH:mm:ss}");

            #region Chave de Acesso
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.CondensedMode(PrinterModeState.On);

            string chave2 = Regex.Replace(_CFeCanc.InfCFe.Id.OnlyNumber(), ".{4}", "$0 ");

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.BoldMode(chave2);
            }
            else
            {
                _Printer.BoldMode(chave2.Substring(0, 24).Trim());
                _Printer.BoldMode(chave2.Substring(24).Trim());
            }

            _Printer.Code128(_CFeCanc.InfCFe.Id.OnlyNumber().Substring(0, 24));
            _Printer.Code128(_CFeCanc.InfCFe.Id.OnlyNumber().Substring(24));

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.NewLine();
            }
            #endregion

            _Printer.CondensedMode(PrinterModeState.Off);

            #region QrCode
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            string _qrCodeCancel = $"{_CFeCanc.InfCFe.Id.OnlyNumber()}|" +
                                   $"{_CFeCanc.InfCFe.Ide.DhEmissao:yyyyMMddHHmmss}|" +
                                   $"{_CFeCanc.InfCFe.Total.VCFe:0.00}|" +
                                   $"{(_CFeCanc.InfCFe.Dest?.CNPJ.IsNotNull() == true ? _CFeCanc.InfCFe.Dest.CNPJ : _CFeCanc.InfCFe.Dest.CPF)}|" +
                                   $"{_CFeCanc.InfCFe.Ide.AssinaturaQrcode}";

            _Printer.QrCode(_qrCodeCancel, TipoPapel == TipoPapel.Tp80mm ? QrCodeSize.Size1 : QrCodeSize.Size0);

            _Printer.NewLine();
            #endregion

            #endregion

            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

            #region Desenvolvedor
            if (Desenvolvedor.IsNotNull())
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignRight();
                }

                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.CondensedMode(Desenvolvedor);
                _Printer.CondensedMode(PrinterModeState.Off);
            }
            #endregion

            if (CortarPapel)
            {
                _Printer.PartialPaperCut();
            }

            _Printer.PrintDocument();
        }
예제 #3
0
        public override void Imprimir(string xmlcontent)
        {
            base.Imprimir(xmlcontent);

            bool isOffline = false;

            //Fora do estado de SP pode haver a impressão de NFCe offline, ou seja, sem a tag NFeProc
            if (xmlcontent.ToLower().Contains("<nfeproc"))
            {
                _NFCe = new NotaFiscal().CarregarDeXmlString(xmlcontent);
            }
            else
            {
                _NFCe = new NotaFiscal()
                {
                    NFe     = new NFe.Classes.NFe().CarregarDeXmlString(xmlcontent),
                    protNFe = new NFe.Classes.Protocolo.protNFe()
                };

                _NFCe.versao = _NFCe.NFe.infNFe.versao;

                isOffline = true;
            }

            #region Cabeçalho

            #region Logotipo
            if (Logotipo != null)
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.Image(Logotipo);
            }
            #endregion

            #region Dados do Emitente
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.BoldMode(PrinterModeState.On);
            _Printer.WriteLine(_NFCe.NFe.infNFe.emit.xFant.LimitarString(ColunasNormal).RemoverAcentos());

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.BoldMode(PrinterModeState.Off);
            _Printer.WriteLine(_NFCe.NFe.infNFe.emit.xNome.LimitarString(ColunasNormal).RemoverAcentos());

            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita($"Cnpj: {_NFCe.NFe.infNFe.emit.CNPJ.FormatoCpfCnpj()}", $"I.E.: {_NFCe.NFe.infNFe.emit.IE}", ColunasCondensadas));

            _Printer.Write("End.: ");
            _Printer.WriteLine($"{_NFCe.NFe.infNFe.emit.enderEmit.xLgr.RemoverAcentos()},{_NFCe.NFe.infNFe.emit.enderEmit.nro.RemoverAcentos()} {_NFCe.NFe.infNFe.emit.enderEmit.xCpl.RemoverAcentos()}");

            _Printer.Write("Bairro: ");
            _Printer.WriteLine($"{_NFCe.NFe.infNFe.emit.enderEmit.xBairro.RemoverAcentos()} - {_NFCe.NFe.infNFe.emit.enderEmit.xMun.RemoverAcentos()} - {_NFCe.NFe.infNFe.emit.enderEmit.CEP.FormatoCep()}");

            _Printer.CondensedMode(PrinterModeState.Off);

            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

            #endregion

            #region DANFE e Via
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.BoldMode("DANFE NFC-e");
            _Printer.CondensedMode(PrinterModeState.On);

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.BoldMode("Documento Auxiliar da Nota Fiscal de Consumidor Eletronica");
            }
            else
            {
                _Printer.BoldMode("Documento Auxiliar da");
                _Printer.BoldMode("Nota Fiscal de Consumidor Eletronica");
            }

            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            #region Impressão Offline
            if (isOffline)
            {
                _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.BoldMode("*** DOCUMENTO EMITIDO OFFLINE ***");
            }
            #endregion

            #region Homologação
            if (_NFCe.NFe.infNFe.ide.tpAmb == TipoAmbiente.Homologacao)
            {
                _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.BoldMode(PrinterModeState.On);

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.WriteLine("AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");
                }
                else
                {
                    _Printer.WriteLine("AMBIENTE DE HOMOLOGACAO");
                    _Printer.WriteLine("SEM VALOR FISCAL");
                }

                _Printer.BoldMode(PrinterModeState.Off);
            }
            #endregion

            #region Documento Cancelado
            if (DocumentoCancelado)
            {
                _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.BoldMode(PrinterModeState.On);
                _Printer.WriteLine("*** DOCUMENTO CANCELADO ***");
                _Printer.BoldMode(PrinterModeState.Off);
            }
            #endregion

            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            #endregion

            #region Detalhes
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.BoldMode("#|COD|DESC|QTD|UN|VL UN|DESC|VL ITEM");
            }
            else
            {
                _Printer.BoldMode("COD|DESC|QTD|UN|VL UN|DESC|VL ITEM");
            }

            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

            #region Produtos
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.CondensedMode(PrinterModeState.On);
            foreach (var det in _NFCe.NFe.infNFe.det)
            {
                string codProd = det.prod.cProd;
                if (UsarBarrasComoCodigo)
                {
                    codProd = $"{(UsarBarrasComoCodigo && det.prod.cEAN.IsNotNull() ? det.prod.cEAN : det.prod.cProd).PadRight(13)}";
                }

                string textoE;
                if (ProdutoDuasLinhas)
                {
                    textoE = $"{ det.nItem:D3} | {codProd}";
                }
                else
                {
                    textoE = $"{ det.nItem:D3} | {codProd} {det.prod.xProd}";
                }

                string textoR = $"{det.prod.qCom.ToString($"N{CasasDecimaisQuantidade}")} {det.prod.uCom} x {det.prod.vUnCom:N2} = {det.prod.vProd:N2}";

                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita(textoE, textoR, ColunasCondensadas));

                if (ProdutoDuasLinhas)
                {
                    _Printer.WriteLine(det.prod.xProd.LimitarString(ColunasCondensadas));
                }

                if (det.prod.vOutro.HasValue && det.prod.vOutro.Value > 0)
                {
                    _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Acrescimos:", det.prod.vOutro.Value.ToString("C2", Cultura), ColunasCondensadas));
                }

                if (det.prod.vDesc.HasValue && det.prod.vDesc.Value > 0)
                {
                    _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Descontos:", det.prod.vDesc.Value.ToString("C2", Cultura), ColunasCondensadas));
                }
            }
            _Printer.CondensedMode(PrinterModeState.Off);
            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));

            #region Totais
            _Printer.BoldMode(PrinterModeState.On);
            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Qtde. total de itens:", _NFCe.NFe.infNFe.det.Count.ToString("N0", Cultura), ColunasCondensadas));

            _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Subtotal:", _NFCe.NFe.infNFe.total.ICMSTot.vProd.ToString("C2", Cultura), ColunasCondensadas));

            if (_NFCe.NFe.infNFe.total.ICMSTot.vOutro > 0)
            {
                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Acrescimos:", _NFCe.NFe.infNFe.total.ICMSTot.vOutro.ToString("C2", Cultura), ColunasCondensadas));
            }

            if (_NFCe.NFe.infNFe.total.ICMSTot.vDesc > 0)
            {
                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Descontos:", _NFCe.NFe.infNFe.total.ICMSTot.vDesc.ToString("C2", Cultura), ColunasCondensadas));
            }

            if (_NFCe.NFe.infNFe.total.ICMSTot.vFrete > 0)
            {
                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Frete:", _NFCe.NFe.infNFe.total.ICMSTot.vFrete.ToString("C2", Cultura), ColunasCondensadas));
            }

            if (_NFCe.NFe.infNFe.total.ICMSTot.vSeg > 0)
            {
                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Seguro:", _NFCe.NFe.infNFe.total.ICMSTot.vSeg.ToString("C2", Cultura), ColunasCondensadas));
            }

            if (_NFCe.NFe.infNFe.total.ICMSTot.vDesc > 0)
            {
                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Descontos:", _NFCe.NFe.infNFe.total.ICMSTot.vDesc.ToString("C2", Cultura), ColunasCondensadas));
            }


            _Printer.CondensedMode(PrinterModeState.Off);

            _Printer.BoldMode(GereneHelpers.TextoEsquerda_Direita("Valor TOTAL:", _NFCe.NFe.infNFe.total.ICMSTot.vNF.ToString("C2", Cultura), ColunasNormal));

            _Printer.BoldMode(PrinterModeState.Off);
            #endregion
            #endregion

            _Printer.NewLine();
            #endregion

            #region Pagamentos
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            bool imprimiutroco = false;
            foreach (var _pagto in _NFCe.NFe.infNFe.pag)
            {
                _Printer.CondensedMode(PrinterModeState.On);

                foreach (var _detpagto in _pagto.detPag)
                {
                    _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita(_detpagto.tPag.Descricao().RemoverAcentos(), _detpagto.vPag.ToString("C2", Cultura), ColunasCondensadas));
                }

                _Printer.CondensedMode(PrinterModeState.Off);

                if (_pagto.vTroco.HasValue && _pagto.vTroco.Value > 0)
                {
                    imprimiutroco = true;
                    _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Troco:", _pagto.vTroco.Value.ToString("C2", Cultura), ColunasNormal));
                }
            }

            if (!imprimiutroco)
            {
                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Troco:", 0.ToString("C2", Cultura), ColunasNormal));
            }

            _Printer.NewLine();
            #endregion

            #region Rodape
            #region Dados da entrega
            if (_NFCe.NFe.infNFe.entrega != null && !_NFCe.NFe.infNFe.entrega.xLgr.IsNull())
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.BoldMode(PrinterModeState.On);
                _Printer.WriteLine("DADOS PARA ENTREGA");

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignLeft();
                }

                _Printer.BoldMode(PrinterModeState.Off);
                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.Write("End.: ");
                _Printer.WriteLine($"{_NFCe.NFe.infNFe.entrega.xLgr.RemoverAcentos()}, {_NFCe.NFe.infNFe.entrega.nro.RemoverAcentos()} {_NFCe.NFe.infNFe.entrega.xCpl.RemoverAcentos()}");
                _Printer.Write("Bairro: ");
                _Printer.WriteLine($"{_NFCe.NFe.infNFe.entrega.xBairro.RemoverAcentos()} - {_NFCe.NFe.infNFe.entrega.xMun.RemoverAcentos()}/{_NFCe.NFe.infNFe.entrega.UF}");
                _Printer.CondensedMode(PrinterModeState.Off);

                _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            }
            #endregion

            #region Observações do Fisco
            if (_NFCe.NFe.infNFe.infAdic != null && (_NFCe.NFe.infNFe.infAdic.obsFisco.Any() || _NFCe.NFe.infNFe.infAdic.infAdFisco.IsNotNull()))
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignLeft();
                }

                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.BoldMode("Observacoes do Fisco");

                foreach (var fisco in _NFCe.NFe.infNFe.infAdic.obsFisco)
                {
                    string texto = $"{fisco.xCampo} - {fisco.xTexto}";

                    foreach (var txt in texto.WrapText(ColunasCondensadas))
                    {
                        _Printer.WriteLine(txt.RemoverAcentos());
                    }
                }

                if (_NFCe.NFe.infNFe.infAdic.infAdFisco.IsNotNull())
                {
                    _Printer.WriteLine(_NFCe.NFe.infNFe.infAdic.infAdFisco.RemoverAcentos());
                }

                _Printer.NewLine();

                _Printer.CondensedMode(PrinterModeState.Off);
            }
            #endregion

            #region Observações do Contribuinte
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignLeft();
            }

            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.BoldMode("Observacoes do Contribuinte");

            if (_NFCe.NFe.infNFe.infAdic != null && _NFCe.NFe.infNFe.infAdic.infCpl.IsNotNull())
            {
                foreach (var txt in _NFCe.NFe.infNFe.infAdic.infCpl.WrapText(ColunasCondensadas))
                {
                    _Printer.WriteLine(txt.RemoverAcentos());
                }
            }

            _Printer.NewLine();

            _Printer.CondensedMode(PrinterModeState.Off);

            #endregion

            #region Tributos
            if (ImprimirDeOlhoNoImposto)
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignLeft();
                }

                _Printer.BoldMode(PrinterModeState.Off);
                _Printer.CondensedMode(PrinterModeState.On);

                _Printer.WriteLine(GereneHelpers.TextoEsquerda_Direita("Valor aproximado dos Tributos deste Cupom", _NFCe.NFe.infNFe.total.ICMSTot.vTotTrib.ToString("C2", Cultura), ColunasCondensadas));
                _Printer.WriteLine("(Conforme Lei Fed. 12.741/2012)");

                _Printer.CondensedMode(PrinterModeState.Off);
            }
            #endregion

            #region Consumidor
            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            if (_NFCe.NFe.infNFe.dest != null)
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignLeft();
                }

                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.Write("CPF/CNPJ do Consumidor: ");
                _Printer.WriteLine(_NFCe.NFe.infNFe.dest?.CPF.IsNotNull() == true ? _NFCe.NFe.infNFe.dest.CPF.FormatoCpfCnpj() :
                                   _NFCe.NFe.infNFe.dest?.CNPJ.IsNotNull() == true ? _NFCe.NFe.infNFe.dest.CNPJ.FormatoCpfCnpj() :
                                   "000.000.000-00");
                _Printer.Write("Razao Social/Nome: ");


                _Printer.WriteLine((_NFCe.NFe.infNFe.dest?.xNome ?? "CONSUMIDOR").LimitarString(ColunasCondensadas));
                _Printer.CondensedMode(PrinterModeState.Off);
            }
            else
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignLeft();
                }

                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.BoldMode("CONSUMIDOR NAO IDENTIFICADO");
                _Printer.CondensedMode(PrinterModeState.Off);
            }
            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            #endregion

            #region Número e série do documento
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.BoldMode(PrinterModeState.On);
            _Printer.WriteLine($"No.: {_NFCe.NFe.infNFe.ide.nNF:D9} Serie: {_NFCe.NFe.infNFe.ide.serie:D3}");
            _Printer.WriteLine($"Emissao: {_NFCe.NFe.infNFe.ide.dhEmi:dd/MM/yyyy HH:mm:ss}");
            _Printer.BoldMode(PrinterModeState.Off);
            _Printer.WriteLine(NomeDaVia);

            _Printer.CondensedMode(string.Empty.PadLeft(ColunasCondensadas, '-'));
            #endregion

            #region Chave de Acesso
            _Printer.CondensedMode(PrinterModeState.On);

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.WriteLine("Consulte pela chave de acesso em:");
            _Printer.WriteLine(_NFCe.NFe.infNFeSupl.urlChave);

            _Printer.WriteLine("Chave de Acesso");

            string chave = Regex.Replace(_NFCe.NFe.infNFe.Id.OnlyNumber(), ".{4}", "$0 ");
            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.BoldMode(chave);
            }
            else
            {
                _Printer.BoldMode(chave.Substring(0, 24).Trim());
                _Printer.BoldMode(chave.Substring(24).Trim());
            }

            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            #region QrCode
            if (_NFCe.NFe.infNFeSupl != null && _NFCe.NFe.infNFeSupl.qrCode.IsNotNull())
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.BoldMode("Consulta via leitor de QR Code");
                _Printer.CondensedMode(PrinterModeState.Off);

                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignCenter();
                }

                _Printer.QrCode(_NFCe.NFe.infNFeSupl.qrCode, QrCodeSize.Size1);

                _Printer.NewLine();
            }
            #endregion

            if (TipoPapel == TipoPapel.Tp80mm)
            {
                _Printer.AlignCenter();
            }

            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.WriteLine("Protocolo de autorizacao");
            _Printer.WriteLine($"{_NFCe.protNFe.infProt.nProt} {_NFCe.protNFe.infProt.dhRecbto:@dd/MM/yyyy HH:mm:ss}");

            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            #region Desenvolvedor
            if (Desenvolvedor.IsNotNull())
            {
                if (TipoPapel == TipoPapel.Tp80mm)
                {
                    _Printer.AlignRight();
                }

                _Printer.CondensedMode(Desenvolvedor);
            }
            #endregion

            if (CortarPapel)
            {
                _Printer.PartialPaperCut();
            }

            _Printer.PrintDocument();
        }
        public void Imprimir(string xmlcontent)
        {
            _NFCe = new NotaFiscal().CarregarDeXmlString(xmlcontent);

            _Printer = new Printer(NomeImpressora, TipoImpressora);

            #region Cabeçalho

            #region Logotipo
            if (Logotipo != null)
            {
                //Impressão do logotipo ainda não implementada
            }
            #endregion

            #region Dados do Emitente
            _Printer.AlignCenter();
            _Printer.BoldMode(PrinterModeState.On);
            _Printer.Append(_NFCe.NFe.infNFe.emit.xFant.LimitarString(_Printer.ColsNomal).RemoverAcentos());

            _Printer.AlignLeft();
            _Printer.BoldMode(PrinterModeState.Off);
            _Printer.Append(_NFCe.NFe.infNFe.emit.xNome.LimitarString(_Printer.ColsNomal).RemoverAcentos());

            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.Append(GereneHelpers.TextoEsquerda_Direita($"Cnpj: {_NFCe.NFe.infNFe.emit.CNPJ.FormatoCpfCnpj()}", $"I.E.: {_NFCe.NFe.infNFe.emit.IE}", _Printer.ColsCondensed));

            _Printer.AppendWithoutLf("End.: ");
            _Printer.Append($"{_NFCe.NFe.infNFe.emit.enderEmit.xLgr.RemoverAcentos()},{_NFCe.NFe.infNFe.emit.enderEmit.nro.RemoverAcentos()} {_NFCe.NFe.infNFe.emit.enderEmit.xCpl.RemoverAcentos()}");

            _Printer.AppendWithoutLf("Bairro: ");
            _Printer.Append($"{_NFCe.NFe.infNFe.emit.enderEmit.xBairro.RemoverAcentos()} - {_NFCe.NFe.infNFe.emit.enderEmit.xMun.RemoverAcentos()} - {_NFCe.NFe.infNFe.emit.enderEmit.CEP.FormatoCep()}");

            _Printer.CondensedMode(PrinterModeState.Off);
            _Printer.Separator();
            #endregion

            #region DANFE e Via
            _Printer.AlignCenter();
            _Printer.BoldMode("DANFE NFC-e");
            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.BoldMode("Documento Auxiliar da Nota Fiscal de Consumidor Eletronica");
            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            #region Homologação
            if (_NFCe.NFe.infNFe.ide.tpAmb == TipoAmbiente.Homologacao)
            {
                _Printer.Separator();
                _Printer.AlignCenter();
                _Printer.BoldMode(PrinterModeState.On);
                _Printer.Append("AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");
                _Printer.BoldMode(PrinterModeState.Off);
            }
            #endregion

            #region Documento Cancelado
            if (DocumentoCancelado)
            {
                _Printer.Separator();
                _Printer.AlignCenter();
                _Printer.BoldMode(PrinterModeState.On);
                _Printer.Append("*** DOCUMENTO CANCELADO ***");
                _Printer.BoldMode(PrinterModeState.Off);
            }
            #endregion

            _Printer.Separator();
            #endregion

            #region Detalhes
            _Printer.AlignCenter();
            _Printer.BoldMode("#|COD|DESC|QTD|UN|VL UN|DESC|VL ITEM");
            _Printer.Separator();

            #region Produtos
            _Printer.AlignLeft();
            _Printer.CondensedMode(PrinterModeState.On);
            foreach (var det in _NFCe.NFe.infNFe.det)
            {
                string codProd = det.prod.cProd;
                if (UsarBarrasComoCodigo)
                {
                    codProd = $"{(UsarBarrasComoCodigo && det.prod.cEAN.IsNotNull() ? det.prod.cEAN : det.prod.cProd).PadRight(13)}";
                }

                string textoE;
                if (ProdutoDuasLinhas)
                {
                    textoE = $"{ det.nItem:D3} | {codProd}";
                }
                else
                {
                    textoE = $"{ det.nItem:D3} | {codProd} {det.prod.xProd}";
                }

                string textoR = $"{det.prod.qCom:N3} {det.prod.uCom} x {det.prod.vUnCom:N2} = {det.prod.vProd:N2}";

                _Printer.Append(GereneHelpers.TextoEsquerda_Direita(textoE, textoR, _Printer.ColsCondensed));

                if (ProdutoDuasLinhas)
                {
                    _Printer.Append(det.prod.xProd.LimitarString(_Printer.ColsCondensed));
                }

                if (det.prod.vOutro.HasValue && det.prod.vOutro.Value > 0)
                {
                    _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Acrescimos:", det.prod.vOutro.Value.ToString("C2", _Cultura), _Printer.ColsCondensed));
                }

                if (det.prod.vDesc.HasValue && det.prod.vDesc.Value > 0)
                {
                    _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Descontos:", det.prod.vDesc.Value.ToString("C2", _Cultura), _Printer.ColsCondensed));
                }
            }
            _Printer.CondensedMode(PrinterModeState.Off);
            _Printer.Separator();

            #region Totais
            _Printer.BoldMode(PrinterModeState.On);
            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Qtde. total de itens:", _NFCe.NFe.infNFe.det.Count.ToString("N0", _Cultura), _Printer.ColsCondensed));

            _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Subtotal:", _NFCe.NFe.infNFe.total.ICMSTot.vProd.ToString("C2", _Cultura), _Printer.ColsCondensed));

            if (_NFCe.NFe.infNFe.total.ICMSTot.vOutro > 0)
            {
                _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Acrescimos:", _NFCe.NFe.infNFe.total.ICMSTot.vOutro.ToString("C2", _Cultura), _Printer.ColsCondensed));
            }

            if (_NFCe.NFe.infNFe.total.ICMSTot.vDesc > 0)
            {
                _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Descontos:", _NFCe.NFe.infNFe.total.ICMSTot.vDesc.ToString("C2", _Cultura), _Printer.ColsCondensed));
            }

            if (_NFCe.NFe.infNFe.total.ICMSTot.vFrete > 0)
            {
                _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Frete:", _NFCe.NFe.infNFe.total.ICMSTot.vFrete.ToString("C2", _Cultura), _Printer.ColsCondensed));
            }

            if (_NFCe.NFe.infNFe.total.ICMSTot.vSeg > 0)
            {
                _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Seguro:", _NFCe.NFe.infNFe.total.ICMSTot.vSeg.ToString("C2", _Cultura), _Printer.ColsCondensed));
            }

            if (_NFCe.NFe.infNFe.total.ICMSTot.vDesc > 0)
            {
                _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Descontos:", _NFCe.NFe.infNFe.total.ICMSTot.vDesc.ToString("C2", _Cultura), _Printer.ColsCondensed));
            }


            _Printer.CondensedMode(PrinterModeState.Off);

            _Printer.BoldMode(GereneHelpers.TextoEsquerda_Direita("Valor TOTAL:", _NFCe.NFe.infNFe.total.ICMSTot.vNF.ToString("C2", _Cultura), _Printer.ColsNomal));

            _Printer.BoldMode(PrinterModeState.Off);
            #endregion
            #endregion

            _Printer.NewLine();
            #endregion

            #region Pagamentos
            _Printer.AlignLeft();

            bool imprimiutroco = false;
            foreach (var _pagto in _NFCe.NFe.infNFe.pag)
            {
                _Printer.CondensedMode(PrinterModeState.On);

                foreach (var _detpagto in _pagto.detPag)
                {
                    _Printer.Append(GereneHelpers.TextoEsquerda_Direita(_detpagto.tPag.Descricao().RemoverAcentos(), _detpagto.vPag.ToString("C2", _Cultura), _Printer.ColsCondensed));
                }

                _Printer.CondensedMode(PrinterModeState.Off);

                if (_pagto.vTroco.HasValue && _pagto.vTroco.Value > 0)
                {
                    imprimiutroco = true;
                    _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Troco:", _pagto.vTroco.Value.ToString("C2", _Cultura), _Printer.ColsNomal));
                }
            }

            if (!imprimiutroco)
            {
                _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Troco:", 0.ToString("C2", _Cultura), _Printer.ColsNomal));
            }

            _Printer.NewLine();
            #endregion

            #region Rodape
            #region Dados da entrega
            if (_NFCe.NFe.infNFe.entrega != null && !_NFCe.NFe.infNFe.entrega.xLgr.IsNull())
            {
                _Printer.AlignCenter();
                _Printer.BoldMode(PrinterModeState.On);
                _Printer.Append("DADOS PARA ENTREGA");

                _Printer.AlignLeft();
                _Printer.BoldMode(PrinterModeState.Off);
                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.AppendWithoutLf("End.: ");
                _Printer.Append($"{_NFCe.NFe.infNFe.entrega.xLgr.RemoverAcentos()}, {_NFCe.NFe.infNFe.entrega.nro.RemoverAcentos()} {_NFCe.NFe.infNFe.entrega.xCpl.RemoverAcentos()}");
                _Printer.AppendWithoutLf("Bairro: ");
                _Printer.Append($"{_NFCe.NFe.infNFe.entrega.xBairro.RemoverAcentos()} - {_NFCe.NFe.infNFe.entrega.xMun.RemoverAcentos()}/{_NFCe.NFe.infNFe.entrega.UF}");
                _Printer.CondensedMode(PrinterModeState.Off);

                _Printer.Separator();
            }
            #endregion

            #region Observações do Fisco
            if (_NFCe.NFe.infNFe.infAdic.obsFisco.Any() || _NFCe.NFe.infNFe.infAdic.infAdFisco.IsNotNull())
            {
                _Printer.AlignLeft();
                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.BoldMode("Observacoes do Fisco");

                foreach (var fisco in _NFCe.NFe.infNFe.infAdic.obsFisco)
                {
                    string texto = $"{fisco.xCampo} - {fisco.xTexto}";

                    foreach (var txt in texto.Split(40))
                    {
                        _Printer.Append(txt.RemoverAcentos());
                    }
                }

                if (_NFCe.NFe.infNFe.infAdic.infAdFisco.IsNotNull())
                {
                    _Printer.Append(_NFCe.NFe.infNFe.infAdic.infAdFisco.RemoverAcentos());
                }

                _Printer.NewLine();

                _Printer.CondensedMode(PrinterModeState.Off);
            }
            #endregion

            #region Observações do Contribuinte
            _Printer.AlignLeft();
            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.BoldMode("Observacoes do Contribuinte");

            if (_NFCe.NFe.infNFe.infAdic.infCpl.IsNotNull())
            {
                foreach (var txt in _NFCe.NFe.infNFe.infAdic.infCpl.Split(40))
                {
                    _Printer.Append(txt.RemoverAcentos());
                }
            }

            _Printer.NewLine();

            _Printer.CondensedMode(PrinterModeState.Off);

            #endregion

            #region Tributos
            _Printer.AlignLeft();
            _Printer.BoldMode(PrinterModeState.Off);
            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.Append(GereneHelpers.TextoEsquerda_Direita("Valor aproximado dos Tributos deste Cupom", _NFCe.NFe.infNFe.total.ICMSTot.vTotTrib.ToString("C2", _Cultura), _Printer.ColsCondensed));
            _Printer.Append("(Conforme Lei Fed. 12.741/2012)");

            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            #region Consumidor
            _Printer.Separator();
            if (_NFCe.NFe.infNFe.dest != null)
            {
                _Printer.AlignLeft();
                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.AppendWithoutLf("CPF/CNPJ do Consumidor: ");
                _Printer.Append(_NFCe.NFe.infNFe.dest?.CPF.IsNotNull() == true ? _NFCe.NFe.infNFe.dest.CPF.FormatoCpfCnpj() :
                                _NFCe.NFe.infNFe.dest?.CNPJ.IsNotNull() == true ? _NFCe.NFe.infNFe.dest.CNPJ.FormatoCpfCnpj() :
                                "000.000.000-00");
                _Printer.AppendWithoutLf("Razao Social/Nome: ");
                _Printer.Append((_NFCe.NFe.infNFe.dest?.xNome ?? "CONSUMIDOR").LimitarString(_Printer.ColsCondensed));
                _Printer.CondensedMode(PrinterModeState.Off);
            }
            else
            {
                _Printer.AlignLeft();
                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.BoldMode("CONSUMIDOR NAO IDENTIFICADO");
                _Printer.CondensedMode(PrinterModeState.Off);
            }
            _Printer.Separator();
            #endregion

            #region Número e série do documento
            _Printer.AlignCenter();
            _Printer.BoldMode(PrinterModeState.On);
            _Printer.Append($"No.: {_NFCe.NFe.infNFe.ide.nNF:D9} Serie: {_NFCe.NFe.infNFe.ide.serie:D3}");
            _Printer.Append($"Emissão: {_NFCe.NFe.infNFe.ide.dhEmi:dd/MM/yyyy HH:mm:ss}");
            _Printer.BoldMode(PrinterModeState.Off);
            _Printer.Append(NomeDaVia);

            _Printer.Separator();
            #endregion

            #region Chave de Acesso
            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.AlignCenter();

            _Printer.Append("Consulte pela chave de acesso em:");
            _Printer.Append(_NFCe.NFe.infNFeSupl.urlChave);

            _Printer.Append("Chave de Acesso");
            _Printer.BoldMode(Regex.Replace(_NFCe.NFe.infNFe.Id.OnlyNumber(), ".{4}", "$0 "));

            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            #region QrCode
            if (_NFCe.NFe.infNFeSupl != null && _NFCe.NFe.infNFeSupl.qrCode.IsNotNull())
            {
                _Printer.AlignCenter();
                _Printer.CondensedMode(PrinterModeState.On);
                _Printer.BoldMode("Consulta via leitor de QR Code");
                _Printer.CondensedMode(PrinterModeState.Off);

                _Printer.AlignCenter();
                _Printer.QrCode(_NFCe.NFe.infNFeSupl.qrCode, QrCodeSize.Size1);

                _Printer.NewLine();
            }
            #endregion

            _Printer.AlignCenter();
            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.Append("Protocolo de autorizacao");
            _Printer.Append($"{_NFCe.protNFe.infProt.nProt} {_NFCe.protNFe.infProt.dhRecbto:@dd/MM/yyyy HH:mm:ss}");

            _Printer.CondensedMode(PrinterModeState.Off);
            #endregion

            if (CortarPapel)
            {
                _Printer.PartialPaperCut();
            }

            _Printer.PrintDocument();
        }
예제 #5
0
        public void ImprimirCancelamento(string xmlContent)
        {
            _CFeCanc = CFeCanc.Load(new MemoryStream(Encoding.UTF8.GetBytes(xmlContent)), Encoding.UTF8);

            _Printer = new Printer(NomeImpressora, TipoImpressora);

            #region Logotipo
            if (Logotipo != null)
            {
                //Impressão do logotipo ainda não implementada
            }
            #endregion

            #region Dados do Emitente
            _Printer.AlignCenter();
            _Printer.BoldMode(PrinterModeState.On);
            _Printer.Append((_CFeCanc.InfCFe.Emit.XFant.IsNotNull() ? _CFeCanc.InfCFe.Emit.XFant : _CFeCanc.InfCFe.Emit.XNome).LimitarString(_Printer.ColsNomal).RemoveAccent());

            _Printer.AlignLeft();
            _Printer.BoldMode(PrinterModeState.Off);
            _Printer.Append(_CFeCanc.InfCFe.Emit.XNome.LimitarString(_Printer.ColsNomal).RemoveAccent());

            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.Append(GereneHelpers.TextoEsquerda_Direita($"Cnpj: {_CFeCanc.InfCFe.Emit.CNPJ.FormatoCpfCnpj()}", $"I.E.: {_CFeCanc.InfCFe.Emit.IE}", _Printer.ColsCondensed));

            _Printer.AppendWithoutLf("End.: ");
            _Printer.Append($"{_CFeCanc.InfCFe.Emit.EnderEmit.XLgr.RemoveAccent()},{_CFeCanc.InfCFe.Emit.EnderEmit.Nro.RemoveAccent()} {_CFeCanc.InfCFe.Emit.EnderEmit.XCpl.RemoveAccent()}");

            _Printer.AppendWithoutLf("Bairro: ");
            _Printer.Append($"{_CFeCanc.InfCFe.Emit.EnderEmit.XBairro.RemoveAccent()} - {_CFeCanc.InfCFe.Emit.EnderEmit.XMun.RemoveAccent()} - {_CFeCanc.InfCFe.Emit.EnderEmit.CEP.FormatoCep()}");

            _Printer.CondensedMode(PrinterModeState.Off);
            _Printer.Separator();
            #endregion

            #region Número do extrato
            _Printer.AlignCenter();
            _Printer.BoldMode(PrinterModeState.On);
            _Printer.Append($"Extrato No. {_CFeCanc.InfCFe.Ide.NCFe:D6}");
            _Printer.Append($"CUPOM FISCAL ELETRONICO SAT");
            _Printer.Append($"CANCELAMENTO");
            _Printer.BoldMode(PrinterModeState.Off);
            #endregion

            #region Homologação

            /*
             * if (_CFeCanc.InfCFe.Ide.TpAmb == ACBr.Net.DFe.Core.Common.DFeTipoAmbiente.Homologacao)
             * {
             *  _Printer.Separator();
             *  _Printer.AlignCenter();
             *  _Printer.BoldMode(PrinterModeState.On);
             *  _Printer.Append("AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL");
             *  _Printer.BoldMode(PrinterModeState.Off);
             *  _Printer.Separator();
             * }
             */
            #endregion

            #region Dados do cupom cancelado
            _Printer.Separator();

            _Printer.AlignLeft();
            _Printer.BoldMode("DADOS DO CUPOM FISCAL ELETRONICO CANCELADO");

            _Printer.CondensedMode(PrinterModeState.On);

            _Printer.AppendWithoutLf("CPF/CNPJ do Consumidor: ");
            _Printer.Append(_CFeCanc.InfCFe.Dest?.CPF.IsNotNull() == true ? _CFeCanc.InfCFe.Dest.CPF.FormatoCpfCnpj() :
                            _CFeCanc.InfCFe.Dest?.CNPJ.IsNotNull() == true ? _CFeCanc.InfCFe.Dest.CNPJ.FormatoCpfCnpj() :
                            "000.000.000-00");
            _Printer.BoldMode(GereneHelpers.TextoEsquerda_Direita("Valor total:", _CFeCanc.InfCFe.Total.VCFe.ToString("C2", _Cultura), _Printer.ColsCondensed));

            _Printer.NewLine();

            _Printer.CondensedMode(PrinterModeState.Off);

            _Printer.AlignCenter();
            _Printer.Append($"SAT No. {_CFeCanc.InfCFe.Ide.NSerieSAT:D9}");
            _Printer.Append($"Data e Hora {_CFeCanc.InfCFe.Ide.DEmi:dd/MM/yyyy} {_CFeCanc.InfCFe.Ide.HEmi:HH:mm:ss}");
            _Printer.AlignLeft();

            _Printer.CondensedMode(PrinterModeState.On);
            #region Chave de Acesso
            _Printer.NewLine();
            _Printer.AlignCenter();
            _Printer.BoldMode(Regex.Replace(_CFeCanc.InfCFe.ChCanc.OnlyNumber(), ".{4}", "$0 "));

            _Printer.Code128(_CFeCanc.InfCFe.ChCanc.OnlyNumber().Substring(0, 22));
            _Printer.Code128(_CFeCanc.InfCFe.ChCanc.OnlyNumber().Substring(22));

            _Printer.NewLine();
            #endregion

            _Printer.CondensedMode(PrinterModeState.Off);

            #region QrCode
            _Printer.AlignCenter();
            string _qrCode = $"{_CFeCanc.InfCFe.ChCanc.OnlyNumber()}|" +
                             $"{_CFeCanc.InfCFe.Ide.DhEmissao:yyyyMMddHHmmss}|" +
                             $"{_CFeCanc.InfCFe.Ide.DhEmissao:0.00}|" +
                             $"{(_CFeCanc.InfCFe.Dest?.CNPJ.IsNotNull() == true ? _CFeCanc.InfCFe.Dest.CNPJ : _CFeCanc.InfCFe.Dest.CPF)}|" +
                             $"{_CFeCanc.InfCFe.Ide.AssinaturaQrcode}";

            _Printer.QrCode(_qrCode, QrCodeSize.Size1);

            _Printer.NewLine();
            #endregion

            #endregion

            #region Dados do cupom cancelado
            _Printer.Separator();

            _Printer.AlignLeft();
            _Printer.BoldMode("DADOS DO CUPOM FISCAL ELETRONICO DE CANCELAMENTO");

            _Printer.AlignCenter();
            _Printer.Append($"SAT No. {_CFeCanc.InfCFe.Ide.NSerieSAT:D9}");
            _Printer.Append($"Data e Hora {_CFeCanc.InfCFe.Ide.DEmi:dd/MM/yyyy} {_CFeCanc.InfCFe.Ide.HEmi:HH:mm:ss}");

            #region Chave de Acesso
            _Printer.AlignCenter();
            _Printer.CondensedMode(PrinterModeState.On);
            _Printer.BoldMode(Regex.Replace(_CFeCanc.InfCFe.Id.OnlyNumber(), ".{4}", "$0 "));

            _Printer.Code128(_CFeCanc.InfCFe.Id.OnlyNumber().Substring(0, 22));
            _Printer.Code128(_CFeCanc.InfCFe.Id.OnlyNumber().Substring(22));

            _Printer.NewLine();
            #endregion

            _Printer.CondensedMode(PrinterModeState.Off);

            #region QrCode
            _Printer.AlignCenter();
            string _qrCodeCancel = $"{_CFeCanc.InfCFe.Id.OnlyNumber()}|" +
                                   $"{_CFeCanc.InfCFe.Ide.DhEmissao:yyyyMMddHHmmss}|" +
                                   $"{_CFeCanc.InfCFe.Total.VCFe:0.00}|" +
                                   $"{(_CFeCanc.InfCFe.Dest?.CNPJ.IsNotNull() == true ? _CFeCanc.InfCFe.Dest.CNPJ : _CFeCanc.InfCFe.Dest.CPF)}|" +
                                   $"{_CFeCanc.InfCFe.Ide.AssinaturaQrcode}";

            _Printer.QrCode(_qrCode, QrCodeSize.Size1);

            _Printer.NewLine();
            #endregion

            #endregion

            _Printer.Separator();
            #endregion

            if (CortarPapel)
            {
                _Printer.PartialPaperCut();
            }

            _Printer.PrintDocument();
        }