示例#1
0
        private DatosComprobante TraerRespuestaSri(string claveAcceso)
        {
            var resultado = string.Empty;
            DatosComprobante datosTributarios = new DatosComprobante();
            string           url = ConfigurationSettings.AppSettings.Get("url_sri");

            string xml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ec=\"http://ec.gob.sri.ws.autorizacion\">";

            xml = xml + "<soapenv:Header/>";
            xml = xml + "<soapenv:Body>";
            xml = xml + "<ec:autorizacionComprobante>";
            xml = xml + "<claveAccesoComprobante>" + claveAcceso + "</claveAccesoComprobante>";
            xml = xml + "</ec:autorizacionComprobante>";
            xml = xml + "</soapenv:Body>";
            xml = xml + "</soapenv:Envelope>";

            try
            {
                byte[]         bytes   = Encoding.ASCII.GetBytes(xml);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

                request.Method        = "POST";
                request.ContentLength = bytes.Length;
                request.ContentType   = "text/xml";

                //log.Debug("Clave acceso: " + claveAcceso);

                Stream requestStream = request.GetRequestStream();
                requestStream.Write(bytes, 0, bytes.Length);
                requestStream.Close();

                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                //log.Debug("Status: " + response.StatusCode);
                if (response.StatusCode == HttpStatusCode.OK)
                {
                    Stream       responseStream = response.GetResponseStream();
                    StreamReader reader         = new StreamReader(responseStream);
                    resultado = reader.ReadToEnd();
                }

                resultado = WebUtility.HtmlDecode(resultado);
                //log.Debug("Resultado: " + resultado);
                response.Close();
                var caracterPrincipal  = resultado.IndexOf('?') - 1;
                var caracterSecundario = resultado.LastIndexOf('?') + 2;
                if (caracterPrincipal > 0 && caracterSecundario > 0)
                {
                    resultado = resultado.Remove(caracterPrincipal, (caracterSecundario - caracterPrincipal));
                }
                resultado = "<?xml version=" + "\"1.0\"" + " encoding=" + "\"UTF-8\"" + "?>" + resultado;
                System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
                doc.LoadXml(resultado);
                System.Xml.XmlNode element = doc.SelectSingleNode("numeroAutorizacion");
                datosTributarios.claveAcceso        = doc.GetElementsByTagName("claveAcceso")[0].InnerText;
                datosTributarios.numeroAutorizacion = doc.GetElementsByTagName("numeroAutorizacion")[0].InnerText;
                datosTributarios.fechaAutorizacion  = Convert.ToDateTime(doc.GetElementsByTagName("fechaAutorizacion")[0].InnerText);
                datosTributarios.estado             = doc.GetElementsByTagName("estado")[0].InnerText;
                datosTributarios.comprobante        = doc.GetElementsByTagName("comprobante")[0].InnerXml;
                //log.Debug("Estado: " + doc.GetElementsByTagName("estado")[0].InnerText);
            }
            catch (Exception e)
            {
                //log.Error(e);
            }

            return(datosTributarios);
        }
