Exemplo n.º 1
0
            //Automatically called for each chunk of text in the PDF
            public override void RenderText(TextRenderInfo renderInfo)
            {
                base.RenderText(renderInfo);
                //See if the current chunk contains the text
                var startPosition = System.Globalization.CultureInfo.CurrentCulture.CompareInfo.IndexOf(renderInfo.GetText(), this.TextToSearchFor, this.CompareOptions);

                //If not found bail
                if (startPosition < 0)
                {
                    return;
                }

                //Grab the individual characters
                var chars = renderInfo.GetCharacterRenderInfos().Skip(startPosition).Take(this.TextToSearchFor.Length).ToList();

                //Grab the first and last character
                var firstChar = chars.First();
                var lastChar  = chars.Last();


                //Get the bounding box for the chunk of text
                var bottomLeft = firstChar.GetDescentLine().GetStartPoint();
                var topRight   = lastChar.GetAscentLine().GetEndPoint();

                //Create a rectangle from it
                var rect = new iTextSharp.text.Rectangle(bottomLeft[Vector.I1], bottomLeft[Vector.I2], topRight[Vector.I1], topRight[Vector.I2]);

                //Add this to our main collection
                this.myPoints.Add(new RectAndText(rect, this.TextToSearchFor));
            }
Exemplo n.º 2
0
            public override void RenderText(TextRenderInfo renderInfo)
            {
                base.RenderText(renderInfo);

                //GraphicsState gs = (GraphicsState)gsField.GetValue(renderInfo);//expensive???
                //Font font = new Font { Name = string.Join(", ", gs.Font.FullFontName[0]), Size = gs.FontSize };

                List <CharBox>         cbs  = new List <CharBox>();
                IList <TextRenderInfo> cris = renderInfo.GetCharacterRenderInfos();

                foreach (TextRenderInfo cri in cris)
                {
                    Vector  baseLeft = cri.GetBaseline().GetStartPoint();
                    Vector  topRight = cri.GetAscentLine().GetEndPoint();
                    float   x        = baseLeft[Vector.I1];
                    float   y        = topRight[Vector.I2];
                    CharBox cb       = new CharBox
                    {
                        Char = cri.GetText(),
                        R    = new System.Drawing.RectangleF
                        {
                            X      = x - pageSize.X,
                            Y      = pageSize.Height + pageSize.Y - y,//(!)basic positioning point is char's baseLine, not ascentLine
                            Width  = topRight[Vector.I1] - x,
                            Height = y - baseLeft[Vector.I2],
                        },
                        //Font = font
                    };
                    cbs.Add(cb);
                }
                CharBoxs.AddRange(cbs);
            }
Exemplo n.º 3
0
        public override void EventOccurred(IEventData data, EventType type)
        {
            if (!type.Equals(EventType.RENDER_TEXT))
            {
                return;
            }

            TextRenderInfo renderInfo = (TextRenderInfo)data;

            string curFont     = renderInfo.GetFont().GetFontProgram().ToString();
            float  curFontSize = renderInfo.GetFontSize();

            IList <TextRenderInfo> text = renderInfo.GetCharacterRenderInfos();

            foreach (TextRenderInfo t in text)
            {
                string letter  = t.GetText();
                Vector l_start = t.GetBaseline().GetStartPoint(),
                       l_end   = t.GetAscentLine().GetEndPoint();

                Rectangle l_rect = new Rectangle(l_start.Get(0), l_start.Get(1),
                                                 l_end.Get(0) - l_start.Get(0), l_end.Get(1) - l_start.Get(1));

                if (letter != " " && !letter.Contains(' '))
                {
                    TextResult.Add(new TextChunk()
                    {
                        Text       = letter,
                        Rect       = l_rect,
                        FontFamily = curFont,
                        FontSize   = curFontSize,
                    });
                }
            }
        }
