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