2012-09-04 76 views
0

這是繼如何使用iTextSharp從PDF中提取'標記爲新版本'的文本?

我們計算出如何使用下面的代碼提取標記爲新版的文本。

但是,除了標記爲文字處理的文本之外,還會捕獲其他前導和尾隨字符。

例如,如果某個句子在源PDF文檔中標記爲要進行編輯,則下面的代碼還會捕獲前一個句子的最後幾個字符和下一個句子的前幾個字符。

是否有人能夠在下面的代碼中看到問題?

for (int i = 1; i <= rdr.NumberOfPages; i++) 
       { 
        // Get pages and corresponding annotations 

        PdfDictionary dict = rdr.GetPageN(i); 
        PdfArray annots = dict.GetAsArray(PdfName.ANNOTS); 

        foreach (var annItem in annots.ArrayList) 
        { 
         PdfDictionary d = PdfReader.GetPdfObject(annItem) as PdfDictionary; 
         PdfName typ = d.GetAsName(PdfName.SUBTYPE); 
         if (typ.ToString().StartsWith("/Redact")) 
         { 
          sb = new StringBuilder(); 
          PdfObject o1 = d.Get(PdfName.QUADPOINTS); 
          PdfArray arr2 = o1 as PdfArray; 
          int numLines = arr2.ArrayList.Count/8; 
          for (int k = 0; k < numLines; k++) 
          { 
           llx = float.Parse(arr2[(0 + k * 8)].ToString()); 
           lly = float.Parse(arr2[(1 + k * 8)].ToString()); 
           urx = float.Parse(arr2[(6 + k * 8)].ToString()); 
           ury = float.Parse(arr2[(7 + k * 8)].ToString()); 

           Rectangle rect = new Rectangle(llx, lly, urx, ury, 1); 

           List<RenderFilter> filters = new List<RenderFilter>(); 
           filters.Add(new RegionTextRenderFilter(rect)); 
           strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), 
            filters.ToArray<RenderFilter>()); 
           // We get the text but get extra leading/trailing chars that are not in redaction. 
           sb.Append(PdfTextExtractor.GetTextFromPage(rdr, i, strategy)); 
          } 
          Console.WriteLine("Page: " + i.ToString()); 
          Console.WriteLine(sb.ToString() + Environment.NewLine); 
          sb.Clear(); 

         } 
        } 
       } 

回答

相關問題