Конвертировать HTML из ZIP-архива в JPG – C# пример

В этой статье мы создадим собственный обработчик сообщений для выполнения конкретной задачи – преобразования HTML из ZIP-архива в JPG.

Вы можете скачать полные примеры C# и файлы данных с GitHub.

Есть много причин, по которым вам может потребоваться преобразовать HTML из ZIP-архива в формат JPG. Например, если вы хотите преобразовать документ HTML (XHTML), содержащий связанные ресурсы, в JPG, вы должны упаковать все эти ресурсы вместе с документом в один ZIP-архив и преобразовать ZIP в JPG. Aspose.HTML for .NET предоставляет функциональные возможности для создания пользовательских обработчиков сообщений для работы с ZIP-архивами.

Создайте собственный обработчик сообщений

Aspose.HTML for .NET предлагает функциональные возможности для создания собственного обработчика сообщений. Давайте разработаем собственный обработчик, который мы можем использовать для работы с ZIP-архивами. Выполните следующие действия:

  1. Используйте необходимое пространство имен, которым является Aspose.Html.Net. Это пространство имен представлено классами и интерфейсами, которые отвечают за упрощение сетевой обработки.
  2. Чтобы создать собственный обработчик сообщений, вам необходимо определить собственный класс, который будет производным от класса MessageHandler. Класс MessageHandler представляет базовый тип для обработчиков сообщений.
1using Aspose.Html.Net;
2...
3
4	class ZipArchiveMessageHandler : MessageHandler
5	{
6	}
  1. Инициализируйте экземпляр класса ZipArchiveMessageHandler и определите для него свойство Filter.
  2. Переопределите метод Invoke() класса MessageHandler для реализации пользовательского поведения обработчика сообщений.
 1// Implement ZipArchiveMessageHandler in C#
 2
 3// This message handler prints a message about start and finish processing request
 4class ZipArchiveMessageHandler : MessageHandler, IDisposable
 5{
 6    private string filePath;
 7    private Archive archive;
 8
 9    // Initialize an instance of the ZipArchiveMessageHandler class
10    public ZipArchiveMessageHandler(string path)
11    {
12        this.filePath = path;
13        Filters.Add(new ProtocolMessageFilter("zip"));
14    }
15
16    // Override the Invoke() method
17    public override void Invoke(INetworkOperationContext context)
18    {
19        // Call the GetFile() method that defines the logic in the Invoke() method
20        byte[] buff = GetFile(context.Request.RequestUri.Pathname.TrimStart('/'));
21        if (buff != null)
22        {
23            // Checking: if a resource is found in the archive, then return it as a Response
24            context.Response = new ResponseMessage(HttpStatusCode.OK)
25            {
26                Content = new ByteArrayContent(buff)
27            };
28            context.Response.Headers.ContentType.MediaType = MimeType.FromFileExtension(context.Request.RequestUri.Pathname);
29        }
30        else
31        {
32            context.Response = new ResponseMessage(HttpStatusCode.NotFound);
33        }
34
35        // Call the next message handler
36        Next(context);
37    }
38
39
40    byte[] GetFile(string path)
41    {
42        path = path.Replace(@"\", @"/");
43        ArchiveEntry result = GetArchive().Entries.FirstOrDefault(x => path == x.Name);
44        if (result != null)
45        {
46            using (Stream fs = result.Open())
47            using (MemoryStream ms = new MemoryStream())
48            {
49                fs.CopyTo(ms);
50                return ms.ToArray();
51            }
52        }
53        return null;
54    }
55
56    Archive GetArchive()
57    {
58        return archive ??= new Archive(filePath);
59    }
60
61    public void Dispose()
62    {
63        archive?.Dispose();
64    }
65}

Рассмотрим поближе фрагмент кода:

Добавьте ZipArchiveMessageHandler в конвейер

Ключевой концепцией работы обработчиков сообщений является объединение их в цепочку, и теперь вам нужно добавить ZipArchiveMessageHandler в конвейер. Конструктор Configuration() создает экземпляр класса Configuration. После создания конфигурации вызываются методы GetService<INetworkService>() и MessageHandlers.Add(). Метод Add() принимает в качестве параметра объект zip и добавляет ZipArchiveMessageHandler в конец коллекции обработчиков сообщений.

 1// Convert HTML from a ZIP archive to JPG using C#
 2
 3// Add this line before you try to use the 'IBM437' encoding
 4System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
 5
 6// Prepare path to a source zip file
 7string documentPath = Path.Combine(DataDir, "test.zip");
 8
 9// Prepare path for converted file saving
10string savePath = Path.Combine(OutputDir, "zip-to-jpg.jpg");
11
12// Create an instance of ZipArchiveMessageHandler
13using ZipArchiveMessageHandler zip = new ZipArchiveMessageHandler(documentPath);
14
15// Create an instance of the Configuration class
16using Configuration configuration = new Configuration();
17
18// Add ZipArchiveMessageHandler to the chain of existing message handlers
19configuration
20    .GetService<INetworkService>()
21    .MessageHandlers.Add(zip);
22
23// Initialize an HTML document with specified configuration
24using HTMLDocument document = new HTMLDocument("zip:///test.html", configuration);
25
26// Create an instance of Rendering Options
27ImageRenderingOptions options = new ImageRenderingOptions()
28{
29    Format = ImageFormat.Jpeg
30};
31
32// Create an instance of Image Device
33using ImageDevice device = new ImageDevice(options, savePath);
34
35// Render ZIP to JPG
36document.RenderTo(device);

В примере ZIP-архив (test.zip) содержит HTML-документ (test.html), в котором все связанные ресурсы имеют пути относительно HTML-документа.

Примечание. Конструктор HTMLDocument(address, configuration) принимает абсолютный путь к ZIP-архиву. Но все связанные ресурсы имеют относительные пути в документе HTML и в коде примера.

Для получения дополнительной информации о том, как преобразовать HTML в JPG с помощью метода Renderto(device), пожалуйста, прочитайте Fine-Tuning Converters.

Aspose.HTML предлагает бесплатный онлайн Конвертер ZIP в JPG, который конвертирует HTML из ZIP-архива в JPG с высоким качеством, легко и быстро. Просто загрузите, конвертируйте свои файлы и получите результат за несколько секунд!

Text “Баннер – Конвертер ZIP в JPG”

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.