Example #1
0
        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;
                }
            }
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
 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()
     );
Example #5
0
 /// <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);
        }
Example #9
0
 /// <summary>Creates a List with a custom numbering type.</summary>
 /// <param name="listNumberingType">a prefix style</param>
 public List(ListNumberingType listNumberingType)
     : base()
 {
     SetListSymbol(listNumberingType);
 }
Example #10
0
        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();
                            }
                        }
                    }
                }
            }
        }
Example #11
0
        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();
                    }
                }
            }
        }