2011-07-22 5 views
4

J'utilise un outil tiers pour obtenir le contenu numérisé à partir du scanner. Au clic du bouton, il exécute le code et donne le contenu sous la forme d'un FileStream. Maintenant, je dois enregistrer ce fichier FileStream dans un fichier pdf dans un dossier spécifié.Après enregistrement, j'ai besoin d'ouvrir le fichier dans le navigateur.Alors, comment puis-je enregistrer le fichier FileStream comme un fichier pdf.Veuillez m'aider.Comment enregistrer FileSteam sous forme de fichier pdf

+0

WebForms ou MVC? –

+0

J'utilise WebForms – ANP

Répondre

0

Une autre bibliothèque PDF de premier plan (que j'ai déjà utilisé dans le passé) est iTextSharp. Vous pouvez jeter un oeil à this tutorial sur la façon de convertir votre flux au format PDF ont alors l'utilisateur télécharger.

1

Si je vous comprends bien, la bibliothèque tierce partie est vous remettre un flux contenant les données du document numérisé et vous devez écrire dans un fichier? Si c'est le cas, vous devez rechercher les E/S de fichiers en C#. Voici un link et un exemple:

Stream sourceStream = scanner.GetOutput(); // whereever the source stream is 
FileStream targetStream = File.OpenWrite(filename, FileMode.Create()); 
int bytesRead = 0; 
byte[] buffer = new byte[2048]; 
while (true) { 
    bytesRead = sourceStream.Read(buffer, 0, buffer.length); 
    if (bytesRead == 0) 
     break; 
    targetStream.Write(buffer, 0, bytesRead); 
} 
sourceStream.Close(); 
targetStream.Close(); 
+0

Oui c'est l'enregistrement du fichier. Lorsque je l'ouvre, il montre un message d'erreur que Adobe Reader n'a pas pu ouvrir ce fichier. – ANP

+0

Ceci enregistre juste le flux. Mais les données réelles ne sont pas au format PDF. Vous devez utiliser une bibliothèque séparée pour _translate_ qui diffusera en PDF en utilisant des bibliothèques tierces mentionnées dans les autres réponses. –

1

Vous pouvez écrire le flux directement dans la mémoire tampon de sortie de la réponse.

Donc, si vous êtes au point dans votre code où vous avez la filestream du scanner. Il suffit de lire les octets du scanner filestream et les écrire au Response.OutputStream

Réglez le contentType à application/pdf

Assurez-vous de retourner rien d'autre. Le navigateur des utilisateurs fera tout ce qu'il est configuré pour faire maintenant, soit enregistrer sur le disque ou afficher dans le navigateur. Vous pouvez également enregistrer sur le disque sur le serveur à ce stade également au cas où vous vouliez une sauvegarde.

Je présume que votre flux de fichiers est déjà un pdf, sinon vous aurez besoin d'utiliser quelque chose comme iTextSharp pour créer le pdf.

Édition Voici un code approximatif pour le faire. Vous voudrez le ranger, comme ajouter un recouvrement d'exception pour vous assurer que le flux de fichier est nettoyé correctement.

public void SaveToOutput(Stream dataStream) 
    { 
     dataStream.Seek(0, SeekOrigin.Begin); 
     FileStream fileout = File.Create("somepath/file.pdf"); 

     const int chunk = 512; 
     byte[] buffer = new byte[512]; 

     int bytesread = dataStream.Read(buffer,0,chunk); 

     while (bytesread == chunk) 
     { 
      HttpContext.Current.Response.OutputStream.Write(buffer, 0, chunk); 
      fileout.Write(buffer, 0, chunk); 
      bytesread = dataStream.Read(buffer, 0, chunk); 
     } 

     HttpContext.Current.Response.OutputStream.Write(buffer, 0, bytesread); 
     fileout.Write(buffer, 0, bytesread); 
     fileout.Close(); 

     HttpContext.Current.Response.ContentType = "application/pdf"; 
    } 

Simon

+0

Oui le flux de fichier est déjà un pdf. Pouvez-vous expliquer votre solution un peu plus. Je suppose que vous me donnez la bonne solution, mais je ne suis pas capable de l'obtenir correctement. – ANP

+0

Oui, je dois enregistrer le contenu sur le disque. Alors comment le faites vous? – ANP

Questions connexes