from our user Pinozzy:Thanks for sharing!
I'm using the Viewer SDK (with c#) for search some text in a document. I need to localize that text and get the co-ordinates of the single results.
My approach is now this:
SearchPDFText("my string");
what I obtain is the number of the occurrences. Now I need the bound rectangles of theese occurrences.
How can I do that?
. . .
This is how I solved my problem. This method returns results from a search by Regex.Bye!----public struct FindResult { public string Text { get; set; } public RectangleF Rectangle { get; set; } public int Page { get; set; } } public override List<FindResult> SearchPattern(int pageIndex, string pattern) { var retVal = new List<FindResult>(); var dpl = Document.DPL; dpl.SetTextExtractionWordGap(1); dpl.SetTextExtractionOptions(3, 0); var regex = new Regex(pattern); for (var i = 0; i < Pages; i++) { if(pageIndex > 0 && (pageIndex - 1) != i) continue; var id = dpl.ExtractPageTextBlocks(4); dpl.SelectPage(i); for (var f = 1; f <= dpl.GetTextBlockCount(id); f++) { var text = dpl.GetTextBlockText(id, f); var match = regex.Match(text); if (!match.Success) continue; var res = new FindResult { Rectangle = new RectangleF( (float)dpl.GetTextBlockBound(id, f, 7), (float)dpl.GetTextBlockBound(id, f, 8), (float)dpl.GetTextBlockBound(id, f, 5) - (float)dpl.GetTextBlockBound(id, f, 7), (float)dpl.GetTextBlockBound(id, f, 6) - (float)dpl.GetTextBlockBound(id, f, 4) ), Page = i+1, Text = text }; retVal.Add(res); } dpl.ReleaseTextBlocks(id); } return retVal; }
------------- Cheers, Ingo
|