2017-07-06 3 views
0

Je suis en train d'extraire le texte à partir du pdf (lien de fixation) avec le code (lib itext7) ci-dessous:Essaye Ouvrir un PDF, je reçois l'erreur « Impossible de trouver des données d'image ou d'assurance-emploi » avec lib iTextSharp 7

 public static PageDescribe GetTextFromPage(PdfDocument fullDoc, int pageNum) 
    { 
     if (pageNum < 1) 
      return null; 
     else 
     { 
      PdfPage page = fullDoc.GetPage(pageNum); 
      if (page == null) 
       return null;             
      else 
      { 


       LocatedTextStrategy lStrat = new LocatedTextStrategy(); 
       string s = PdfTextExtractor.GetTextFromPage(page, lStrat,); 

       DateTime _startPoint = DateTime.Now; 
       lStrat.Points.Defragmentation(); 

       PageDescribe _res = new PageDescribe(pageNum, lStrat.Points); 
       return _res;             
      } 
     } 
    } 
} 

mais je reçois l'erreur ne peut pas trouver des données d'image ou d'assurance-emploi:

See Image Error

Si je supprime manuellement le logo initial du pdf cette erreur ne se produit pas. Mais je ne peux pas changer le système source qui fournit ces fichiers.

Sample of pdf here

Quelqu'un a des suggestions?

+0

Pourriez-vous montrer une partie/le code pertinent de 'LocatedTextStrategy'? –

+0

Il semble également 'PdfTextExtractor.GetTextFromPage();' prend 3 arguments, [comme ici] (https://stackoverflow.com/a/5003230/6741868). –

+0

Salut @Keyur, j'utilise itext7, il y a 3 surcharges. La première surcharge ne reçoit que Pdfpage, la deuxième surcharge reçoit PdfPage et ITextExtractionStrategy (mon code). La surcharge Thrid reçoit PdfPage, ITextExtractionStrategy et IDictionary . Le PdfReader, comme votre lien, n'est pas nécessaire –

Répondre

0

J'ai téléchargé votre fichier PDF et essayé avec le code suivant, cela fonctionne pour moi (j'ai essayé de la page 1):

public string GetTextFromPage(string path, int pagenum) 
{ 
    PdfReader reader = new PdfReader(path); 
    string text = PdfTextExtractor.GetTextFromPage(reader, pagenum, new LocationTextExtractionStrategy()); 
    reader.Close(); 
    return text; 
} 

Vous pouvez modifier la méthode ci-dessus pour retourner votre classe PageDescribe.

+0

Merci @KeyurPATEL. Quelle version d'itext avez-vous utilisée? J'utilise la version itext7 (nuget) et il n'y a pas de paramètre pdfreader dans PdfTextExtractor.GetTextFromPage –

+0

N'oubliez pas d'ajouter 'using iTextSharp.text; en utilisant iTextSharp.text.pdf; en utilisant iTextSharp.text.pdf.parser; ', puisque j'utilise aussi iTextSharp 7, téléchargé spécialement avec Nuget pour tester le code :) –

+0

iTextSharp est une autre lib, j'utilise itext7. L'espace de noms utilise iText.Kernel.Pdf; en utilisant iText.Kernel.Pdf.Canvas.Parser; en utilisant iText.Kernel.Pdf.Canvas.Parser.Listener; Avez-vous raison @Keyur PATEL, avec le travail iTextSharp, mais itext7 non. c'est fou non? lol –