Exemplo n.º 4
0
        public virtual void RenderText(TextRenderInfo renderInfo)
        {
            if (renderInfo.PdfString.ToUnicodeString().Length == 0)
            {
                return;
            }

            // if true, than clipping path was completely cleaned
            if (newClippingPath.IsEmpty())
            {
                LineSegment baseline = renderInfo.GetUnscaledBaseline();
                chunks.Add(new PdfCleanUpContentChunk.Text(renderInfo.PdfString, baseline.GetStartPoint(),
                                                           baseline.GetEndPoint(), false, strNumber));
            }
            else
            {
                foreach (TextRenderInfo ri in renderInfo.GetCharacterRenderInfos())
                {
                    bool        isAllowed = filter.AllowText(ri);
                    LineSegment baseline  = ri.GetUnscaledBaseline();

                    chunks.Add(new PdfCleanUpContentChunk.Text(ri.PdfString, baseline.GetStartPoint(),
                                                               baseline.GetEndPoint(), isAllowed, strNumber));
                }
            }

            ++strNumber;
        }
 virtual public void RenderText(TextRenderInfo renderInfo)
 {
     foreach (TextRenderInfo glyphInfo in renderInfo.GetCharacterRenderInfos())
     {
         deleg.RenderText(glyphInfo);
     }
 }
        private string GetTextFromRectangle(Rectangle rectangle)
        {
            string rectText = String.Empty;

            TextRegionEventFilter          textRegionEventFilter = new TextRegionEventFilter(rectangle);
            LocationTextExtractionStrategy extractionStrategy    = new LocationTextExtractionStrategy();

            foreach (IEventData textRender in textRenderList)
            {
                if (textRegionEventFilter.IsInsideRectangle(textRender, EventType.RENDER_TEXT))
                {
                    extractionStrategy.EventOccurred(textRender, EventType.RENDER_TEXT);
                }
                else if (textRegionEventFilter.Accept(textRender, EventType.RENDER_TEXT))
                {
                    TextRenderInfo         textRenderInfo = (TextRenderInfo)textRender;
                    IList <TextRenderInfo> renderInfoList = textRenderInfo.GetCharacterRenderInfos();
                    for (int index = 0; index < renderInfoList.Count(); index++)
                    {
                        if (textRegionEventFilter.IsInsideRectangle(renderInfoList[index], EventType.RENDER_TEXT))
                        {
                            extractionStrategy.EventOccurred(renderInfoList[index], EventType.RENDER_TEXT);
                        }
                    }
                }
            }
            rectText = extractionStrategy.GetResultantText();
            return(rectText);
        }
Exemplo n.º 7
0
            //--------------------------------------------------------------------------------------------------
            public void RenderText(TextRenderInfo renderInfo)
            {
                LineSegment segment  = renderInfo.GetBaseline();
                TextChunk   location = new TextChunk(renderInfo.GetText(), segment.GetStartPoint(), segment.GetEndPoint(), renderInfo.GetSingleSpaceWidth());

                location.iPage = Page;

                int renderInfoTextLength = new StringInfo(renderInfo.GetText()).LengthInTextElements;

                if (renderInfoTextLength == 1)
                {
                    location.AscentLines.Add(renderInfo.GetAscentLine());
                    location.DescentLines.Add(renderInfo.GetDescentLine());
                }
                else
                {
                    IList <TextRenderInfo> infos = renderInfo.GetCharacterRenderInfos();
                    System.Diagnostics.Debug.Assert(infos != null);
                    System.Diagnostics.Debug.Assert(renderInfoTextLength == infos.Count);
                    foreach (TextRenderInfo info in infos)
                    {
                        location.AscentLines.Add(info.GetAscentLine());
                        location.DescentLines.Add(info.GetDescentLine());
                    }
                }
                m_LocationalResult.Add(location);
            }
Exemplo n.º 8
0
            public override void RenderText(TextRenderInfo renderInfo)
            {
                base.RenderText(renderInfo);

                List <CharBox>         cbs  = new List <CharBox>();
                IList <TextRenderInfo> cris = renderInfo.GetCharacterRenderInfos();

                foreach (TextRenderInfo cri in cris)
                {
                    Vector  baseLeft = cri.GetBaseline().GetStartPoint();
                    Vector  topRight = cri.GetAscentLine().GetEndPoint();
                    float   x        = baseLeft[Vector.I1];
                    float   y        = topRight[Vector.I2];
                    CharBox cb       = new CharBox
                    {
                        Char = cri.GetText(),
                        R    = new System.Drawing.RectangleF
                        {
                            X      = x - pageSize.X,
                            Y      = pageSize.Height + pageSize.Y - y,//(!)basic positioning point is char's baseLine, not ascentLine
                            Width  = topRight[Vector.I1] - x,
                            Height = y - baseLeft[Vector.I2],
                        },
                        //Font = font,
                        //FontSize = fontSize
                    };
                    cbs.Add(cb);
                }
                CharBoxs.AddRange(cbs);
            }
