Flux de sortie – C# MemoryStream
Flux de sortie – C#
Lors des opérations de conversion, nous enregistrons normalement le résultat du rendu dans le fichier. Toutefois, dans certains cas, il peut être nécessaire de stocker le résultat en mémoire ou de l’envoyer vers un stockage distant. Vous pouvez facilement le faire en mettant en œuvre l’interface spécialisée ICreateStreamProvider et en l’utilisant comme paramètre d’entrée du convertisseur. Cette interface représente un rappel qui est utilisé lorsqu’un nouveau flux de sortie est requis.
Note: Elle peut être invoquée plusieurs fois lorsque plusieurs flux de sortie sont nécessaires. Le scénario dans lequel ce cas est possible est le rendu HTML vers l’ensemble des fichiers images.
Classe MemoryStreamProvider
La bibliothèque Aspose.HTML C# permet de réaliser la classe MemoryStreamProvider
en tant qu’implémentation personnalisée de l’interface
ICreateStreamProvider. La classe MemoryStreamProvider
fournit des objets C# MemoryStream comme flux de sortie pour l’écriture de données, qui peuvent être stockées en mémoire sous forme de flux.
L’utilisation d’un MemoryStream C# permet d’éviter les temps de latence généralement associés à la lecture ou à l’écriture de fichiers sur un disque. En outre, comme le contenu d’un MemoryStream reste en mémoire, l’espace physique sur le disque n’est pas utilisé.
1// How to capture output in memory using a custom stream provider
2
3class MemoryStreamProvider : ICreateStreamProvider
4{
5 // List of MemoryStream objects created during the document rendering
6 public List<MemoryStream> Streams { get; } = new List<MemoryStream>();
7
8 public Stream GetStream(string name, string extension)
9 {
10 // This method is called when only one output stream is required, for instance for XPS, PDF or TIFF formats
11 MemoryStream result = new MemoryStream();
12 Streams.Add(result);
13 return result;
14 }
15
16 public Stream GetStream(string name, string extension, int page)
17 {
18 // This method is called when the creation of multiple output streams are required. For instance, during the rendering HTML to list of image files (JPG, PNG, etc.)
19 MemoryStream result = new MemoryStream();
20 Streams.Add(result);
21 return result;
22 }
23
24 public void ReleaseStream(Stream stream)
25 {
26 // Here you can release the stream filled with data and, for instance, flush it to the hard-drive
27 }
28
29 public void Dispose()
30 {
31 // Releasing resources
32 foreach (MemoryStream stream in Streams)
33 stream.Dispose();
34 }
35}
Examinons les principaux éléments de la classe MemoryStreamProvider
:
- propriété
Streams
. Une liste d’objets MemoryStream est créée pendant le rendu du document. Ces objets stockeront les données écrites dans les flux de sortie. - Implémentation des méthodes
GetStream()
. Les méthodes GetStream() créent de nouveaux objets MemoryStream, les ajoutent à la liste des flux et les renvoient en tant que flux de sortie. - Implémentation de la méthode
ReleaseStream()
. La méthode ReleaseStream() libère un objet Stream rempli de données. Dans cette implémentation, la méthode est vide. Cependant, vous pouvez la personnaliser pour effectuer des opérations telles que la vidange du flux sur un disque dur ou la libération de toutes les ressources associées au flux. - Implémentation de la méthode
Dispose()
. Cette méthode est appelée pour libérer toutes les ressources détenues par la classeMemoryStreamProvider
. Cette implémentation se débarrasse de tous les objets MemoryStream de la liste Streams en utilisant une boucleforeach
.
C# MemoryStream vers un fichier
Le code C# suivant montre comment utiliser la classe MemoryStreamProvider
et la bibliothèque Aspose.HTML for .NET pour convertir un document HTML de plusieurs pages en JPG et enregistrer l’image dans un fichier. Examinons l’exemple dans lequel les étapes suivantes sont exécutées :
- Créer une nouvelle instance de la classe
MemoryStreamProvider
. Elle sera utilisée comme flux de sortie pour le processus de conversion. - Initialiser un document HTML en utilisant la classe HTMLDocument.
- Utilisez le constructeur
ImageSaveOptions() pour configurer les options d’enregistrement de l’image, comme le
ImageFormat
– JPEG (dans ce cas). - Appelez la méthode ConvertHTML(document, options, provider) pour convertir l’objet HTMLDocument en image à l’aide des options d’enregistrement et du MemoryStreamProvider.
- Utilisez la boucle
foreach
pour itérer sur chaque objetMemoryStream
dans la propriétéStreams
de l’objetstreamProvider
. Chaque MemoryStream représente une page du document HTML converti. - Appelez la méthode
memory.Seek()
sur le flux de mémoire pour fixer la position au début. Cela permet de s’assurer que tout le contenu du flux sera copié dans le fichier de sortie. - Utilisez la méthode
File.Create()
à l’intérieur de la boucle pour créer un fichier de sortie pour la page en cours. - Utilisez la méthode
memory.CopyTo()
pour copier le contenu du flux de mémoire dans l’objet FileStream, qui représente le fichier de sortie. - Après le traitement de chaque page, le compteur de pages est incrémenté afin de conserver la trace du numéro de page pour les noms de fichiers de sortie.
1// Convert HTML to JPEG in C# using output memory streams for writing data
2
3// Create an instance of MemoryStreamProvider
4using (MemoryStreamProvider streamProvider = new MemoryStreamProvider())
5{
6 // Prepare HTML code
7 string code = @"<style>
8 div { page-break-after: always; }
9 </style>
10 <div style='border: 1px solid red; width: 300px'>First Page</div>
11 <div style='border: 1px solid red; width: 300px'>Second Page</div>
12 <div style='border: 1px solid red; width: 300px'>Third Page</div>
13 ";
14 // Initialize an HTML document from the HTML code
15 using HTMLDocument document = new HTMLDocument(code, ".");
16 {
17 // Convert HTML to Image by using the MemoryStreamProvider
18 Converter.ConvertHTML(document, new ImageSaveOptions(ImageFormat.Jpeg), streamProvider);
19
20 // Get access to the memory stream that contains the result data
21 int page = 1;
22 foreach (MemoryStream memory in streamProvider.Streams)
23 {
24 memory.Seek(0, SeekOrigin.Begin);
25
26 // Flush the result data to the output file
27 using (FileStream fs = File.Create(Path.Combine(OutputDir, "page_" + page + ".jpg")))
28 {
29 memory.CopyTo(fs);
30 }
31 page++;
32 }
33 }
34}
Aspose.HTML propose des Convertisseurs gratuits en ligne pour convertir des fichiers HTML, XHTML, MHTML, EPUB, XML et Markdown dans une variété de formats populaires. Vous pouvez facilement convertir HTML en PDF, HTML en JPG, SVG en PDF, MHTML en PDF, ou MD en HTML Il vous suffit de sélectionner un fichier, de choisir le format à convertir, et le tour est joué. C’est rapide et entièrement gratuit !