2017-01-10 6 views
1

検索中に、私は、そのlocation.Forテキストを伴って含むPDFからテキストを抽出するために解析するPdfBoxの.NETを使用しています私は、次のJavaコードを見つけました:C#を使用してPDFTextStripper.writeString(String text、List <TextPosition> textPositions)メソッドをオーバーライドできません。

PDFTextStripper stripper = new PDFTextStripper() 
{ 
    @Override 
    protected void writeString(String text, List<TextPosition> textPositions) throws IOException 
    { 
     super.writeString(text, textPositions); 

     TextPosition firstProsition = textPositions.get(0); 
     TextPosition lastPosition = textPositions.get(textPositions.size() - 1); 
     writeString(String.format("[%s - %s/%s]", firstProsition.getXDirAdj(), lastPosition.getXDirAdj() + lastPosition.getWidthDirAdj(), firstProsition.getYDirAdj())); 
    } 
}; 
stripper.setSortByPosition(true); 
return stripper.getText(document); 

私は次のように.NETにそれを変換します:

class PDFTextLocationStripper : PDFTextStripper 
{ 
    public string textWithPostion = ""; 
    protected override void processTextPosition(TextPosition text) 
    { 
      textWithPostion += "String[" + text.getXDirAdj() + "," + 
      text.getYDirAdj() + " fs=" + text.getFontSize() + " xscale=" + 
      text.getXScale() + " height=" + text.getHeightDir() + " space=" + 
      text.getWidthOfSpace() + " width=" + 
      text.getWidthDirAdj() + "]" + text.getCharacter(); 
    } 

    protected override void writeString(java.lang.String text, java.util.List textPositions) 
    { 
      base.writeString(text, textPositions); 
      TextPosition firstProsition = (TextPosition)textPositions.get(0); 
      TextPosition lastPosition =(TextPosition) textPositions.get(textPositions.size() - 1); 
      writeString(String.Format("[%s - %s/%s]", firstProsition.getXDirAdj(), lastPosition.getXDirAdj() + lastPosition.getWidthDirAdj(), firstProsition.getYDirAdj())); 
    } 

} 

はしかし、私は上記のコードのコンパイルエラーを取得:

エラー1方法 'WriteStringメソッド' の過負荷は、2つの引数を取りますが

エラー2 'PDFTextLocationStripper.writeString(java.lang.Stringで、java.util.Listに)':だから、

を上書きすることが分かっていない適切な方法、私はWriteStringメソッドメソッドをオーバーライドしますどのように私は取り出すことができるように場所と一緒にテキスト?私はWriteStringメソッドmethod.Iをオーバーロードすることができませんでした、ので

答えて

0

は彼らのpositions.Hereと一緒にPDFファイルから単語を抽出するためにprocessTextPositionを使用するコードです:

class PDFTextLocationStripper : PDFTextStripper 
    { 
     public string textWithPostion = ""; 
     public Dictionary<float, Dictionary<float, PdfWord>> pdfWordsByXByY; 

     public PDFTextLocationStripper(): base() 
     { 
      try 
      { 
       textWithPostion = ""; 
       pdfWordsByXByY = new Dictionary<float, Dictionary<float, PdfWord>>(); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 

     protected override void processTextPosition(TextPosition text) 
     { 
      try 
      { 
       float textX = text.getXDirAdj(); 
       float textY = text.getYDirAdj(); 
       if (!String.IsNullOrWhiteSpace(text.getCharacter())) 
       { 
        if (pdfWordsByXByY.ContainsKey(textY)) 
        { 
         Dictionary<float, PdfWord> wordsByX = pdfWordsByXByY[textY]; 
         if (wordsByX.ContainsKey(textX)) 
         { 
          PdfWord word = wordsByX[textX]; 
          wordsByX.Remove(word.Right); 
          word.EndCharWidth = text.getWidthDirAdj(); 
          word.Height = text.getHeightDir(); 
          word.EndX = textX; 
          word.Text += text.getCharacter(); 
          if (!wordsByX.Keys.Contains(word.Right)) 
          { 
           wordsByX.Add(word.Right, word); 
          } 
         } 
         else 
         { 
          float requiredX = -1; 
          float minDiff = float.MaxValue; 
          for (int index = 0; index < wordsByX.Keys.Count; index++) 
          { 
           float key = wordsByX.Keys.ElementAt(index); 
           float diff = key - textX; 
           if (diff < 0) 
           { 
            diff = -diff; 
           } 
           if (diff < minDiff) 
           { 
            minDiff = diff; 
            requiredX = key; 
           } 
          } 
          if (requiredX > -1 && minDiff <= 1) 
          { 
           PdfWord word = wordsByX[requiredX]; 
           wordsByX.Remove(requiredX); 
           word.EndCharWidth = text.getWidthDirAdj(); 
           word.Height = text.getHeightDir(); 
           word.EndX = textX; 
           word.Text += text.getCharacter(); 
           if (!wordsByX.ContainsKey(word.Right)) 
           { 
            wordsByX.Add(word.Right, word); 
           } 
          } 
          else 
          { 
           PdfWord word = new PdfWord(); 
           word.Text = text.getCharacter(); 
           word.EndX = word.StartX = textX; 
           word.Y = textY; 
           word.EndCharWidth = word.StartCharWidth = text.getWidthDirAdj(); 
           word.Height = text.getHeightDir(); 
           if (!wordsByX.ContainsKey(word.Right)) 
           { 
            wordsByX.Add(word.Right, word); 
           } 
           pdfWordsByXByY[textY] = wordsByX; 
          } 
         } 
        } 
        else 
        { 
         Dictionary<float, PdfWord> wordsByX = new Dictionary<float, PdfWord>(); 
         PdfWord word = new PdfWord(); 
         word.Text = text.getCharacter(); 
         word.EndX = word.StartX = textX; 
         word.Y = textY; 
         word.EndCharWidth = word.StartCharWidth = text.getWidthDirAdj(); 
         word.Height = text.getHeightDir(); 
         wordsByX.Add(word.Right, word); 
         pdfWordsByXByY.Add(textY, wordsByX); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 

      } 
     } 
    } 

そして、ここではPdfWordクラスです。

class PdfWord 
    { 
     public float StartX { get; set; } 
     public float EndX { get; set; } 
     public float Y { get; set; } 
     public float StartCharWidth { get; set; } 
     public float EndCharWidth { get; set; } 
     public float Height { get; set; } 
     public string Text { get; set; } 
     public float Right { get { return EndX + EndCharWidth; } } 
    } 
関連する問題