Exemplo n.º 9
0
 public void RenderText(TextRenderInfo renderInfo)
 {
     foreach (TextRenderInfo info in renderInfo.GetCharacterRenderInfos())
     {
         this.textextractionstrategy.RenderText(info);
     }
 }
 public override void RenderText(TextRenderInfo renderInfo)
 {
     foreach (TextRenderInfo tri in renderInfo.GetCharacterRenderInfos())
     {
         base.RenderText(tri);
     }
 }
Exemplo n.º 11
0
        protected override IList <CharacterRenderInfo> ToCRI(TextRenderInfo tri)
        {
            IList <CharacterRenderInfo> cris = new List <CharacterRenderInfo>();

            foreach (TextRenderInfo subTri in tri.GetCharacterRenderInfos())
            {
                cris.Add(new CCharacterRenderInfo(subTri));
            }
            return(cris);
        }
Exemplo n.º 12
0
            public override void EventOccurred(IEventData data, EventType type)
            {
                base.EventOccurred(data, type);

                TextRenderInfo tri = data as TextRenderInfo;

                //if (type != EventType.RENDER_TEXT)
                if (tri == null)
                {
                    return;
                }

                PdfFont font     = tri.GetFont();//it has been checked that it returns the same font object.
                float   fontSize = Math.Abs/*sometimes it is negative in iText7*/ (tri.GetFontSize());
                //if (font.GetAscent("I", fontSize) == 0)
                //    fontSize = 0;

                List <CharBox>         cbs  = new List <CharBox>();
                IList <TextRenderInfo> cris = tri.GetCharacterRenderInfos();

                foreach (TextRenderInfo cri in cris)
                {
                    Vector baseLeft = cri.GetBaseline().GetStartPoint();
                    Vector topRight = cri.GetAscentLine().GetEndPoint();
                    //float rise = cri.GetRise();
                    //if (rise != 0)
                    //    rise = rise;
                    float fontHeightFromBaseLine = topRight.Get(Vector.I2) - baseLeft.Get(Vector.I2);
                    //if (fontSize > 0)
                    //{
                    //    float fontHeightFromBaseLine2 = fontSize * 0.75f/*(?)convertion from PX to PT*/;//!!!this calculation is heuristic and coincides with cri.GetAscentLine().GetEndPoint().Get(Vector.I2) - bottomLeft.Get(Vector.I2) in iText5
                    //    if (fontHeightFromBaseLine > fontHeightFromBaseLine2)
                    //        fontHeightFromBaseLine = fontHeightFromBaseLine2;
                    //}
                    float x = baseLeft.Get(Vector.I1);
                    //float y = topRight.Get(Vector.I2);
                    CharBox cb = new CharBox
                    {
                        Char = cri.GetText(),
                        R    = new System.Drawing.RectangleF
                        {
                            X     = x - pageSize.X,
                            Y     = pageSize.Height + pageSize.Y - baseLeft.Get(Vector.I2) - fontHeightFromBaseLine,//(!)basic positioning point is char's baseLine, not ascentLine
                            Width = topRight.Get(Vector.I1) - x,
                            //Height = y - bottomLeft.Get(Vector.I2)// + d,
                            Height = fontHeightFromBaseLine
                        },
                        Font     = font,
                        FontSize = fontSize
                    };
                    cbs.Add(cb);
                }
                CharBoxs.AddRange(cbs);
            }
