private static PdfName TransformNumberingTypeToName(ListNumberingType numberingType) { switch (numberingType) { case ListNumberingType.DECIMAL: { return PdfName.Decimal; } case ListNumberingType.ROMAN_UPPER: { return PdfName.UpperRoman; } case ListNumberingType.ROMAN_LOWER: { return PdfName.LowerRoman; } case ListNumberingType.ENGLISH_UPPER: case ListNumberingType.GREEK_UPPER: { return PdfName.UpperAlpha; } case ListNumberingType.ENGLISH_LOWER: case ListNumberingType.GREEK_LOWER: { return PdfName.LowerAlpha; } default: { return PdfName.None; } } }
public static void ApplyListAttributes(AbstractRenderer renderer) { if (!(renderer.GetModelElement() is List)) { return; } PdfDictionary attributes = new PdfDictionary(); PdfName attributesType = PdfName.List; attributes.Put(PdfName.O, attributesType); Object listSymbol = renderer.GetProperty <Object>(Property.LIST_SYMBOL); if (listSymbol is ListNumberingType) { ListNumberingType numberingType = (ListNumberingType)listSymbol; attributes.Put(PdfName.ListNumbering, TransformNumberingTypeToName(numberingType)); } if (attributes.Size() > 1) { AccessibilityProperties properties = ((IAccessibleElement)renderer.GetModelElement()).GetAccessibilityProperties (); RemoveSameAttributesTypeIfPresent(properties, attributesType); properties.AddAttributes(attributes); } }
public static List List(List <string> items, ListNumberingType type = ListNumberingType.DECIMAL) { List list = new List(type); items.ForEach(i => list.Add(new ListItem(i))); return(list); }
public PdfBuilder AddList( ListNumberingType numberingType = ListNumberingType.Decimal, params string[] points ) => Add( Enumerable .Repeat(new List((iText.Layout.Properties.ListNumberingType)numberingType), 1) .Select(i => points.Select(j => i.Add(j)).LastOrDefault()) .FirstOrDefault() );
/// <summary>Sets the list numbering type to be used.</summary> /// <remarks> /// Sets the list numbering type to be used. This will create an ordered list, /// i.e. every /// <see cref="ListItem"/> /// will have a unique prefix. /// </remarks> /// <param name="listNumberingType"> /// the /// <see cref="iText.Layout.Properties.ListNumberingType"/> /// that will generate appropriate prefixes for the /// <see cref="ListItem"/> /// s. /// </param> /// <returns>this list.</returns> public virtual iText.Layout.Element.List SetListSymbol(ListNumberingType listNumberingType) { // Do not draw any points after ZapfDingbats special number symbol if (listNumberingType == ListNumberingType.ZAPF_DINGBATS_1 || listNumberingType == ListNumberingType.ZAPF_DINGBATS_2 || listNumberingType == ListNumberingType.ZAPF_DINGBATS_3 || listNumberingType == ListNumberingType.ZAPF_DINGBATS_4 ) { SetPostSymbolText(" "); } SetProperty(Property.LIST_SYMBOL, listNumberingType); return(this); }
/// <summary> /// Sets the list symbol for a /// <see cref="iText.Layout.Element.List"/> /// or /// <see cref="iText.Layout.Element.ListItem"/> /// element. /// </summary> /// <param name="container"> /// the container element ( /// <see cref="iText.Layout.Element.List"/> /// or /// <see cref="iText.Layout.Element.ListItem"/> /// ) /// </param> /// <param name="listNumberingType">the list numbering type</param> private static void SetListSymbol(IPropertyContainer container, ListNumberingType listNumberingType) { if (container is List) { ((List)container).SetListSymbol(listNumberingType); } else { if (container is ListItem) { ((ListItem)container).SetListSymbol(listNumberingType); } } }
private static PdfName TransformNumberingTypeToName(ListNumberingType numberingType, bool isTagStructurePdf2 ) { switch (numberingType) { case ListNumberingType.DECIMAL: case ListNumberingType.DECIMAL_LEADING_ZERO: { return(PdfName.Decimal); } case ListNumberingType.ROMAN_UPPER: { return(PdfName.UpperRoman); } case ListNumberingType.ROMAN_LOWER: { return(PdfName.LowerRoman); } case ListNumberingType.ENGLISH_UPPER: case ListNumberingType.GREEK_UPPER: { return(PdfName.UpperAlpha); } case ListNumberingType.ENGLISH_LOWER: case ListNumberingType.GREEK_LOWER: { return(PdfName.LowerAlpha); } default: { if (isTagStructurePdf2) { return(PdfName.Ordered); } else { return(PdfName.None); } break; } } }
public static PdfStructureAttributes GetListAttributes(AbstractRenderer renderer, TagTreePointer taggingPointer ) { IRoleMappingResolver resolvedMapping = null; resolvedMapping = ResolveMappingToStandard(taggingPointer); if (resolvedMapping == null || !StandardRoles.L.Equals(resolvedMapping.GetRole())) { return(null); } PdfDictionary attributes = new PdfDictionary(); attributes.Put(PdfName.O, PdfName.List); Object listSymbol = renderer.GetProperty <Object>(Property.LIST_SYMBOL); bool tagStructurePdf2 = IsTagStructurePdf2(resolvedMapping.GetNamespace()); if (listSymbol is ListNumberingType) { ListNumberingType numberingType = (ListNumberingType)listSymbol; attributes.Put(PdfName.ListNumbering, TransformNumberingTypeToName(numberingType, tagStructurePdf2)); } else { if (tagStructurePdf2) { if (listSymbol is IListSymbolFactory) { attributes.Put(PdfName.ListNumbering, PdfName.Ordered); } else { attributes.Put(PdfName.ListNumbering, PdfName.Unordered); } } } return(attributes.Size() > 1 ? new PdfStructureAttributes(attributes) : null); }
/// <summary>Creates a List with a custom numbering type.</summary> /// <param name="listNumberingType">a prefix style</param> public List(ListNumberingType listNumberingType) : base() { SetListSymbol(listNumberingType); }
private IRenderer CreateListSymbolRenderer(int index, IRenderer renderer) { Object defaultListSymbol = GetListItemOrListProperty(renderer, this, Property.LIST_SYMBOL); if (defaultListSymbol is Text) { return(SurroundTextBullet(new TextRenderer((Text)defaultListSymbol))); } else { if (defaultListSymbol is Image) { return(new ImageRenderer((Image)defaultListSymbol)); } else { if (defaultListSymbol is ListNumberingType) { ListNumberingType numberingType = (ListNumberingType)defaultListSymbol; String numberText; switch (numberingType) { case ListNumberingType.DECIMAL: { numberText = index.ToString(); break; } case ListNumberingType.DECIMAL_LEADING_ZERO: { numberText = (index < 10 ? "0" : "") + index.ToString(); break; } case ListNumberingType.ROMAN_LOWER: { numberText = RomanNumbering.ToRomanLowerCase(index); break; } case ListNumberingType.ROMAN_UPPER: { numberText = RomanNumbering.ToRomanUpperCase(index); break; } case ListNumberingType.ENGLISH_LOWER: { numberText = EnglishAlphabetNumbering.ToLatinAlphabetNumberLowerCase(index); break; } case ListNumberingType.ENGLISH_UPPER: { numberText = EnglishAlphabetNumbering.ToLatinAlphabetNumberUpperCase(index); break; } case ListNumberingType.GREEK_LOWER: { numberText = GreekAlphabetNumbering.ToGreekAlphabetNumber(index, false, true); break; } case ListNumberingType.GREEK_UPPER: { numberText = GreekAlphabetNumbering.ToGreekAlphabetNumber(index, true, true); break; } case ListNumberingType.ZAPF_DINGBATS_1: { numberText = JavaUtil.CharToString((char)(index + 171)); break; } case ListNumberingType.ZAPF_DINGBATS_2: { numberText = JavaUtil.CharToString((char)(index + 181)); break; } case ListNumberingType.ZAPF_DINGBATS_3: { numberText = JavaUtil.CharToString((char)(index + 191)); break; } case ListNumberingType.ZAPF_DINGBATS_4: { numberText = JavaUtil.CharToString((char)(index + 201)); break; } default: { throw new InvalidOperationException(); } } Text textElement = new Text(GetListItemOrListProperty(renderer, this, Property.LIST_SYMBOL_PRE_TEXT) + numberText + GetListItemOrListProperty(renderer, this, Property.LIST_SYMBOL_POST_TEXT)); IRenderer textRenderer; // Be careful. There is a workaround here. For Greek symbols we first set a dummy font with document=null // in order for the metrics to be taken into account correctly during layout. // Then on draw we set the correct font with actual document in order for the font objects to be created. if (numberingType == ListNumberingType.GREEK_LOWER || numberingType == ListNumberingType.GREEK_UPPER || numberingType == ListNumberingType.ZAPF_DINGBATS_1 || numberingType == ListNumberingType.ZAPF_DINGBATS_2 || numberingType == ListNumberingType.ZAPF_DINGBATS_3 || numberingType == ListNumberingType.ZAPF_DINGBATS_4) { String constantFont = (numberingType == ListNumberingType.GREEK_LOWER || numberingType == ListNumberingType .GREEK_UPPER) ? StandardFonts.SYMBOL : StandardFonts.ZAPFDINGBATS; textRenderer = new _TextRenderer_211(constantFont, textElement); try { textRenderer.SetProperty(Property.FONT, PdfFontFactory.CreateFont(constantFont)); } catch (System.IO.IOException) { } } else { textRenderer = new TextRenderer(textElement); } return(SurroundTextBullet(textRenderer)); } else { if (defaultListSymbol is IListSymbolFactory) { return(SurroundTextBullet(((IListSymbolFactory)defaultListSymbol).CreateSymbol(index, this, renderer).CreateRendererSubTree ())); } else { if (defaultListSymbol == null) { return(null); } else { throw new InvalidOperationException(); } } } } } }
protected internal virtual IRenderer MakeListSymbolRenderer(int index, IRenderer renderer) { Object defaultListSymbol = renderer.GetProperty <Object>(Property.LIST_SYMBOL); if (defaultListSymbol is Text) { return(new TextRenderer((Text)defaultListSymbol)); } else { if (defaultListSymbol is Image) { return(new ImageRenderer((Image)defaultListSymbol)); } else { if (defaultListSymbol is ListNumberingType) { ListNumberingType numberingType = (ListNumberingType)defaultListSymbol; String numberText; switch (numberingType) { case ListNumberingType.DECIMAL: { numberText = index.ToString(); break; } case ListNumberingType.ROMAN_LOWER: { numberText = RomanNumbering.ToRomanLowerCase(index); break; } case ListNumberingType.ROMAN_UPPER: { numberText = RomanNumbering.ToRomanUpperCase(index); break; } case ListNumberingType.ENGLISH_LOWER: { numberText = EnglishAlphabetNumbering.ToLatinAlphabetNumberLowerCase(index); break; } case ListNumberingType.ENGLISH_UPPER: { numberText = EnglishAlphabetNumbering.ToLatinAlphabetNumberUpperCase(index); break; } case ListNumberingType.GREEK_LOWER: { numberText = GreekAlphabetNumbering.ToGreekAlphabetNumberLowerCase(index); break; } case ListNumberingType.GREEK_UPPER: { numberText = GreekAlphabetNumbering.ToGreekAlphabetNumberUpperCase(index); break; } case ListNumberingType.ZAPF_DINGBATS_1: { numberText = iText.IO.Util.JavaUtil.CharToString((char)(index + 171)); break; } case ListNumberingType.ZAPF_DINGBATS_2: { numberText = iText.IO.Util.JavaUtil.CharToString((char)(index + 181)); break; } case ListNumberingType.ZAPF_DINGBATS_3: { numberText = iText.IO.Util.JavaUtil.CharToString((char)(index + 191)); break; } case ListNumberingType.ZAPF_DINGBATS_4: { numberText = iText.IO.Util.JavaUtil.CharToString((char)(index + 201)); break; } default: { throw new InvalidOperationException(); } } Text textElement = new Text(renderer.GetProperty <String>(Property.LIST_SYMBOL_PRE_TEXT) + numberText + renderer .GetProperty <String>(Property.LIST_SYMBOL_POST_TEXT)); IRenderer textRenderer; // Be careful. There is a workaround here. For Greek symbols we first set a dummy font with document=null // in order for the metrics to be taken into account correctly during layout. // Then on draw we set the correct font with actual document in order for the font objects to be created. if (numberingType == ListNumberingType.GREEK_LOWER || numberingType == ListNumberingType.GREEK_UPPER || numberingType == ListNumberingType.ZAPF_DINGBATS_1 || numberingType == ListNumberingType.ZAPF_DINGBATS_2 || numberingType == ListNumberingType.ZAPF_DINGBATS_3 || numberingType == ListNumberingType.ZAPF_DINGBATS_4) { String constantFont = (numberingType == ListNumberingType.GREEK_LOWER || numberingType == ListNumberingType .GREEK_UPPER) ? FontConstants.SYMBOL : FontConstants.ZAPFDINGBATS; textRenderer = new _TextRenderer_201(constantFont, textElement); try { textRenderer.SetProperty(Property.FONT, PdfFontFactory.CreateFont(constantFont)); } catch (System.IO.IOException) { } } else { textRenderer = new TextRenderer(textElement); } return(textRenderer); } else { throw new InvalidOperationException(); } } } }