2012-12-12 6 views
5

nicht lesen Ich erhalte eine DOCX-Datei als Byte-Array. Ich versuche dann, die lese() - Funktion des Docs mit dem Byte-Array als Datenparameter aufzurufen, bekomme aber einen nicht erkannten Dateierweiterungsfehler.Kann ein Byte-Array (erstellt aus einer DOCX-Datei) in ein Doc-Objekt mit ABCPDF

ich rufen Sie den Byte-Array mit dem folgenden (C#) Code:

WebClient testWc = new WebClient(); 
    testWc.Credentials = CredentialCache.DefaultCredentials; 
    byte[] data = testWc.DownloadData("http://localhost/Lists/incidents/Attachments/1/Testdocnospaces.docx"); 

IF mich an dieser Stelle gibt den Byte-Array als DOCX-Datei, wird mein Programm richtig erlauben Sie mir das öffnen oder speichern Datei. Aus diesem Grund glaube ich, dass das Byte-Array korrekt abgerufen wurde. Hier ist ein Beispiel von dem, was ich damit meine eine DOCX-Datei ausgibt:

Response.ClearHeaders(); 
    Response.Clear(); 
    Response.AppendHeader("Content-Disposition", "attachment;Filename=test.docx"); 
    Response.BinaryWrite(data); 
    Response.Flush(); 
    Response.End(); 

Allerdings, wenn ich versuche, den Byte-Array in eine Doc zu lesen wie folgt:

Doc doc = new Doc(); 
    XReadOptions xr = new XReadOptions(); 
    xr.ReadModule = ReadModuleType.MSOffice; 
    doc.Read(data, xr); 

Mein Programm Fehler aus Schreiben Sie in der letzten Zeile des folgenden Codes: "FileExtension" war ungültig für ReadModuleType.MSOffice. "

Die Doc.Read() - Funktion scheint eine leere Zeichenfolge zu finden, wo es normalerweise die Datei finden würde Art. Außerdem habe ich Office 2007 auf diesem Computer installiert.

+0

Haben das exakt gleiche Problem. Mir erscheint, als ob die Methode doc.Read() das XReadOptions-Objekt nur dann richtig unterstützt, wenn es direkt aus einer Datei gelesen wird (in diesem Fall überprüft es den angegebenen filename-Parameter für eine gültige Erweiterung). Ziemlich unbequemer Fehler in der Implementierung. – HaukurHaf

Antwort

6

Wenn Sie wissen, die Dateierweiterung der Datei Bytes (die Sie sollten) Sie Ihr Problem lösen können:

Doc doc = new Doc(); 
string extension = Path.GetExtension("your file name/path").Substring(1).ToUpper(); 
XReadOptions opts = new XReadOptions(); 
opts.FileExtension = extension; 
doc.Read(fileBytes, opts); 

Dieser Ansatz für mich gearbeitet. Wenn Sie die korrekte Dateierweiterung angeben, müssen Sie die ReadModule-Eigenschaft Ihres XReadOptions-Objekts nicht festlegen. ToUpper() ist nicht obligatorisch.

+0

Hervorragend. Ich benutze ABCPDF Version 8 und die Einstellung der "FileExtension" -Eigenschaft des XReadOptions-Objekts funktioniert (Ich wurde völlig von der ABCPDF-Dokumentation um ReadModule-Eigenschaft irregeführt und die Einstellung "xr.ReadModule = ReadModuleType.MSOffice" hat nie funktioniert). – Lin