2012-12-12 34 views
5

kullanılarak bir Doc nesnesine okunamıyor. Bir .docx dosyası bayt dizisi olarak alınıyor. Daha sonra, Doc parametresini veri parametresi olarak belirtilen bayt dizisi ile read() işlevini çağırmaya çalışıyorum ancak tanınmayan bir dosya uzantısı hatası alıyorum.Bir bayt dizisi (.docx dosyasından oluşturuldu) ABCPDF

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

bu nokta ben çıkışı bir .docx dosyası olarak bayt dizisi de, benim program düzgün bana açmak veya kaydetmek sağlayacak IF:

ben kod aşağıdaki (C#) ile bayt dizisi almak dosya. Bu nedenle bayt dizisinin doğru şekilde alındığına inanıyorum. Ben şöyle bir Doc içine bayt dizisi okumak için çalışırsanız, ancak

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

:

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

Programım dışarı hata olacaktır Burada bir .docx dosyasını çıkışı ile ne demek bir örnektir Bu kodun son satırında, aşağıdakileri atıyor: “FileExtension '', ReadModuleType.MSOffice için geçersizdi.”

Doc.Read() işlevi, dosyanın bulunacağı boş bir dize buluyor gibi görünüyor. yazın. Ayrıca, bu makinede Office 2007 yüklü var.

+0

Aynı sorunun olması. Görünüşe göre doc.Read() yöntemi, doğrudan bir dosyadan okunduğunda XReadOptions nesnesini doğru şekilde destekliyormuş gibi görünür (Bu durumda, geçerli bir uzantı için verilen dosya adı parametresini kontrol eder). Uygulamada oldukça sakıncalı bir kusur. – HaukurHaf

cevap

6

sen (siz olmalı) Eğer ederek sorunu çözebilir dosya bayt dosya uzantısını biliyorsanız:

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

Bu yaklaşım benim için çalıştı. Doğru dosya uzantısı sağladığınızda XReadOptions nesnesinin ReadModule özelliğini ayarlamanız gerekmeyecektir. ToUpper() zorunlu değildir.

+0

Eccellent. ABCPDF sürüm 8 kullanıyorum ve XReadOptions nesnesinin 'FileExtension' özelliği ayarını yapıyorum (ABCPDF'nin ReadModule özelliğiyle ilgili Belgeleme tarafından tamamen yanıldım ve "xr.ReadModule = ReadModuleType.MSOffice" hiç çalışmadı). – Lin