Exemplo n.º 13
0
 public override void EventOccurred(IEventData data, EventType type)
 {
     if (type == EventType.RENDER_TEXT)
     {
         TextRenderInfo renderInfo = (TextRenderInfo)data;
         foreach (TextRenderInfo tri in renderInfo.GetCharacterRenderInfos())
         {
             base.EventOccurred(tri, type);
         }
     }
 }
 public virtual void EventOccurred(IEventData data, EventType type)
 {
     if (type.Equals(EventType.RENDER_TEXT))
     {
         TextRenderInfo         renderInfo = (TextRenderInfo)data;
         IList <TextRenderInfo> subs       = renderInfo.GetCharacterRenderInfos();
         for (int i = 0; i < subs.Count; i++)
         {
             TextRenderInfo charInfo = subs[i];
             glyphWith = charInfo.GetBaseline().GetLength();
         }
     }
 }
Exemplo n.º 15
0
            public virtual void RenderText(TextRenderInfo renderInfo)
            {
                IList <TextRenderInfo> subs             = renderInfo.GetCharacterRenderInfos();
                TextRenderInfo         previousCharInfo = subs[0];

                for (int i = 1; i < subs.Count; i++)
                {
                    TextRenderInfo charInfo          = subs[i];
                    Vector         previousEndPoint  = previousCharInfo.GetBaseline().GetEndPoint();
                    Vector         currentStartPoint = charInfo.GetBaseline().GetStartPoint();
                    AssertVectorsEqual(previousEndPoint, currentStartPoint, charInfo.GetText());
                    previousCharInfo = charInfo;
                }
            }
Exemplo n.º 16
0
 public virtual void EventOccurred(IEventData data, EventType type)
 {
     if (type.Equals(EventType.RENDER_TEXT))
     {
         TextRenderInfo textRenderInfo = (TextRenderInfo)data;
         foreach (TextRenderInfo glyphRenderInfo in textRenderInfo.GetCharacterRenderInfos())
         {
             delegate_.EventOccurred(glyphRenderInfo, type);
         }
     }
     else
     {
         delegate_.EventOccurred(data, type);
     }
 }
Exemplo n.º 17
0
        public void RenderText(TextRenderInfo renderInfo)
        {
            var text = renderInfo.GetText();

            var match = Regex.Match(text, _matchPattern);

            if (match.Success)
            {
                var p1 = renderInfo.GetCharacterRenderInfos()[match.Index].GetAscentLine().GetStartPoint();
                var p2 = renderInfo.GetCharacterRenderInfos()[match.Index + match.Length].GetAscentLine().GetEndPoint();
                var p3 = renderInfo.GetCharacterRenderInfos()[match.Index + match.Length].GetDescentLine().GetEndPoint();
                var p4 = renderInfo.GetCharacterRenderInfos()[match.Index].GetDescentLine().GetStartPoint();

                _canvas.SaveState();
                _canvas.SetColorStroke(BaseColor.BLACK);
                _canvas.SetColorFill(BaseColor.BLACK);
                _canvas.MoveTo(p1[Vector.I1], p1[Vector.I2]);
                _canvas.LineTo(p2[Vector.I1], p2[Vector.I2]);
                _canvas.LineTo(p3[Vector.I1], p3[Vector.I2]);
                _canvas.LineTo(p4[Vector.I1], p4[Vector.I2]);
                _canvas.ClosePathFillStroke();
                _canvas.RestoreState();
            }
        }
Exemplo n.º 18
0
 public virtual void EventOccurred(IEventData data, EventType type)
 {
     if (type.Equals(EventType.RENDER_TEXT))
     {
         TextRenderInfo         renderInfo       = (TextRenderInfo)data;
         IList <TextRenderInfo> subs             = renderInfo.GetCharacterRenderInfos();
         TextRenderInfo         previousCharInfo = subs[0];
         for (int i = 1; i < subs.Count; i++)
         {
             TextRenderInfo charInfo          = subs[i];
             Vector         previousEndPoint  = previousCharInfo.GetBaseline().GetEndPoint();
             Vector         currentStartPoint = charInfo.GetBaseline().GetStartPoint();
             AssertVectorsEqual(charInfo.GetText(), previousEndPoint, currentStartPoint);
             previousCharInfo = charInfo;
         }
     }
 }
