/// <summary> /// <para>(ESP) Este metodo es recursivo, se encarga de asignar los bookmarks y asignarles su parent</para> /// <para>(ENG) this method is recursive, assign the parent for each file</para> /// </summary> /// <param name="doc"> /// <para>(ESP) Este es el documento actual</para> /// <para>(ENG) this is the current document</para> /// </param> /// <param name="pdfCopy"> /// <para>(ESP)es el documento que hará el smart copy</para> /// <para>(ENG) this is the pdfsmartcopy for the append another pdf</para> /// </param> /// <param name="marcadorNombreLibro"> /// <para>(ESP) este es el parent</para> /// <para>(ENG) this is the parent</para> /// </param> /// <param name="enlace"> /// <para>(ESP) Esta es la estructura del documento, donde contiene nombre y url del documento</para> /// <para>(ENG) This is the structure's document, this contains the name and url's file </para> /// </param> /// <param name="rutaPDFs"> /// <para>(ESP)Es donde se generan los documentos</para> /// <para>(ENG)Its the path for create the files</para> /// </param> public static void GenerarHijosEstructura(Document doc, PdfSmartCopy pdfCopy, PdfOutline marcadorNombreLibro, Modelo.POCOs.EstructuraPDF enlace, string rutaPDFs) { try { PdfContentByte pb = pdfCopy.DirectContent; //Crea el link para la sección Anchor section1 = new Anchor(enlace.Nombre) { Name = enlace.Nombre }; Paragraph psecton1 = new Paragraph(); psecton1.Add(section1); //mostrar la sección 1 en una ubicación específica del documento ColumnText.ShowTextAligned(pb, Element.ALIGN_LEFT, psecton1, 36, PageSize.A4.Height - 100, 0); //(ESP) Se crea el marcador para este documento, se hace referencia al documento padre (parent) //(ENG) create the bookmark for this document, and create the reference with the parent var mbot = new PdfOutline(marcadorNombreLibro, PdfAction.GotoLocalPage(enlace.Nombre, false), enlace.Nombre); //(ESP) Se lee el documento //(ENG) read the file PdfReader reader = new PdfReader(enlace.UrlDocumento); //(ESP) Se adjuntan las paginas al documento //(ENG) Copy each page in the current pdfcopy for (int I = 1; I <= reader.NumberOfPages; I++) { doc.SetPageSize(reader.GetPageSizeWithRotation(1)); PdfImportedPage page = pdfCopy.GetImportedPage(reader, I); pdfCopy.AddPage(page); } //Clean up pdfCopy.FreeReader(reader); reader.Close(); if (enlace.Hijos.Any()) { foreach (var cadaHijo in enlace.Hijos) { //(ESP) aquí está la clave, esto es recurisvo //(ENG) this is the magic, its recursive GenerarHijosEstructura(doc, pdfCopy, mbot, cadaHijo, rutaPDFs); } } } catch (Exception error) { } }
/// <summary> /// Este metodo obtendrá la estructura de tu libro, su contenido son "n" niveles, esto es por simple ejemplo /// </summary> /// <param name="niveles"> /// (ESP) Será el número de padres que contendrá el libro /// (ENG) the parent numbers /// </param> /// <param name="subniveles"> /// (ESP) Será el número de hijos /// (ENG) Number for the child items /// </param> /// <param name="rutaPDFs"> /// (ESP) Será la ruta donde se guardarán los archivos /// (ENG) the path for save the files /// </param> /// <returns></returns> public List <Modelo.POCOs.EstructuraPDF> GetAll(Int32 niveles, Int32 subniveles, string rutaPDFs) { List <Modelo.POCOs.EstructuraPDF> resultado = new List <Modelo.POCOs.EstructuraPDF>(); try { for (Int32 i = 1; i <= niveles; i++) { //(ESP) Creamos los nodos padres //(ENG) Create the fathers items string nombrePadre = "Dcto" + i.ToString() + ".pdf"; string rutaDcto = String.Format("{0}/{1}", rutaPDFs, nombrePadre); //(ESP) se crean los archivos con itextSharp //(ENG) creation for the fathers items, with itextsharp var creacionDocumento = CrearDocumentos(nombrePadre, rutaDcto, nombrePadre); var padre = new Modelo.POCOs.EstructuraPDF { EstructuraPDFId = Guid.NewGuid(), Nombre = nombrePadre, UrlDocumento = creacionDocumento.Mensaje }; for (Int32 h = 1; h <= subniveles; h++) { //(ESP) Creamos los nodos hijos //(ENG) Create the sons items string nombreHijo = "DctoHijo" + i.ToString() + "-" + h.ToString() + ".pdf"; string rutaDctoHijo = String.Format("{0}/{1}", rutaPDFs, nombreHijo); //(ESP) se crean los archivos hijos con itextSharp //(ENG) creation for the sons items, with itextsharp var creacionDocumentoHijo = CrearDocumentos(rutaDctoHijo, rutaPDFs, nombreHijo); var hijo = new Modelo.POCOs.EstructuraPDF { EstructuraPDFId = Guid.NewGuid(), Nombre = nombreHijo, UrlDocumento = creacionDocumentoHijo.Mensaje }; Random numeroDeHijosRandom = new Random(); Int32 hijos = numeroDeHijosRandom.Next(1, 10); for (Int32 s = 1; s <= hijos; s++) { //(ESP) Creamos los nodos nietos //(ENG) Create the grandsons items string nombreNieto = "DctoNieto" + s.ToString() + "-" + s.ToString() + ".pdf"; string rutaDctoNieto = String.Format("{0}/{1}", rutaPDFs, nombreNieto); //(ESP) se crean los archivos nietos con itextSharp //(ENG) creation for the grandsons items, with itextsharp var creacionDocumentoNieto = CrearDocumentos(rutaDctoNieto, rutaPDFs, nombreNieto); var nieto = new Modelo.POCOs.EstructuraPDF { EstructuraPDFId = Guid.NewGuid(), Nombre = nombreNieto, UrlDocumento = creacionDocumentoNieto.Mensaje }; hijo.Hijos.Add(nieto); } padre.Hijos.Add(hijo); } resultado.Add(padre); } } catch (Exception error) { } return(resultado); }