/// <summary> /// Creates a TextStyle object by getting the font name and font size /// from a TextRenderInfo object. /// </summary> /// <param name="textRenderInfo">Object that contains info about a text snippet</param> public TextStyle(TextRenderInfo textRenderInfo) { String font = textRenderInfo.GetFont().FullFontName[0][3]; if (font.Contains("+")) font = font.Substring(font.IndexOf("+") + 1, font.Length - font.IndexOf("+") - 1); if (font.Contains("-")) font = font.Substring(0, font.IndexOf("-")); this.fontName = font; this.fontSize = textRenderInfo.GetAscentLine().GetStartPoint()[1] - textRenderInfo.GetDescentLine().GetStartPoint()[1]; }
public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) { //to check the components , you can use to print line by line //DataModel dataModel = new DataModel(); //1.1.18 string curDataItself = renderInfo.GetText(); //Console.WriteLine(curDataItself); string curDataFontStyle = ""; string curFont = renderInfo.GetFont().PostscriptFontName; // http://itextsupport.com/apidocs/itext5/5.5.9/com/itextpdf/text/pdf/parser/TextRenderInfo.html#getFont-- if ((renderInfo.GetTextRenderMode() == 2 /*(int)TextRenderMode.FillThenStrokeText*/)) { curDataFontStyle = "BOLD"; curFont += "-Bold"; } //This code assumes that if the baseline changes then we're on a newline Vector curBaseline = renderInfo.GetBaseline().GetStartPoint(); Vector topRight = renderInfo.GetAscentLine().GetEndPoint(); iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(curBaseline[Vector.I1], curBaseline[Vector.I2], topRight[Vector.I1], topRight[Vector.I2]); Single curFontSize = rect.Height; //dataModel.fontSize = curFontSize; if (lastBaseLine != null && lastBaseLine[Vector.I2] != curBaseline[Vector.I2]) { DataModel aDataModel = new DataModel(); aDataModel.dataItself = lastDataItself; aDataModel.fontSize = lastFontSize; aDataModel.dataFontStyle = lastDataFontStyle; aDataModel.fontName = lastFont; listOfData.Add(aDataModel); lastDataItself = curDataItself; lastFont = curFont; lastDataFontStyle = curDataFontStyle; lastFontSize = curFontSize; } else { lastDataItself += curDataItself; lastFont = curFont; lastFontSize = curFontSize; lastDataFontStyle = curDataFontStyle; } if (lastBaseLine == null) { lastDataItself = curDataItself; lastFont = curFont; lastFontSize = curFontSize; lastDataFontStyle = curDataFontStyle; } this.lastBaseLine = curBaseline; }
/** * Method invokes by the PdfContentStreamProcessor. * Passes a TextRenderInfo for every text chunk that is encountered. * We'll use this object to obtain coordinates. * @see com.itextpdf.text.pdf.parser.RenderListener#renderText(com.itextpdf.text.pdf.parser.TextRenderInfo) */ virtual public void RenderText(TextRenderInfo renderInfo) { if (textRectangle == null) textRectangle = renderInfo.GetDescentLine().GetBoundingRectange(); else textRectangle.Add(renderInfo.GetDescentLine().GetBoundingRectange()); textRectangle.Add(renderInfo.GetAscentLine().GetBoundingRectange()); }
/// <summary> /// Stores the start and end points and the ascent and descent info from /// a text snippet into a Rectangle object. /// </summary> /// <param name="textRenderInfo">Object that contains info about a text snippet</param> /// <returns>coordinates in the form of a Rectangle object</returns> static Rectangle GetRectangle(TextRenderInfo textRenderInfo) { LineSegment descentLine = textRenderInfo.GetDescentLine(); LineSegment ascentLine = textRenderInfo.GetAscentLine(); float x0 = descentLine.GetStartPoint()[0]; float x1 = descentLine.GetEndPoint()[0]; float y0 = descentLine.GetStartPoint()[1]; float y1 = ascentLine.GetEndPoint()[1]; return new Rectangle(x0, y0, x1, y1); }
/** * Method invokes by the PdfContentStreamProcessor. * Passes a TextRenderInfo for every text chunk that is encountered. * We'll use this object to obtain coordinates. * @see com.itextpdf.text.pdf.parser.RenderListener#renderText(com.itextpdf.text.pdf.parser.TextRenderInfo) */ virtual public void RenderText(TextRenderInfo renderInfo) { if (textRectangle == null) { textRectangle = renderInfo.GetDescentLine().GetBoundingRectange(); } else { textRectangle.Add(renderInfo.GetDescentLine().GetBoundingRectange()); } textRectangle.Add(renderInfo.GetAscentLine().GetBoundingRectange()); }
public override bool AllowText(TextRenderInfo renderInfo) { LineSegment ascent = renderInfo.GetAscentLine(); LineSegment descent = renderInfo.GetDescentLine(); Rectangle r1 = new Rectangle(Math.Min(descent.GetStartPoint()[0], descent.GetEndPoint()[0]), descent.GetStartPoint()[1], Math.Max(descent.GetStartPoint()[0], descent.GetEndPoint()[0]), ascent.GetEndPoint()[1]); foreach (Rectangle rectangle in rectangles) { if (Intersect(r1, rectangle)) { return false; } } return true; }
public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) { string curFont = renderInfo.GetFont().PostscriptFontName; //Check if faux bold is used if ((renderInfo.GetTextRenderMode() == (int)TextRenderMode.FillThenStrokeText)) { curFont += "-Bold"; } //This code assumes that if the baseline changes then we're on a newline Vector curBaseline = renderInfo.GetBaseline().GetStartPoint(); Vector topRight = renderInfo.GetAscentLine().GetEndPoint(); iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(curBaseline[Vector.I1], curBaseline[Vector.I2], topRight[Vector.I1], topRight[Vector.I2]); Single curFontSize = rect.Height; //See if something has changed, either the baseline, the font or the font size if ((this.lastBaseLine == null) || (curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) || (curFontSize != lastFontSize) || (curFont != lastFont)) { //if we've put down at least one span tag close it if ((this.lastBaseLine != null)) { this.result.AppendLine("</span>"); } //If the baseline has changed then insert a line break if ((this.lastBaseLine != null) && curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) { this.result.AppendLine("<br />"); } //Create an HTML tag with appropriate styles this.result.AppendFormat("<span style=\"font-family:{0};font-size:{1}\">", curFont, curFontSize); } //Append the current text this.result.Append(renderInfo.GetText()); //Set currently used properties this.lastBaseLine = curBaseline; this.lastFontSize = curFontSize; this.lastFont = curFont; }
public override void RenderText(TextRenderInfo renderInfo) { base.RenderText(renderInfo); var bottomLeft = renderInfo.GetDescentLine().GetStartPoint(); var topRight = renderInfo.GetAscentLine().GetEndPoint(); var rect = new iTextSharp.text.Rectangle( bottomLeft[Vector.I1], bottomLeft[Vector.I2], topRight[Vector.I1], topRight[Vector.I2] ); this.containers.Add(new TextContainer() { Container = rect, Text = renderInfo.GetText() }); }
public override bool AllowText(TextRenderInfo renderInfo) { LineSegment ascent = renderInfo.GetAscentLine(); LineSegment descent = renderInfo.GetDescentLine(); Point2D[] glyphRect = new Point2D[] { new Point2D.Float(ascent.GetStartPoint()[0], ascent.GetStartPoint()[1]), new Point2D.Float(ascent.GetEndPoint()[0], ascent.GetEndPoint()[1]), new Point2D.Float(descent.GetEndPoint()[0], descent.GetEndPoint()[1]), new Point2D.Float(descent.GetStartPoint()[0], descent.GetStartPoint()[1]), }; foreach (Rectangle rectangle in rectangles) { Point2D[] redactRect = GetVertices(rectangle); if (Intersect(glyphRect, redactRect)) { return false; } } return true; }
public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) { string curFont = renderInfo.GetFont().PostscriptFontName; if ((renderInfo.GetTextRenderMode() == (int)TextRenderMode.FillThenStrokeText)) { curFont += "-Bold"; } Vector curBaseline = renderInfo.GetBaseline().GetStartPoint(); Vector topRight = renderInfo.GetAscentLine().GetEndPoint(); iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(curBaseline[Vector.I1], curBaseline[Vector.I2], topRight[Vector.I1], topRight[Vector.I2]); Single curFontSize = rect.Height; if ((this.lastBaseLine == null) || (curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) || (curFontSize != lastFontSize) || (curFont != lastFont)) { if ((this.lastBaseLine != null)) { this.result.AppendLine("\"},"); } if ((this.lastBaseLine != null) && curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) { this.result.Append("<br />"); } if (this.result.Length == 0) { this.result.Append("{\"fontName\":\"" + curFont + "\",\"fontSize\":\"" + curFontSize + "\",\"text\":\""); } else { this.result.Append("{\"fontName\":\"" + curFont + "\",\"fontSize\":\"" + curFontSize + "\",\"text\":\""); } } this.result.Append(renderInfo.GetText()); this.lastBaseLine = curBaseline; this.lastFontSize = curFontSize; this.lastFont = curFont; }
public void RenderText(TextRenderInfo renderInfo) { var curFont = renderInfo.GetFont().PostscriptFontName; //Check if faux bold is used if ((renderInfo.GetTextRenderMode() == (int) TextRenderMode.FillThenStrokeText)) curFont += "-Bold"; //This code assumes that if the baseline changes then we're on a newline var curBaseline = renderInfo.GetBaseline().GetStartPoint(); var topRight = renderInfo.GetAscentLine().GetEndPoint(); var rect = new Rectangle(curBaseline[Vector.I1], curBaseline[Vector.I2], topRight[Vector.I1], topRight[Vector.I2]); var curFontSize = rect.Height; //See if something has changed, either the baseline, the font or the font size if ((lastBaseLine == null) || (curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) || (curFontSize != lastFontSize) || (curFont != lastFont)) { //if we've put down at least one span tag close it if ((lastBaseLine != null)) result.AppendLine("</span>"); //If the baseline has changed then insert a line break if ((lastBaseLine != null) && curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) result.AppendLine("<br />"); //Create an HTML tag with appropriate styles result.AppendFormat("<span style=\"font-family:{0};font-size:{1}; position: relative; top: {2}; left: {3};\">", curFont, curFontSize, 850 - rect.Top, rect.Left); } //Append the current text result.Append(renderInfo.GetText()); //Set currently used properties lastBaseLine = curBaseline; lastFontSize = curFontSize; lastFont = curFont; }
//Automatically called for each chunk of text in the PDF public override void RenderText(TextRenderInfo renderInfo) { base.RenderText(renderInfo); //Get the bounding box for the chunk of text var bottomLeft = renderInfo.GetDescentLine().GetStartPoint(); var topRight = renderInfo.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, renderInfo.GetText())); }
public virtual void RenderText(TextRenderInfo renderInfo) { Vector startPoint = renderInfo.GetDescentLine().GetStartPoint(); Vector endPoint = renderInfo.GetAscentLine().GetEndPoint(); float x1 = Math.Min(startPoint[0], endPoint[0]); float x2 = Math.Max(startPoint[0], endPoint[0]); float y1 = Math.Min(startPoint[1], endPoint[1]); float y2 = Math.Max(startPoint[1], endPoint[1]); rectangles.Add(new Rectangle(x1, y1, x2, y2)); }
public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) {//.Remove(0,7) string curFont = renderInfo.GetFont().PostscriptFontName; string Bold = "NOTBOLD"; string Color; float URX = 0f; float URY = 0f; float LLX = 0f; float LLY = 0f; //Check if faux bold is used if ((renderInfo.GetTextRenderMode() == (int)TextRenderMode.FillThenStrokeText)) { Bold = "BOLD"; } Color = "Not Available;"; try { Color = renderInfo.GetFillColor().ToString(); } catch (Exception) { } //This code assumes that if the baseline changes then we're on a newline Vector curBaseline = renderInfo.GetBaseline().GetStartPoint(); Vector topRight = renderInfo.GetAscentLine().GetEndPoint(); iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(curBaseline[Vector.I1], curBaseline[Vector.I2], topRight[Vector.I1], topRight[Vector.I2]); Single curFontSize = rect.Height; //See if something has changed, either the baseline, the font or the font size if ((this.lastBaseLine == null) || (curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) || (curFontSize != lastFontSize) || (curFont != lastFont)) { URX = topRight[Vector.I1]; URY = topRight[Vector.I2]; LLX = curBaseline[Vector.I1]; LLY = curBaseline[Vector.I2]; //if we've put down at least one span tag close it if ((this.lastBaseLine != null)) { this.result.AppendLine("</span>"); } //If the baseline has changed then insert a line break if ((this.lastBaseLine != null) && curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) { this.result.AppendLine("<br />"); } //Create an HTML tag with appropriate styles this.result.AppendFormat("<span style=\"font-family:{0};font-size:{1};z={2};color={3};coordinates:{4},{5},{6},{7};\">", curFont, curFontSize, Bold, Color, URX, URY, LLX, LLY); } //Append the current text this.result.Append(renderInfo.GetText()); //Set currently used properties this.lastBaseLine = curBaseline; this.lastFontSize = curFontSize; this.lastFont = curFont; }
/// <summary> /// /// </summary> /// <param name="renderInfo"></param> public override void RenderText(TextRenderInfo renderInfo) { iTextSharp.text.pdf.parser.LineSegment segment = renderInfo.GetBaseline(); TextChunkEx location = new TextChunkEx(renderInfo.GetText(), segment.GetStartPoint(), segment.GetEndPoint(), renderInfo.GetSingleSpaceWidth(), renderInfo.GetAscentLine(), renderInfo.GetDescentLine()); m_locationResult.Add(location); }
/// <summary> /// /// </summary> /// <param name="renderInfo"></param> public override void RenderText(TextRenderInfo renderInfo) { LineSegment segment = renderInfo.GetBaseline(); string x = renderInfo.GetText(); TextChunk location = new TextChunk(renderInfo.GetText(), segment.GetStartPoint(), segment.GetEndPoint(), renderInfo.GetSingleSpaceWidth(), renderInfo.GetAscentLine(), renderInfo.GetDescentLine()); m_locationResult.Add(location); }
public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) { string curFont = renderInfo.GetFont().PostscriptFontName; string curColor = ""; try { curColor = renderInfo.GetFillColor().ToString(); } catch (Exception) { } curColor = curColor.Replace("Color value[", "").Replace("]", ""); //Console.WriteLine(curColor); //string curColor = renderInfo.GetStrokeColor().RGB.ToString(); //Check if faux bold is used if ((renderInfo.GetTextRenderMode() == (int)TextRenderMode.FillThenStrokeText)) { curFont += "-Bold"; } //This code assumes that if the baseline changes then we're on a newline Vector curBaseline = renderInfo.GetBaseline().GetStartPoint(); Vector topRight = renderInfo.GetAscentLine().GetEndPoint(); iTextSharp.text.Rectangle rect = new iTextSharp.text.Rectangle(curBaseline[Vector.I1], curBaseline[Vector.I2], topRight[Vector.I1], topRight[Vector.I2]); Single curFontSize = rect.Height; if (_doFootnoteCheck == true) { string text = renderInfo.GetText(); //cislo < 3.92M && cislo > 3.8M //cislo == 3.9104M || cislo == 3.910416M if (Decimal.TryParse(curFontSize.ToString(), out currentFontSize) && (currentFontSize == 3.890762M)) { string s = " "; if (text == "1," || text == "2," || text == "3," || text == "4," || text == "5," || text == "6," || text == "7," || text == "1" || text == "2" || text == "3" || text == "4" || text == "5" || text == "6" || text == "7") { //Console.WriteLine(text); if (_prevDoubleText.Length > 1) { s = _prevDoubleText.Substring(0, 1); } if (_prevDoubleText.Length == 2 && s == text && topRight[1] == _prevTopRight) { _badFootnoteFound = true; } _prevDoubleText = text; _prevTopRight = topRight[1]; } } //if (Decimal.TryParse(curFontSize.ToString(), out cislo) && (cislo > 3.5M || cislo < 4M) && !string.IsNullOrWhiteSpace(text) && Int32.TryParse(text, out icislo)) if (Decimal.TryParse(curFontSize.ToString(), out currentFontSize) && (currentFontSize == 3.9104M || currentFontSize == 3.910416M || currentFontSize == 3.910412M || currentFontSize == 3.890762M) && !string.IsNullOrWhiteSpace(text) && Int32.TryParse(text, out currentFootnoteValue)) { if (topRight[1] > 0 && topRight[1] < 700) { //Console.WriteLine(pageCounter); /* * Console.WriteLine("------------------------------------------"); * Console.WriteLine(curFontSize); * Console.WriteLine("page:" + pageCounter); * Console.WriteLine("txt: " + text); * Console.WriteLine("prv: " + prev_icislo); * Console.WriteLine("trgh: " + topRight[1]); * Console.WriteLine("------------------------------------------"); */ if (!dictionary.ContainsKey(currentFootnoteValue)) { dictionary.Add(currentFootnoteValue, (float)topRight[1]); dr = dt.NewRow(); dr["Number"] = currentFootnoteValue; dr["Position"] = (float)topRight[1]; dr["Page"] = (int)pageCounter; dt.Rows.Add(dr); } else { if (replaceCounter < 10) { dictionary[currentFootnoteValue] = (float)topRight[1]; for (int i = 0; i < dt.Rows.Count; i++) { if (dt.Rows[i][0].ToString() == currentFootnoteValue.ToString().Trim()) { dt.Rows[i][1] = (float)topRight[1]; dt.Rows[i][2] = pageCounter; } } dr = dt.NewRow(); dr["Number"] = currentFootnoteValue; dr["Position"] = (float)topRight[1]; dr["Page"] = (int)pageCounter; dt.Rows.Add(dr); replaceCounter++; } } } _prevInumber = currentFootnoteValue; } } if (curColor == "FFFF0000") { //Console.WriteLine("Red detected!"); //Console.WriteLine(curColor); string s = renderInfo.GetText(); if (string.IsNullOrWhiteSpace(s)) { } else { //Console.WriteLine(s); redWords.Add(s); _redWords++; } } //See if something has changed, either the baseline, the font or the font size if ((this.lastBaseLine == null) || (curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) || (curFontSize != lastFontSize) || (curFont != lastFont)) { //if we've put down at least one span tag close it if ((this.lastBaseLine != null)) { this.result.AppendLine("</span>"); } //If the baseline has changed then insert a line break if ((this.lastBaseLine != null) && curBaseline[Vector.I2] != lastBaseLine[Vector.I2]) { this.result.AppendLine("<br />"); } //Create an HTML tag with appropriate styles this.result.AppendFormat("<span style=\"font-family:{0};font-size:{1}\font-color:{2}>", curFont, curFontSize, curColor); } //Append the current text this.result.Append(renderInfo.GetText()); //Set currently used properties this.lastBaseLine = curBaseline; this.lastFontSize = curFontSize; this.lastFont = curFont; }
//Automatically called for each chunk of text in the PDF public override void RenderText(TextRenderInfo renderInfo) { base.RenderText(renderInfo); var startPosition = System.Globalization.CultureInfo.CurrentCulture.CompareInfo.IndexOf(renderInfo.GetText(), this.TextToSearchFor, this.CompareOptions); var texto = renderInfo.GetText(); var x = renderInfo.GetText().Contains(TextToSearchFor); //Get the bounding box for the chunk of text /*if (x) { var bottomLeft = renderInfo.GetDescentLine().GetStartPoint(); var topRight = renderInfo.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] ); this.myPoints.Add(new RectAndText(rect, renderInfo.GetText())); }*/ //This code assumes that if the baseline changes then we're on a newline Vector curBaseline = renderInfo.GetBaseline().GetStartPoint(); Vector curBaseline2 = renderInfo.GetAscentLine().GetEndPoint(); //See if the baseline has changed if ((this.lastBaseLine != null) && (curBaseline[Vector.I2] != lastBaseLine[Vector.I2])) { //See if we have text and not just whitespace if ((!String.IsNullOrWhiteSpace(this.result.ToString()))) { //Mark the previous line as done by adding it to our buffers this.baselines.Add(this.lastBaseLine[Vector.I2]); this.strings.Add(this.result.ToString()); if (this.result.ToString().ToLower().Contains(TextToSearchFor.ToLower())) { //Create a rectangle from it var rect = new iTextSharp.text.Rectangle(startPositionWord[Vector.I1], startPositionWord[Vector.I2], lastAscentLine[Vector.I1], lastAscentLine[Vector.I2]); this.myPoints.Add(new RectAndText(rect, this.result.ToString())); startPositionWord = null; endPositionWord = null; } } //Reset our "line" buffer this.result.Clear(); wordended = true; } //Append the current text to our line buffer //if (!string.IsNullOrWhiteSpace(renderInfo.GetText())) this.result.Append(renderInfo.GetText()); if (!string.IsNullOrWhiteSpace(result.ToString()) && wordended) { wordended = false; startPositionWord = renderInfo.GetDescentLine().GetStartPoint(); } //Reset the last used line this.lastBaseLine = curBaseline; this.lastAscentLine = curBaseline2; }