Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
В операциях преобразования мы обычно сохраняем результат рендеринга в файл. Однако в некоторых случаях вам может потребоваться сохранить результат в памяти или отправить его в удаленное хранилище. Вы можете легко сделать это, реализовав специализированный интерфейс ICreateStreamProvider и используя его в качестве входного параметра для преобразователя. Этот интерфейс представляет собой обратный вызов, который используется, когда требуется новый поток вывода.
Примечание. Его можно вызывать несколько раз, когда требуется несколько выходных потоков. Сценарий, когда этот случай возможен, – это рендеринг HTML в набор файлов изображений.
Библиотека C# Aspose.HTML позволяет реализовать класс MemoryStreamProvider как пользовательскую реализацию интерфейса
ICreateStreamProvider. Класс MemoryStreamProvider предоставляет объекты C# MemoryStream в качестве выходных потоков для записи данных, которые могут храниться в памяти в виде потока.
Использование C# MemoryStream помогает избежать задержек, обычно связанных с чтением или записью файлов на диск. Кроме того, поскольку содержимое MemoryStream остается в памяти, физическое пространство на диске не используется.
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}Давайте рассмотрим основные части класса MemoryStreamProvider:
MemoryStream создается во время рендеринга документа. Эти объекты будут хранить данные, которые записываются в выходные потоки.GetStream(). Методы GetStream() создают новые объекты MemoryStream, добавляют их в список Streams и возвращают их как выходные потоки.ReleaseStream(). Метод ReleaseStream() освобождает объект Stream, заполненный данными. В этой реализации метод пустой. Тем не менее, вы можете настроить его для выполнения таких операций, как сброс потока на жесткий диск или освобождение любых ресурсов, связанных с потоком.MemoryStreamProvider. Эта реализация удаляет все объекты MemoryStream в списке Streams, используя цикл foreach.В следующем коде C# показано, как использовать класс MemoryStreamProvider и библиотеку Aspose.HTML for .NET для преобразования HTML в JPG и сохранения изображения в файл. Давайте рассмотрим пример, где выполняются следующие шаги:
MemoryStreamProvider. Он будет использоваться в качестве выходного потока для процесса преобразования.ImageFormat – JPEG (в данном случае).foreach для перебора каждого объекта MemoryStream в свойстве Streams объекта streamProvider. Каждый MemoryStream представляет собой страницу преобразованного HTML-документа.memory.Seek() в потоке памяти, чтобы установить позицию в начало. Это делается для того, чтобы на следующем шаге все содержимое потока было скопировано в файловый поток.File.Create() внутри цикла, чтобы создать выходной файл для текущей страницы.memory.CopyTo(), чтобы скопировать содержимое потока памяти в объект FileStream, представляющий выходной файл. 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 предлагает бесплатные онлайн Конвертеры для преобразования файлов HTML, XHTML, MHTML, EPUB, XML и Markdown в различные популярные форматы. Вы можете легко конвертировать HTML в PDF, HTML в JPG, SVG в PDF, MHTML в PDF или MD to HTML. Просто выберите файл, выберите формат для преобразования, и готово! Это быстро и совершенно бесплатно!
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.