2016-07-15 20 views
1

Ich arbeite an Dokumentenmanagement-Projekt und ich möchte Text aus PDF extrahieren. Wie kann ich das erreichen? Ich verwende Itextsharp, um pdf auf lokalem System zu extrahierenExtrahieren Sie die PDF-Datei auf FTP-Server mit itextsharp

Dieses ist eine Funktion, die ich für diesen Zweck verwende. Path ist ein FTP-Server-Pfad

public static string ExtractTextFromPdf(string path) 
    { 
     using (PdfReader reader = new PdfReader(path)) 
     { 
      StringBuilder text = new StringBuilder(); 

      for (int i = 1; i <= reader.NumberOfPages; i++) 
      { 
       text.Append(PdfTextExtractor.GetTextFromPage(reader, i)); 
      } 

      return text.ToString(); 
     } 
    } 

Es löst eine Ausnahme

'ftp:\\###\index\500199.pdf not found as file or resource.' 

[### ist mein ftp server]

+0

Bitte klären Sie Ihr spezifisches Problem. –

+0

Willst du Text von pdf auf ftp extrahieren. Problem ist, wenn ich PdfReaderleser schreibe = neuer PdfReader (Pfad) er thowsausnahme "Datei nicht gefunden als Datei oder Betriebsmittel" – Munavvar

+0

Setzen Sie zusätzliche Informationen in die Frage. –

Antwort

2

PdfReader hat eine Reihe von Konstruktorüberladungen aber die meisten von ihnen verlassen sich auf RandomAccessSourceFactory zu konvertieren, was auch immer in ein Stream Format übergeben wird. Wenn Sie eine string darin übergeben, ist checked, wenn es eine Datei auf der Festplatte ist, und wenn nicht, wird es überprüft, ob es in eine Uri als eine file:/, http:// oder https:// Verbindung umgewandelt werden kann. Dies ist Ihr erster Fehlerpunkt, da keine dieser Überprüfungen das FTP-Protokoll verarbeitet und Sie letztendlich bei local resource loader landen, was für Sie nicht funktioniert.

Sie könnte bereites string auf eine explizite Uri Umwandlung aber das wird tatsächlich nicht funktioniert, entweder:

//This won't work 
new PdfReader(new Uri(path)) 

Der Grund, dass dies funktionieren wird nicht der Fall, weil iText tells .Net to use CredentialCache.DefaultCredentials wenn Remote-Ressourcen Laden jedoch, dass Konzept existiert in der FTP-Welt nicht.

Lange Rede, kurzer Sinn: Wenn Sie FTP verwenden, sollten Sie die Dateien selbst herunterladen. Abhängig von ihrer Größe sollten Sie sie entweder auf die Festplatte herunterladen oder ein Byte-Array herunterladen. Unten ist ein Beispiel des letzteren:

Byte[] bytes; 
if(path.StartsWith(@"ftp://")) { 
    var wc = WebRequest.Create(path); 
    using (var response = wc.GetResponse()) { 
     using (var responseStream = response.GetResponseStream()) { 
      bytes = iTextSharp.text.io.StreamUtil.InputStreamToArray(responseStream); 
     } 
    } 
} 

Sie dann entweder die lokale Datei oder den Byte-Array an das PdfReader Konstruktor übergeben können.

+0

Vielen Dank @chirs Hass .. Das eigentliche Problem ist: Ich möchte extrahiere pdf von irgendeinem anderen Server. Ich habe keine Idee, wie man das erreicht. Bitte berate mich diesbezüglich. Danke – Munavvar

+1

Der Code, den ich oben schrieb, erlaubt Ihnen, eine Datei (PDF, was auch immer) von einem anderen Server über FTP herunterzuladen (HTTP (S) funktioniert auch). Das ist der erste Schritt und hat nichts mit iText zu tun, es ist einfach nur .Net. Der zweite Schritt besteht darin, das Byte-Array aus dem ersten Schritt zu übernehmen und dieses an den 'PdfReader'-Konstruktor anstelle von' path' zu übergeben. –