private List <ManualParagraph> CreatePages(List <ManualParagraph> paragraphs, int totalLinesOfAPage) { List <ManualParagraph> list = new List <ManualParagraph>(); int AlreadyDone_text = 0; int AlreadyDone_pages = 0; int Page = 1; foreach (var page in paragraphs) { if (AlreadyDone_text < totalLinesOfAPage) { ManualParagraph paragraph = page; paragraph.NumberOfPage = Page; AlreadyDone_text += paragraph.Texts.Count(); list.Add(paragraph); } else { ManualParagraph paragraph = page; paragraph.NumberOfPage = Page++; AlreadyDone_pages++; AlreadyDone_text = 0; list.Add(paragraph); } } foreach (var totalpages in list) { // totalpages.TotalPages = AlreadyDone_pages; totalpages.TotalPages = Page; } return(list); }
public void LoadJson(XmlProduct xmlProduct) { // recebe um produtoxml e abre o arquivo xml XElement root = XElement.Load(xmlProduct.FileName); var queryXML1 = from a in root.Element("Sections").Elements("ManualSection").Elements("Chapters").Elements("ManualChapter"). Elements("Paragraph").Elements("ManualParagraph") select a; //ele entra nos nós dos paragrafos, onde ele pega todas as infos necessarias para criar o objeto manualparagraph List <ManualParagraph> paragraphs = new List <ManualParagraph>(); foreach (var node in queryXML1) { ManualParagraph paragraph = new ManualParagraph(); paragraph.SectionTitle = node.Element("SectionTitle").Value; paragraph.ChapterTitle = node.Element("ChapterTitle").Value; paragraph.Texts = node.Element("Text").Value; paragraphs.Add(paragraph); } //agora ele vai montar as listas de seções, capítulos e de parágrafos!!! //montando a lista de capítulos: var queryXML2 = from a in root.Element("Sections").Elements("ManualSection").Elements("Chapters").Elements("ManualChapter") select a; List <ManualChapter> chapters = new List <ManualChapter>(); foreach (var node2 in queryXML2) { ManualChapter chapter = new ManualChapter(); chapter.Title = node2.Element("ChapterTitle").Value; chapters.Add(chapter); } //montando a lista de seções: var queryXML3 = from a in root.Element("Sections").Elements("ManualSection") select a; List <ManualSection> sections = new List <ManualSection>(); foreach (var node3 in queryXML3) { ManualSection section = new ManualSection(); section.Title = node3.Element("SectionTitle").Value; sections.Add(section); } //agora termina e continua o restante do código... // //entrando na parte do código que vai começar a se direcionar pra paginação // conta o numero total de paginas do manual int totalLines = 0; //Número inicial de páginas do manual foreach (var para in paragraphs) { var p = para.Texts.Count(); totalLines += p; } //agora é necessário dividir o numero total de paginas pelo numero total aceitável por página, que é arbitrário. //só fazendo testes pra ver mesmo, eu vou colocar um que seja conveniente nesse momento. int totalLinesOfAPage = 1000; // numero de linhas maximo de uma pagina! //cria listas que vao compor as paginas e que farão parte da instanciação do objeto "publicationProductViewModel" var pages = CreatePages(paragraphs, totalLinesOfAPage); Manual manual = new Manual("Carro loucaço>", pages, chapters, sections); manual.TotalPages = manual.Paragraphs.FirstOrDefault(p => p != null).TotalPages; var json = JsonConvert.SerializeObject(manual); var product = FindProductById(xmlProduct.ProductId); product.Json = json; _context.Product.Update(product); _context.SaveChanges(); return; }