2012-09-04 2 views
0

Ceci est une suite de this questionComment extraire du texte 'marqué pour la rédaction' d'un fichier PDF en utilisant iTextSharp?

Nous avons trouvé comment extraire le texte marqué pour la rédaction en utilisant le code ci-dessous. Cependant, d'autres caractères de début et de fin sont capturés au-delà du texte marqué pour la rédaction. Par exemple, si une phrase est marquée pour la rédaction dans le document PDF source, le code ci-dessous capture également les derniers caractères de la phrase précédente et les premiers caractères de la phrase suivante.

Quelqu'un peut-il voir un problème dans le code ci-dessous?

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(); 

         } 
        } 
       } 

Répondre

Questions connexes