2013-01-10 17 views
24

Sto provando a convertire il contenuto di un file archiviato in una colonna sql in un pdf.array di byte in pdf

Uso il seguente pezzo di codice:

byte[] bytes; 
BinaryFormatter bf = new BinaryFormatter(); 
MemoryStream ms = new MemoryStream(); 
bf.Serialize(ms, fileContent); 
bytes = ms.ToArray(); 
System.IO.File.WriteAllBytes("hello.pdf", bytes); 

PDF generato è danneggiato, nel senso che quando apro il pdf in notepad ++, vedo qualche intestazione spazzatura (che è lo stesso indipendentemente dalla fileContent) . L'intestazione del junk è NUL SOH NUL NUL NUL ....

+4

'BinaryFormatter' ha * assolutamente nulla * da fare con pdf. Usare i due in una singola frase è un grosso errore. Cosa è 'fileContent' qui? (ad esempio, qual è il * tipo * di quello?) –

+0

La colonna SQL contiene un file PDF serializzato o potrebbe contenere dati binari? –

+0

Uso il metodo simile, ma PDF non si apre nel lettore Adobe nella versione Mobile. – Mukund

risposta

43

Per questo non si dovrebbe usare BinaryFormatter - questo è per serializzare i tipi .Net in un file binario in modo che possano essere letti nuovamente come tipi .Net.

Se è memorizzato nel database, si spera, come varbinary - allora tutto quello che dovete fare è ottenere l'array di byte da quella (che dipenderà dalla vostra tecnologia di accesso ai dati - EF e LINQ to SQL, per esempio, crea una mappatura che rende banale ottenere un array di byte) e poi scriverlo nel file come fai nell'ultima riga di codice.

Con un po 'di fortuna, spero che fileContent sia l'array di byte? In tal caso puoi semplicemente fare

System.IO.File.WriteAllBytes("hello.pdf", fileContent); 
+0

Grazie. Avevi ragione. Avevo definito fileContent come ds.Tables [0] .Rows [0] ["fileData"]. Quindi tutto ciò che ho fatto è byte [] b = (byte []) fileContent. Non c'era bisogno di BinaryFormatter. Grazie Mark e Tim! –

+0

cercavo la soluzione, ma l'ho trovata qui, posso sapere il tipo di variabile "fileContent" grazie in anticipo. – sidhewsar

+0

Ciao @sidhewsar - È 'byte []' –