2017-07-07 40 views
1

Asp.net C#でiTextSharpを使用して文字列を検索しようとしています。しかし、これまでのところGoogleで利用できるヘルプでは、私はそれを行うことができません。これは現在のコードですが、チャンクでテキストチャンクを読み込みますが、必要なテキストは見つかりませんでした。助けを必要と感謝ASP.Netを使用してiTextSharpを使用してPDFファイル内の文字列と位置を検索するC#

public class RectAndText 
    { 
     public iTextSharp.text.Rectangle Rect; 
     public String Text; 
     public RectAndText(iTextSharp.text.Rectangle rect, String text) 
     { 
      this.Rect = rect; 
      this.Text = text; 
     } 
    } 

    public class MyLocationTextExtractionStrategy : LocationTextExtractionStrategy 
    { 
     public List<RectAndText> myPoints = new List<RectAndText>(); 
     public String TextToSearchFor { get; set; } 
     public System.Globalization.CompareOptions CompareOptions { get; set; } 

     public MyLocationTextExtractionStrategy(String textToSearchFor, System.Globalization.CompareOptions compareOptions = System.Globalization.CompareOptions.None) 
     { 
      this.TextToSearchFor = textToSearchFor; 
      this.CompareOptions = compareOptions; 
     } 
     public override void RenderText(TextRenderInfo renderInfo) 
     { 
      base.RenderText(renderInfo); 
      var startPosition = System.Globalization.CultureInfo.CurrentCulture.CompareInfo.IndexOf(renderInfo.GetText(), this.TextToSearchFor, this.CompareOptions); 
      if (startPosition < 0) 
      { 
       return; 
      } 
      var chars = renderInfo.GetCharacterRenderInfos().Skip(startPosition).Take(this.TextToSearchFor.Length).ToList(); 
      var firstChar = chars.First(); 
      var lastChar = chars.Last(); 

      var bottomLeft = firstChar.GetDescentLine().GetStartPoint(); 
      var topRight = lastChar.GetAscentLine().GetEndPoint(); 
      var rect = new iTextSharp.text.Rectangle(
                bottomLeft[Vector.I1], 
                bottomLeft[Vector.I2], 
                topRight[Vector.I1], 
                topRight[Vector.I2] 
                ); 

      this.myPoints.Add(new RectAndText(rect, this.TextToSearchFor)); 
     } 
    } 

コール機能

string thisDir = System.Web.Hosting.HostingEnvironment.MapPath("~/"); 
var testFile = thisDir + "example.pdf"; 
var t = new MyLocationTextExtractionStrategy("searchstring"); //need to search this searchstring 

using (var r = new PdfReader(testFile)) 
{ 
    var ex = PdfTextExtractor.GetTextFromPage(r, 1, t); 
} 

foreach (var p in t.myPoints) 
{ 
    Console.WriteLine(string.Format("Found text {0} at {1}x{2}", p.Text, p.Rect.Left, p.Rect.Bottom)); 
} 

答えて

2

は、これは簡単にRegexBasedLocationExtractionStrategyを使用して(iText7に)管理することができます。 このクラスは、正規表現を使用して作成でき、式に一致するテキストの場所をプッシュします。 iText7に切り替えることができなくても、ソースコードを見て、実装した方法を見ることができます。

+0

既存のPDFを操作するためのiText7のソースコードへのリンクを.netで教えてもらえますか?本当にありがとう –

関連する問題