2012-12-12 10 views
5

Sto recuperando un file .docx come array di byte. Sto quindi cercando di chiamare la funzione read() di Doc con detto array di byte come parametro dei dati, ma sto ricevendo un errore di estensione di file non riconosciuto.Impossibile leggere un array di byte (creato da un file .docx) in un oggetto Doc utilizzando ABCPDF

ho recuperare l'array di byte con il seguente (C#) Codice:

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

IF a questa uscita punto ho l'array di byte come un file .docx, il mio programma sarà correttamente mi permetterà di aprire o salvare il file. Per questo motivo, credo che l'array di byte sia stato recuperato correttamente. Ecco un esempio di ciò che intendo per l'output di un file .docx:

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

Tuttavia, se provo a leggere l'array di byte in un doc in questo modo:

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

Il mio programma sarà errore fuori nell'ultima riga di detto codice, lanciando quanto segue: "FileExtension" non era valido per ReadModuleType.MSOffice. "

La funzione Doc.Read() sembra trovare una stringa vuota in cui sarebbe in genere trovare il file genere. Inoltre, Office 2007 è installato su questa macchina.

+0

Avendo lo stesso identico problema. Mi sembra che il metodo doc.Read() supporti correttamente l'oggetto XReadOptions solo se letto direttamente da un file (nel qual caso verifica il parametro filename specificato per un'estensione valida). Difetto abbastanza scomodo nell'implementazione. – HaukurHaf

risposta

6

Se si conosce l'estensione del file dei vostri byte dei file (che si dovrebbe) è possibile risolvere il problema:

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

Questo approccio ha funzionato per me. Quando fornisci l'estensione corretta del file, non avrai bisogno di impostare la proprietà ReadModule del tuo oggetto XReadOptions. ToUpper() non è obbligatorio.

+0

Eccellente. Sto usando ABCPDF versione 8 e l'impostazione della proprietà 'FileExtension' dell'oggetto XReadOptions funziona (ero totalmente fuorviato dalla documentazione di ABCPDF sulla proprietà ReadModule e l'impostazione "xr.ReadModule = ReadModuleType.MSOffice" non funzionava mai). – Lin

Problemi correlati