Exemplo n.º 19
0
        public void RenderText(TextRenderInfo renderInfo)
        {
            if (renderInfo.PdfString.ToUnicodeString().Length == 0)
            {
                return;
            }

            foreach (TextRenderInfo ri in renderInfo.GetCharacterRenderInfos())
            {
                bool        textIsInsideRegion = TextIsInsideRegion(ri);
                LineSegment baseline           = ri.GetUnscaledBaseline();

                chunks.Add(new PdfCleanUpContentChunk(ri.PdfString, baseline.GetStartPoint(), baseline.GetEndPoint(), !textIsInsideRegion, strNumber));
            }

            ++strNumber;
        }
Exemplo n.º 20
0
        public override void EventOccurred(IEventData data, EventType type)
        {
            if (!type.Equals(EventType.RENDER_TEXT))
            {
                return;
            }

            TextRenderInfo renderInfo = (TextRenderInfo)data;

            string curFont = renderInfo.GetFont().GetFontProgram().ToString();

            float curFontSize = renderInfo.GetFontSize();

            IList <TextRenderInfo> text = renderInfo.GetCharacterRenderInfos();

            foreach (TextRenderInfo t in text)
            {
                string letter = t.GetText();

                Vector letterStart = t.GetDescentLine().GetStartPoint();
                Vector letterEnd   = t.GetAscentLine().GetEndPoint();

                if (letter != " " && !letter.Contains(" "))
                {
                    TextChar c = new TextChar();
                    chars.Add(c);

                    c.text = letter;
                    c.x1   = letterStart.Get(0);
                    c.x2   = letterEnd.Get(0);

                    c.y1 = letterStart.Get(1);
                    c.y2 = letterEnd.Get(1);

                    if (c.y1 > c.y2)
                    {
                        c.y1 = letterEnd.Get(1);
                        c.y2 = letterStart.Get(1);
                    }

                    c.fontFamily = curFont;
                    c.fontSize   = curFontSize;
                }
            }
        }
Exemplo n.º 21
0
        string RecalculateSpaces(TextRenderInfo textInfo)
        {
            var           chars    = textInfo.GetCharacterRenderInfos();
            float         charSize = (textInfo.GetUnscaledWidth() / chars.Count) / 2.0f;
            StringBuilder sb       = new StringBuilder();

            foreach (var ch in chars)
            {
                string chText = ch.GetText();

                if (chText != " " || (ch.GetUnscaledWidth() > charSize))
                {
                    sb.Append(chText);
                }
            }

            return(sb.ToString());
        }
Exemplo n.º 22
0
            public override void RenderText(TextRenderInfo renderInfo)
            {
                base.RenderText(renderInfo);

                List <TextChunk>       tcs  = new List <TextChunk>();
                IList <TextRenderInfo> cris = renderInfo.GetCharacterRenderInfos();

                foreach (TextRenderInfo cri in cris)
                {
                    //Vector bottomLeft = cri.GetDescentLine().GetStartPoint();
                    Vector    bottomLeft = cri.GetBaseline().GetStartPoint();
                    Vector    topRight   = cri.GetAscentLine().GetEndPoint();
                    TextChunk tc         = new TextChunk(cri.GetText(), bottomLeft, topRight, cri.GetSingleSpaceWidth());
                    //TextChunks.Add(new TextChunk2(rect, renderInfo.GetText()));
                    tcs.Add(tc);
                }
                TextChunks.AddRange(tcs);
            }
 public virtual void EventOccurred(IEventData data, EventType type)
 {
     if (type.Equals(EventType.RENDER_TEXT))
     {
         TextRenderInfo renderInfo = (TextRenderInfo)data;
         if (firstTextRenderInfo == null)
         {
             firstTextRenderInfo = renderInfo;
             firstTextRenderInfo.PreserveGraphicsState();
         }
         IList <TextRenderInfo> subs = renderInfo.GetCharacterRenderInfos();
         for (int i = 0; i < subs.Count; i++)
         {
             TextRenderInfo charInfo = subs[i];
             glyphWidth = charInfo.GetBaseline().GetLength();
         }
     }
 }
