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