/// <summary>Adds the outline.</summary> /// <param name="tagWorker">the tag worker</param> /// <param name="element">the element</param> /// <param name="context">the processor context</param> /// <returns>the outline handler</returns> internal virtual OutlineHandler AddOutline(ITagWorker tagWorker, IElementNode element, ProcessorContext context ) { String tagName = element.Name(); if (null != tagWorker && HasTagPriorityMapping(tagName) && context.GetPdfDocument() != null) { int level = (int)GetTagPriorityMapping(tagName); if (null == currentOutline) { currentOutline = context.GetPdfDocument().GetOutlines(false); } PdfOutline parent = currentOutline; while (!levelsInProcess.IsEmpty() && level <= levelsInProcess.JGetFirst()) { parent = parent.GetParent(); levelsInProcess.JRemoveFirst(); } String content = ((JsoupElementNode)element).Text(); if (String.IsNullOrEmpty(content)) { content = GetUniqueID(tagName); } PdfOutline outline = parent.AddOutline(content); String destination = DESTINATION_PREFIX + GetUniqueID(DESTINATION_PREFIX); outline.AddDestination(PdfDestination.MakeDestination(new PdfString(destination))); destinationsInProcess.AddFirst(destination); levelsInProcess.AddFirst(level); currentOutline = outline; } return(this); }
/// <summary>Adds the outline and the destination.</summary> /// <remarks> /// Adds the outline and the destination. /// Adds the outline and its corresponding the destination to the PDF document /// if the priority mapping is set for the element. /// </remarks> /// <param name="tagWorker">the tag worker</param> /// <param name="element">the element</param> /// <param name="context">the processor context</param> /// <returns>the outline handler</returns> internal virtual OutlineHandler AddOutlineAndDestToDocument(ITagWorker tagWorker, IElementNode element, ProcessorContext context) { String tagName = element.Name(); if (null != tagWorker && HasTagPriorityMapping(tagName) && context.GetPdfDocument() != null) { int level = (int)GetTagPriorityMapping(tagName); if (null == currentOutline) { currentOutline = context.GetPdfDocument().GetOutlines(false); } PdfOutline parent = currentOutline; while (!levelsInProcess.IsEmpty() && level <= levelsInProcess.JGetFirst()) { parent = parent.GetParent(); levelsInProcess.JRemoveFirst(); } PdfOutline outline = parent.AddOutline(GenerateUniqueOutlineName(element)); String destination = GenerateUniqueDestinationName(element); outline.AddDestination(PdfDestination.MakeDestination(new PdfString(destination))); destinationsInProcess.AddFirst(destination); levelsInProcess.AddFirst(level); currentOutline = outline; } return(this); }
/// <summary>the next element in the entire hierarchy</summary> /// <param name="outline"></param> /// <exception cref="iText.Kernel.PdfException"/> private PdfOutline GetAbsoluteTreeNextOutline(PdfOutline outline) { PdfObject nextPdfObject = outline.GetContent().Get(PdfName.Next); PdfOutline nextPdfOutline = null; if (outline.GetParent() != null && nextPdfObject != null) { foreach (PdfOutline pdfOutline in outline.GetParent().GetAllChildren()) { if (pdfOutline.GetContent().GetIndirectReference().Equals(nextPdfObject.GetIndirectReference())) { nextPdfOutline = pdfOutline; break; } } } if (nextPdfOutline == null && outline.GetParent() != null) { nextPdfOutline = GetAbsoluteTreeNextOutline(outline.GetParent()); } return(nextPdfOutline); }