Exemplo n.º 24
0
        public virtual void RenderText(TextRenderInfo renderInfo)
        {
            if (renderInfo.PdfString.ToUnicodeString().Length == 0)
            {
                return;
            }

            foreach (TextRenderInfo ri in renderInfo.GetCharacterRenderInfos())
            {
                bool        isAllowed = filter.AllowText(ri);
                LineSegment baseline  = ri.GetUnscaledBaseline();

                chunks.Add(new PdfCleanUpContentChunk.Text(ri.PdfString, baseline.GetStartPoint(),
                                                           baseline.GetEndPoint(), isAllowed, strNumber));
            }

            ++strNumber;
        }
        //Automatically called for each chunk of text in the PDF
        public override void RenderText(TextRenderInfo renderInfo)
        {
            base.RenderText(renderInfo);

            var chars = renderInfo.GetCharacterRenderInfos();

            foreach (var c in chars)
            {
                //Console.Write(c.PdfString);

                var startPoint = c.GetBaseline().GetStartPoint();

                if (startPoint[0] > 400 && startPoint[0] < 480 && startPoint[1] > 842 - 128 && startPoint[1] < 848 - 110)
                {
                    _text += c.PdfString;
                }
            }
        }
Exemplo n.º 26
0
        /// <summary>Filter a TextRenderInfo object</summary>
        /// <param name="text">the TextRenderInfo to be filtered</param>
        public virtual PdfCleanUpFilter.FilterResult <PdfArray> FilterText(TextRenderInfo text)
        {
            PdfTextArray textArray = new PdfTextArray();

            if (IsTextNotToBeCleaned(text))
            {
                return(new PdfCleanUpFilter.FilterResult <PdfArray>(false, new PdfArray(text.GetPdfString())));
            }
            foreach (TextRenderInfo ri in text.GetCharacterRenderInfos())
            {
                if (IsTextNotToBeCleaned(ri))
                {
                    textArray.Add(ri.GetPdfString());
                }
                else
                {
                    textArray.Add(new PdfNumber(-ri.GetUnscaledWidth() * 1000f / (text.GetFontSize() * text.GetHorizontalScaling
                                                                                      () / 100)));
                }
            }
            return(new PdfCleanUpFilter.FilterResult <PdfArray>(true, textArray));
        }
Exemplo n.º 27
0
        public override void RenderText(TextRenderInfo renderInfo)
        {
            base.RenderText(renderInfo);

            // Get the current block of text.
            var currentText = renderInfo.GetText();

            // Compare the current block of text to our search text and get the start position.
            var startPosition = CultureInfo.CurrentCulture.CompareInfo.IndexOf(currentText, this.SearchText, this.CompareOptions);

            // If no start position or the current block does not match our search text, return silently.
            // The second condition ensures that duplicate locations are not returned for
            // very similar text values. For example: "1234" exists within the block
            // of text "12345", but is not actually a match.
            //
            if (startPosition < 0 || currentText != SearchText)
            {
                return;
            }

            // Get the list of char values in the block of text.
            var chars = renderInfo.GetCharacterRenderInfos().Skip(startPosition).Take(this.SearchText.Length).ToList();

            // Select the first and last chars.
            var firstChar = chars.First();
            var lastChar  = chars.Last();

            // Get the two corner vectors of the rectangle containing the text.
            var bottomLeft = firstChar.GetDescentLine().GetStartPoint();
            var topRight   = lastChar.GetAscentLine().GetEndPoint();

            // Create a new rectangle instance from the vector data.
            var rect = new Rectangle(bottomLeft[Vector.I1], bottomLeft[Vector.I2], topRight[Vector.I1], topRight[Vector.I2]);

            // Create a new container instance and add it to the collection.
            TextLocations.Add(new RectAndText(rect, this.SearchText));

            //oh boy....
        }
      public override void EventOccurred(IEventData data, EventType type)
      {
          if (!type.Equals(EventType.RENDER_TEXT)) return;
          TextRenderInfo renderInfo = (TextRenderInfo)data;
 
          IList<TextRenderInfo> text = renderInfo.GetCharacterRenderInfos();
          foreach (TextRenderInfo t in text)
          {
              string letter = t.GetText();
              Vector letterStart = t.GetBaseline().GetStartPoint();
              Vector letterEnd = t.GetAscentLine().GetEndPoint();
              Rectangle letterRect = new Rectangle(letterStart.Get(0), letterStart.Get(1), letterEnd.Get(0) - letterStart.Get(0), letterEnd.Get(1) - letterStart.Get(1));
                  TextMyChunk chunk = new TextMyChunk();
                  chunk.Text = letter;
                  chunk.Rect = letterRect;
                  chunk.FontFamily = t.GetFont().GetFontProgram().ToString();
                  chunk.FontSize = t.GetFontSize();
                  chunk.SpaceWidth = t.GetSingleSpaceWidth();
  
                  objectResult.Add(chunk);
              
          }
      }
