/// Captures text using a simplified algorithm for inserting hard returns and spaces /// @param renderInfo render info public virtual void RenderText(TextRenderInfo renderInfo) { _blocks.Add(new TextBlock { Text = renderInfo.GetText(), TopLeft = renderInfo.GetBaseline().GetStartPoint(), BottomRight = renderInfo.GetBaseline().GetEndPoint() }); }
/** * Captures text using a simplified algorithm for inserting hard returns and spaces * @param renderInfo render info */ public virtual void RenderText(TextRenderInfo renderInfo) { bool firstRender = result.Length == 0; bool hardReturn = false; LineSegment segment = renderInfo.GetBaseline(); Vector start = segment.GetStartPoint(); Vector end = segment.GetEndPoint(); if (!firstRender) { Vector x0 = start; Vector x1 = lastStart; Vector x2 = lastEnd; // see http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html float dist = (x2.Subtract(x1)).Cross((x1.Subtract(x0))).LengthSquared / x2.Subtract(x1).LengthSquared; float sameLineThreshold = 1f; // we should probably base this on the current font metrics, but 1 pt seems to be sufficient for the time being if (dist > sameLineThreshold) { hardReturn = true; } // Note: Technically, we should check both the start and end positions, in case the angle of the text changed without any displacement // but this sort of thing probably doesn't happen much in reality, so we'll leave it alone for now } if (hardReturn) { //System.out.Println("<< Hard Return >>"); AppendTextChunk('\n'); } else if (!firstRender) { if (result[result.Length - 1] != ' ' && renderInfo.GetText().Length > 0 && renderInfo.GetText()[0] != ' ') // we only insert a blank space if the trailing character of the previous string wasn't a space, and the leading character of the current string isn't a space { float spacing = lastEnd.Subtract(start).Length; if (spacing > renderInfo.GetSingleSpaceWidth() / 2f) { AppendTextChunk(' '); //System.out.Println("Inserting implied space before '" + renderInfo.GetText() + "'"); } } } else { //System.out.Println("Displaying first string of content '" + text + "' :: x1 = " + x1); } //System.out.Println("[" + renderInfo.GetStartPoint() + "]->[" + renderInfo.GetEndPoint() + "] " + renderInfo.GetText()); AppendTextChunk(renderInfo.GetText()); lastStart = start; lastEnd = end; }
//This is called whenever a run of text is encountered public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) { //This code assumes that if the baseline changes then we're on a newline Vector curBaseline = renderInfo.GetBaseline().GetStartPoint(); //See if the baseline has changed if ((this.lastBaseLine != null && this.lastEndLine != null) && ((Math.Abs(curBaseline[Vector.I2] - lastBaseLine[Vector.I2]) > 1) || Math.Abs(lastEndLine[Vector.I1] - curBaseline[Vector.I1]) > 10)) { //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()); var coor = new Tuple <float, float, string>(this.lastBaseLine[Vector.I1], this.lastBaseLine[Vector.I2], this.result.ToString()); coordinates.Add(coor); } //Reset our "line" buffer this.result.Clear(); } //Append the current text to our line buffer this.result.Append(renderInfo.GetText()); //Reset the last used line this.lastBaseLine = curBaseline; this.lastEndLine = renderInfo.GetBaseline().GetEndPoint(); }
//This is called whenever a run of text is encountered public void RenderText(iTextSharp.text.pdf.parser.TextRenderInfo renderInfo) { //This code assumes that if the baseline changes then we're on a newline Vector curBaseline = renderInfo.GetBaseline().GetStartPoint(); //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()); } //Reset our "line" buffer this._result.Clear(); } //Append the current text to our line buffer this._result.Append(renderInfo.GetText()); //Reset the last used line this._lastBaseLine = curBaseline; }
/** * * @see com.itextpdf.text.pdf.parser.RenderListener#renderText(com.itextpdf.text.pdf.parser.TextRenderInfo) */ public void RenderText(TextRenderInfo renderInfo) { LineSegment segment = renderInfo.GetBaseline(); TextChunk location = new TextChunk(renderInfo.GetText(), segment.GetStartPoint(), segment.GetEndPoint(), renderInfo.GetSingleSpaceWidth()); locationalResult.Add(location); }
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; }
/// <summary> /// <see cref="IRenderListener.RenderText"/> /// </summary> public void RenderText(TextRenderInfo renderInfo) { output.WriteLine(" <"); Vector start = renderInfo.GetBaseline().GetStartPoint(); output.WriteLine(String.Format(" x: {0} y: {1} length: {2} \n Text: {3}", start[Vector.I1], start[Vector.I2], renderInfo.GetBaseline().GetLength(), renderInfo.GetText())); output.WriteLine(" >"); }
public void RenderText(TextRenderInfo renderInfo) { bool hardReturn = false; LineSegment segment = renderInfo.GetBaseline(); Vector start = segment.GetStartPoint(); Vector end = segment.GetEndPoint(); if (lastStart != null && lastEnd != null) { Vector x0 = start; Vector x1 = lastStart; Vector x2 = lastEnd; // see http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html float dist = (x2.Subtract(x1)).Cross((x1.Subtract(x0))).LengthSquared / x2.Subtract(x1).LengthSquared; float sameLineThreshold = 1f; // we should probably base this on the current font metrics, but 1 pt seems to be sufficient for the time being if (dist > sameLineThreshold) hardReturn = true; // Note: Technically, we should check both the start and end positions, in case the angle of the text changed without any displacement // but this sort of thing probably doesn't happen much in reality, so we'll leave it alone for now } if (hardReturn) { //System.out.Println("<< Hard Return >>"); result.Append('\n'); } else if (lastStart != null && lastEnd != null) { if (result[result.Length - 1] != ' ' && renderInfo.GetText()[0] != ' ') { // we only insert a blank space if the trailing character of the previous string wasn't a space, and the leading character of the current string isn't a space float spacing = lastEnd.Subtract(start).Length; if (spacing > renderInfo.GetSingleSpaceWidth() / 2f) { result.Append('\t'); //System.out.Println("Inserting implied space before '" + renderInfo.GetText() + "'"); } } } else { //System.out.Println("Displaying first string of content '" + text + "' :: x1 = " + x1); } //System.out.Println("[" + renderInfo.GetStartPoint() + "]->[" + renderInfo.GetEndPoint() + "] " + renderInfo.GetText()); result.Append(renderInfo.GetText()); lastStart = start; lastEnd = end; }
/** * * @see com.itextpdf.text.pdf.parser.RenderListener#renderText(com.itextpdf.text.pdf.parser.TextRenderInfo) */ public virtual void RenderText(TextRenderInfo renderInfo) { LineSegment segment = renderInfo.GetBaseline(); if (renderInfo.GetRise() != 0) { // remove the rise from the baseline - we do this because the text from a super/subscript render operations should probably be considered as part of the baseline of the text the super/sub is relative to Matrix riseOffsetTransform = new Matrix(0, -renderInfo.GetRise()); segment = segment.TransformBy(riseOffsetTransform); } TextChunk location = new TextChunk(renderInfo.GetText(), segment.GetStartPoint(), segment.GetEndPoint(), renderInfo.GetSingleSpaceWidth()); locationalResult.Add(location); }
/** * * @see com.itextpdf.text.pdf.parser.RenderListener#renderText(com.itextpdf.text.pdf.parser.TextRenderInfo) */ public virtual void RenderText(TextRenderInfo renderInfo) { LineSegment segment = renderInfo.GetBaseline(); if (renderInfo.GetRise() != 0) { // remove the rise from the baseline - we do this because the text from a super/subscript render operations should probably be considered as part of the baseline of the text the super/sub is relative to Matrix riseOffsetTransform = new Matrix(0, -renderInfo.GetRise()); segment = segment.TransformBy(riseOffsetTransform); } TextChunk tc = new TextChunk(renderInfo.GetText(), tclStrat.CreateLocation(renderInfo, segment)); locationalResult.Add(tc); }
//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; } if (renderInfo.PdfString.ToString() != this.TextToSearchFor) { 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)); }
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 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; }
public void RenderText(TextRenderInfo renderInfo) { buffer.Append(renderInfo.GetText()); buffer.Append("\n"); }
virtual public void RenderText(TextRenderInfo renderInfo) { textChunks.Add(renderInfo.GetText()); }
public void RenderText(TextRenderInfo renderInfo) { bool firstRender = results.Count == 0; LineSegment segment = renderInfo.GetBaseline(); Vector start = segment.GetStartPoint(); Vector end = segment.GetEndPoint(); int currentLineKey = (int)start[1]; if (!firstRender) { Vector x0 = start; Vector x1 = lastStart; Vector x2 = lastEnd; float dist = (x2.Subtract(x1)).Cross((x1.Subtract(x0))).LengthSquared / x2.Subtract(x1).LengthSquared; float sameLineThreshold = 1f; if (dist <= sameLineThreshold) { currentLineKey = (int)lastStart[1]; } } currentLineKey = currentLineKey * -1; if (!results.ContainsKey(currentLineKey)) { results.Add(currentLineKey, new StringBuilder()); } if (!firstRender && results[currentLineKey].Length != 0 && !results[currentLineKey].ToString().EndsWith(" ") && renderInfo.GetText().Length > 0 && !renderInfo.GetText().StartsWith(" ")) { float spacing = lastEnd.Subtract(start).Length; if (spacing > renderInfo.GetSingleSpaceWidth() / 2f) { results[currentLineKey].Append(" "); } } results[currentLineKey].Append(renderInfo.GetText()); lastStart = start; lastEnd = end; }
/// <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); }
/** * @see com.itextpdf.text.pdf.parser.RenderListener#renderText( * com.itextpdf.text.pdf.parser.TextRenderInfo) */ public void RenderText(TextRenderInfo renderInfo) { Text.Append("<"); Text.Append(renderInfo.GetText()); Text.Append(">"); }
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); //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())); }
/// <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); }
public void RenderText(TextRenderInfo renderInfo) { output.Write("<"); output.Write(renderInfo.GetText()); output.Write(">"); }
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; }
public void RenderText(TextRenderInfo renderInfo) { _builder.Append(renderInfo.GetText() + " "); // New page detected at copywrite statement. if (renderInfo.GetText().Equals("Reserved.")) { pages.Add(_builder.ToString()); _builder.Clear(); } }
//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; }