示例#2
0
        public static string CreatePDF2(DatosComprobante dt, Comprobante comprobante, string rutaPDF, string nombrePDF)
        {
            //*** Copia el recurso embebido en un directorio temporal , cuando se le envíe la plantilla del pdf en la dll
            // ContentLoading.GetPDFEmbedded();
            //*** Esto hay que activar cuando el pdf esté compilado en la librería

            try
            {
                var boldTableFont = FontFactory.GetFont("Arial", 9, iTextSharp.text.Font.BOLD);
                var bodyFont      = FontFactory.GetFont("Arial", 10, iTextSharp.text.Font.NORMAL);
                //*** Configuración de directorios para los diferentes formatos
                string carpetaPrincipal         = Properties.Settings.Default.PathDefecto;
                string carpetaFormatosFacturas  = Properties.Settings.Default.DeFacturas;
                string formatoPDFCabecera       = Properties.Settings.Default.EsteFormatoFacturaCabecera;
                string formatoPDFDetalles       = Properties.Settings.Default.EsteFormatoFacturaDetalles;
                string formatoPDFTotales        = Properties.Settings.Default.EsteFormatoFacturaTotales;
                string carpetaGeneradasFacturas = Properties.Settings.Default.FacturasGeneradas;

                string rutaCompleta   = carpetaPrincipal + carpetaFormatosFacturas + @"\" + formatoPDFCabecera;
                string rutaCompleta_1 = carpetaPrincipal + carpetaFormatosFacturas + @"\" + formatoPDFDetalles;
                string rutaCompleta_2 = carpetaPrincipal + carpetaFormatosFacturas + @"\" + formatoPDFTotales;

                string nombreFacturaGenerada = Properties.Settings.Default.ArchivoTemporal;
                string nuevaFacturaCompleta  = carpetaPrincipal + carpetaGeneradasFacturas + @"\" + nombreFacturaGenerada;
                // estos dos archivos, se eliminan al terminar el proceso
                string detalletemporal = carpetaPrincipal + carpetaGeneradasFacturas + @"\detalle_temporal.pdf";
                string totalestemporal = carpetaPrincipal + carpetaGeneradasFacturas + @"\totales_temporal.pdf";

                //*** Esto se activa cuando el pdf está dentro de la librería
                //string fileNameExisting = ContentLoading.CrearCarpetaTemporal("modelo_facturaFinal.pdf");
                //*** Va junto con la opción de arriba

                string fileNameExisting   = rutaCompleta;
                string fileNameExisting_1 = rutaCompleta_1;
                string fileNameExisting_2 = rutaCompleta_2;

                //*** Archivo resultante temporal
                string fileNameNew = nuevaFacturaCompleta;
                //*** estos dos archivos, se eliminan al terminar el proceso
                string fileNameNew_1 = detalletemporal;
                string fileNameNew_2 = totalestemporal;

                //*** Proceso de estampado de la cabecera del documento
                using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
                    using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
                    {
                        // Open existing PDF
                        PdfReader pdfReader = new PdfReader(existingFileStream);
                        Rectangle pagesize  = pdfReader.GetPageSize(1);
                        // PdfStamper, which will create
                        PdfStamper stamper = new PdfStamper(pdfReader, newFileStream);
                        var        form    = stamper.AcroFields;
                        //var fieldKeys = form.Fields.Keys;
                        var imagepath = comprobante.archivo;

                        using (FileStream fs = new FileStream(imagepath, FileMode.Open))
                        {
                            var png = iTextSharp.text.Image.GetInstance(System.Drawing.Image.FromStream(fs), System.Drawing.Imaging.ImageFormat.Png);
                            png.Alignment = iTextSharp.text.Image.ALIGN_RIGHT;
                            png.SetAbsolutePosition(41, 1010);
                            png.ScaleAbsoluteHeight(100);
                            png.ScaleAbsoluteWidth(365);
                            PdfContentByte over = null;
                            over = stamper.GetOverContent(1); // 1 = página
                            over.AddImage(png);
                        }

                        //*** mapeo de datos de la factura ESTAMPADO DE LOS DATOS EN LA PLANTILLA
                        //*** TECNOLOGÍA ACROFIELDS
                        form.SetField("RUC", dt.Ruc);
                        form.SetField("NROFACTURA", comprobante.codDoc);
                        form.SetField("NROAUTORIZACION", dt.numeroAutorizacion);
                        form.SetField("AMBIENTE", dt.ambiente);
                        form.SetField("EMISION", dt.estado);
                        form.SetField("CLAVEACCESONUMEROS", dt.numeroAutorizacion);

                        //***mapeo de datos de la empresa
                        form.SetField("NOMBREEMPRESA", "ComputerEC");
                        form.SetField("DIRECCION1EMPRESA", "Calle Homero Salas OE5-148 y Altar");
                        form.SetField("DIRECCION2EMPRESA", "Sector del Antiguo Aeropuerto");
                        form.SetField("DESCRIPCION1EMPRESA", "Teléfonos: 0983833901  0991324900");
                        form.SetField("DESCRIPCION2EMPRESA", "Horarios: Lun-Vie 08:00 a 18:00");

                        //***mapeo de los datos del cliente
                        //***ESTOS DATOS
                        //form.SetField("RazonSocial", comprobante.Comprobante.razonSocial);
                        //form.SetField("FechaEmision", comprobante.Comprobante.fechaEmision);
                        //form.SetField("Identificacion", comprobante.Comprobante.ruc);
                        #region Detalles


                        PdfPTable itemTable = new PdfPTable(9);
                        itemTable.HorizontalAlignment = 0;
                        itemTable.WidthPercentage     = 146;
                        itemTable.SpacingBefore       = 10f;
                        itemTable.SpacingAfter        = 10f;
                        itemTable.SetWidths(new float[] { 3f, /*3f,*/ 2f, 6f, 4f, 4f, 4f, 3f, 3f, 3f }); // then set the column's __relative__ widths
                        itemTable.DefaultCell.Border = Rectangle.BOX;


                        // VALIDACION DE LOS CAMPOS QUE SE GENERAN EN EL PDF

                        PdfPCell cell1 = new PdfPCell(new Phrase(new Chunk("Cod.Principal", boldTableFont)));
                        cell1.HorizontalAlignment = 1;
                        itemTable.AddCell(cell1);

                        //PdfPCell cell2 = new PdfPCell(new Phrase(new Chunk("Cod.Auxiliar", boldTableFont)));
                        //cell2.HorizontalAlignment = 1;
                        //itemTable.AddCell(cell2);

                        PdfPCell cell3 = new PdfPCell(new Phrase(new Chunk("Cantidad", boldTableFont)));
                        cell3.HorizontalAlignment = 1;
                        itemTable.AddCell(cell3);

                        PdfPCell cell4 = new PdfPCell(new Phrase(new Chunk("Descripcion", boldTableFont)));
                        cell4.HorizontalAlignment = 1;
                        itemTable.AddCell(cell4);

                        PdfPCell cell5 = new PdfPCell(new Phrase(new Chunk("Det.Adicional1", boldTableFont)));
                        cell5.HorizontalAlignment = 1;
                        itemTable.AddCell(cell5);

                        PdfPCell cell6 = new PdfPCell(new Phrase(new Chunk("Det.Adicional2", boldTableFont)));
                        cell6.HorizontalAlignment = 1;
                        itemTable.AddCell(cell6);


                        PdfPCell cell7 = new PdfPCell(new Phrase(new Chunk("Det.Adicional3", boldTableFont)));
                        cell7.HorizontalAlignment = 1;
                        itemTable.AddCell(cell7);

                        PdfPCell cell8 = new PdfPCell(new Phrase(new Chunk("ValorUnit", boldTableFont)));
                        cell8.HorizontalAlignment = 1;
                        itemTable.AddCell(cell8);

                        PdfPCell cell9 = new PdfPCell(new Phrase(new Chunk("Descuento", boldTableFont)));
                        cell9.HorizontalAlignment = 1;
                        itemTable.AddCell(cell9);

                        PdfPCell cell10 = new PdfPCell(new Phrase(new Chunk("PrecioTotal", boldTableFont)));
                        cell10.HorizontalAlignment = 1;
                        itemTable.AddCell(cell10);

                        itemTable.HeaderRows = 1;

                        foreach (DetalleComprobante fila in comprobante.detalles)
                        {
                            itemTable.AddCell(fila.codigoPrincipal.ToString());
                            //itemTable.AddCell(fila.codigoAuxiliar.ToString());
                            itemTable.AddCell(fila.cantidad.ToString());
                            itemTable.AddCell(fila.descripcion.ToString());
                            itemTable.AddCell(fila.detalleadicional1.ToString());
                            itemTable.AddCell(fila.detalleadicional2.ToString());
                            itemTable.AddCell(fila.detalleadicional3.ToString());
                            itemTable.AddCell(fila.precioUnitario.ToString());
                            itemTable.AddCell(fila.descuento.ToString());
                            itemTable.AddCell(fila.totalSinImpueto.ToString());
                        }

                        ColumnText column    = new ColumnText(stamper.GetOverContent(1));
                        Rectangle  rectPage1 = new Rectangle(43, 36, 559, 856); // POSICIÓN DONDE INICIA LA TABLA
                        column.SetSimpleColumn(rectPage1);
                        column.AddElement(itemTable);
                        int       pagecount = 1;
                        Rectangle rectPage2 = new Rectangle(43, 36, 559, 1000); // 1000 = POSICIÓN DEL TITULO DE LA TABLA EN CADA PÁGINA
                        int       status    = column.Go();
                        while (ColumnText.HasMoreText(status))
                        {
                            status = triggerNewPage(stamper, pagesize, column, rectPage2, ++pagecount);
                        }
                        #endregion

                        itemTable.SpacingBefore = 20;
                        altotal = itemTable.TotalHeight;

                        stamper.FormFlattening = true;
                        //stamper.FreeTextFlattening = true;
                        stamper.Close();
                        pdfReader.Close();
                    }

                //*** Proceso de estampado de los totales del documento en otro PDF
                using (var existingFileStream = new FileStream(fileNameExisting_2, FileMode.Open))
                    using (var newFileStream = new FileStream(fileNameNew_2, FileMode.Create))
                    {
                        // Open existing PDF
                        PdfReader pdfReader = new PdfReader(existingFileStream);

                        // PdfStamper, which will create
                        PdfStamper stamper = new PdfStamper(pdfReader, newFileStream);

                        var form      = stamper.AcroFields;
                        var fieldKeys = form.Fields.Keys;


                        //*** mapeo de datos de la factura
                        form.SetField("SUBTOTAL12", comprobante.totalConImpuestos.ToString());
                        form.SetField("SUBTOTALCERO", "");
                        form.SetField("SUBTOTALNOIVA", "");
                        form.SetField("SUBTOTALEXCENTO", "");
                        form.SetField("SUBTOTALSINIMPUESTOS", comprobante.totalSinImpuetos.ToString());
                        form.SetField("TOTALDESCUENTO", comprobante.totalDescuento.ToString());
                        form.SetField("ICE", "");
                        form.SetField("VALORIVA", "");
                        form.SetField("IRBPNR", "");
                        form.SetField("PROPINA", comprobante.propina.ToString());
                        form.SetField("VALORTOTAL", comprobante.importeTotal.ToString());

                        stamper.FormFlattening = true;
                        //stamper.FreeTextFlattening = true;
                        stamper.Close();
                        pdfReader.Close();
                    }

                // SE ACTIVA CUANDO SE REQUIERA HACER EL PROCESO EN MEMORIA
                //List<byte[]> fbytes = new List<byte[]>();
                //MemoryStream ms = GenerarRIDE.CreatePDF1Stream(fileNameNew);
                //ms.Position = 0;
                //fbytes.Add(ms.ToArray());
                //ms = GenerarRIDE.CreatePDF1Stream(fileNameNew_1);
                //ms.Position = 0;
                //fbytes.Add(ms.ToArray());
                //ms = GenerarRIDE.CreatePDF1Stream(fileNameNew_2);
                //ms.Position = 0;
                //fbytes.Add(ms.ToArray());

                //MemoryStream PDFData = new MemoryStream();
                ////*** Se guarda el archivo generado
                ////string fileNameNew = nuevaFacturaCompleta;
                //PDFData = new MemoryStream(concatAndAddContent(fbytes)); // une los 3 archivos
                //PDFData.Position = 0;
                ////MemoryStream ms1 = GenerarRIDE.CreatePDF1Stream(final3);
                ////ms1.Position = 0;
                //SavePDFFile(final3, PDFData);

                // Merge de archivos
                #region MergePDF
                //altotal 856
                float y = -altotal - 250;



                // obteniendo las rutas
                string src   = rutaPDF + "archivotemporal.pdf";
                string src1  = rutaPDF + "totales_temporal.pdf";
                string final = rutaPDF + nombrePDF;


                PdfReader  reader   = new PdfReader(src);
                PdfStamper stamper1 =
                    new PdfStamper(reader, new FileStream(final, FileMode.Create));

                PdfContentByte canvas = stamper1.GetUnderContent(1);

                PdfReader       r;
                PdfImportedPage page;

                PdfReader s_reader = new PdfReader(src1);
                Rectangle pageSize = reader.GetPageSize(1);

                int n = reader.NumberOfPages;

                for (int i = 1; i <= n; i++)
                {
                    r    = new PdfReader(src1);
                    page = stamper1.GetImportedPage(r, 1);
                    canvas.AddTemplate(page, 0, y); //float x   float y
                    stamper1.Writer.FreeReader(r);
                    r.Close();
                }

                stamper1.Close();
                s_reader.Close();
                reader.Close();
                return("True");

                #endregion
            }
            catch (Exception e0)
            {
                return("No se generó el PDF : " + e0.Message);
            }
        }