Exemplo n.º 29
0
        public override void EventOccurred(IEventData data, EventType type)
        {
            if (!type.Equals(EventType.RENDER_TEXT))
            {
                return;
            }

            TextRenderInfo renderInfo = (TextRenderInfo)data;

            float counter = increaseCounter();

            var font             = renderInfo.GetFont().GetFontProgram();
            var originalFontName = font.ToString();
            var fontRegex        = Regex.Match(originalFontName, @"(?<=\+)[a-zA-Z\s]+");

            string fontName = fontRegex.Success ? fontRegex.Value : originalFontName;

            var fontStyle = font.GetFontNames().GetFontStyle();

            float curFontSize = renderInfo.GetFontSize();

            float key = counter;

            IList <TextRenderInfo> text = renderInfo.GetCharacterRenderInfos();

            foreach (TextRenderInfo character in text)
            {
                key += 0.001f;

                var textRenderMode = character.GetTextRenderMode();
                var opacity        = character.GetGraphicsState().GetFillOpacity();

                //if (textRenderMode != 0 || opacity != 1)
                //{

                //}

                string letter = character.GetText();

                Color color;

                var fillColor = character.GetFillColor();
                var colors    = fillColor.GetColorValue();
                if (colors.Length == 1)
                {
                    color = Color.FromArgb((int)(255 * (1 - colors[0])), Color.Black);
                }
                else if (colors.Length == 3)
                {
                    color = Color.FromArgb((int)(255 * colors[0]), (int)(255 * colors[1]), (int)(255 * colors[2]));
                }
                else if (colors.Length == 4)
                {
                    color = Color.FromArgb((int)(255 * colors[0]), (int)(255 * colors[1]), (int)(255 * colors[2]), (int)(255 * colors[3]));
                }
                else
                {
                    color = Color.Black;
                }

                //if(letter == "A")
                //{

                //}

                if (string.IsNullOrWhiteSpace(letter))
                {
                    continue;
                }

                //Get the bounding box for the chunk of text
                var bottomLeft = character.GetDescentLine().GetStartPoint();
                var topRight   = character.GetAscentLine().GetEndPoint();

                //Create a rectangle from it
                var rect = new Geom.Rectangle(
                    bottomLeft.Get(Vector.I1),
                    topRight.Get(Vector.I2),
                    topRight.Get(Vector.I1),
                    topRight.Get(Vector.I2)
                    );

                var currentChunk = new itext.pdfimage.Models.TextChunk()
                {
                    Text       = letter,
                    Rect       = rect,
                    FontFamily = fontName,
                    FontSize   = (int)curFontSize,
                    FontStyle  = fontStyle,
                    Color      = color,
                    SpaceWidth = character.GetSingleSpaceWidth() / 2f
                };

                chunkDictionairy.Add(key, currentChunk);
            }

            base.EventOccurred(data, type);
        }
 virtual public void RenderText(TextRenderInfo renderInfo) {
     foreach (TextRenderInfo glyphInfo in renderInfo.GetCharacterRenderInfos())
         deleg.RenderText(glyphInfo);
 }
        public override void RenderText(TextRenderInfo renderInfo)
        {
            base.RenderText(renderInfo);
            LineSegment baseline = renderInfo.GetBaseline();
            //Create ExtendedChunk
            ExtendedTextChunk aExtendedChunk = new ExtendedTextChunk(renderInfo.GetText(), baseline.GetStartPoint(), baseline.GetEndPoint(), renderInfo.GetSingleSpaceWidth(), renderInfo.GetCharacterRenderInfos().ToList());

            this.m_DocChunks.Add(aExtendedChunk);
        }