Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
En las operaciones de conversión, normalmente guardamos el resultado de la renderización en el archivo. Sin embargo, en algunos casos, es posible que necesite almacenar el resultado en la memoria o enviarlo a un almacenamiento remoto. Puede hacerlo fácilmente implementando la interfaz especializada ICreateStreamProvider y usándola como parámetro de entrada para el convertidor. Esta interfaz representa una devolución de llamada que se utiliza cuando se requiere un nuevo flujo de salida.
Nota: Es posible que se invoque varias veces cuando se requieren varios flujos de salida. El escenario en el que este caso es posible es renderizar HTML en el conjunto de archivos de imagen.
La biblioteca Aspose.HTML C# permite realizar la clase MemoryStreamProvider como una implementación personalizada de la interfaz
ICreateStreamProvider. La clase MemoryStreamProvider proporciona objetos C# MemoryStream como flujos de salida para escribir datos, que se pueden almacenar en la memoria como un flujo.
El uso de C# MemoryStream ayuda a evitar las latencias comúnmente asociadas con la lectura o escritura de archivos en un disco. Además, debido a que el contenido de un MemoryStream permanece en la memoria, no se utiliza el espacio físico del disco.
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}Veamos las partes principales de la clase MemoryStreamProvider:
Streams. Se crea una lista de objetos MemoryStream durante la representación del documento. Estos objetos almacenarán los datos que se escriben en los flujos de salida.GetStream(). Los métodos GetStream() crean nuevos objetos MemoryStream, los agregan a la lista Streams y los devuelven como flujos de salida.ReleaseStream(). El método ReleaseStream() libera un objeto Stream lleno de datos. En esta implementación, el método está vacío. Aún así, puede personalizarlo para realizar operaciones como vaciar la transmisión en un disco duro o liberar cualquier recurso asociado con la transmisión.Dispose(). Se llama a este método para liberar cualquier recurso retenido por la clase MemoryStreamProvider. Esta implementación elimina todos los objetos MemoryStream en la lista Streams usando un bucle foreach.El siguiente código C# demuestra cómo utilizar la clase MemoryStreamProvider y la biblioteca Aspose.HTML for .NET para convertir un documento HTML de varias páginas a JPG y guardar la imagen en un archivo. Veamos el ejemplo donde se realizan los siguientes pasos:
MemoryStreamProvider. Se utilizará como flujo de salida para el proceso de conversión.ImageFormat – JPEG (en este caso).foreach para iterar sobre cada objeto MemoryStream en la propiedad Streams del objeto streamProvider. Cada MemoryStream representa una página del documento HTML convertido.memory.Seek() en el flujo de memoria para establecer la posición al principio. Esto garantiza que todo el contenido de la transmisión se copiará en el archivo de salida.File.Create() dentro del bucle para crear un archivo de salida para la página actual.memory.CopyTo() para copiar el contenido del flujo de memoria al objeto FileStream, que representa el archivo de salida. 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 ofrece Convertidores en línea gratuitos para convertir archivos HTML, XHTML, MHTML, EPUB, XML y Markdown a una variedad de formatos populares. Puede convertir fácilmente HTML a PDF, HTML a JPG, SVG a PDF, MHTML a PDF o MD a HTML. Simplemente seleccione un archivo, elija el formato a convertir y listo. ¡Es rápido y completamente gratis!
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.