Convertir le HTML d'une archive ZIP en PDF – Exemple C#

Dans cet article, nous créons un gestionnaire de messages personnalisé pour effectuer une tâche spécifique : convertir le code HTML d’une archive ZIP en PDF.

Il y a de nombreuses raisons pour lesquelles vous avez besoin de convertir HTML d’une archive ZIP au format PDF. Le format PDF présente de nombreux avantages que d’autres fichiers n’ont pas. Par exemple, de nombreux programmes et applications prennent en charge les documents PDF, la plupart des navigateurs web tels que Chrome et Firefox peuvent afficher un PDF. Les fichiers PDF sont optimisés pour l’impression ; ils sont idéaux pour créer des copies physiques de vos documents. Le format PDF prend en charge de nombreux algorithmes de compression. Vous pouvez configurer les paramètres de sécurité de votre fichier PDF, etc.

Créer un gestionnaire de messages personnalisé

Aspose.HTML for .NET offre une fonctionnalité permettant de créer des gestionnaires de messages personnalisés. Concevons un gestionnaire personnalisé que nous pourrons utiliser pour travailler avec des archives ZIP. Procédez comme suit :

  1. Utilisez l’espace de nommage nécessaire, à savoir Aspose.Html.Net. Cet espace de noms est présenté par des classes et des interfaces qui sont chargées de faciliter le traitement des réseaux.

  2. Pour créer un gestionnaire de messages personnalisé, vous devez définir votre propre classe qui sera dérivée de la classe MessageHandler. La classe MessageHandler représente un type de base pour les gestionnaires de messages. L’héritage de IDisposable est nécessaire pour fournir un mécanisme de libération déterministe des ressources non gérées.

1using Aspose.Html.Net;
2...
3
4	class ZipArchiveMessageHandler : MessageHandler, IDisposable
5	{
6	}

Vous avez donc défini votre propre classe ZipArchiveMessageHandler, il vous faut maintenant effectuer quelques opérations à l’intérieur de celle-ci.

  1. Initialiser une instance de la classe ZipArchiveMessageHandler et lui définir une propriété Filter.

  2. Surchargez la méthode Invoke() de la classe MessageHandler pour mettre en œuvre le comportement du gestionnaire de messages personnalisé.

 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}

Examinons de plus près cet extrait de code :

Vous pouvez télécharger les exemples complets et les fichiers de données sur GitHub.

Ajouter ZipArchiveMessageHandler dans le pipeline

Vous devez maintenant ajouter ZipArchiveMessageHandler dans le pipeline. Utilisez la méthode Add() qui prend un objet zip en paramètre et ajoute ZipArchiveMessageHandler à la fin de la collection des gestionnaires de messages.

La propriété INetworkService.MessageHandlers permet d’obtenir une liste d’instances de MessageHandler à invoquer lors de l’exécution d’une RequestMessage.

 1// Convert HTML from a ZIP archive to PDF 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-pdf.pdf");
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 the PDF Device  
27using PdfDevice device = new PdfDevice(savePath);
28
29// Render ZIP to PDF
30document.RenderTo(device);

Dans l’exemple, l’archive ZIP (test.zip) contient le document HTML (test.html) dans lequel toutes les ressources liées ont des chemins relatifs au document HTML.

Note: Le constructeur HTMLDocument(address, configuration) prend le chemin absolu vers l’archive ZIP. Mais toutes les ressources associées ont des chemins relatifs dans le document HTML et dans le code de l’exemple.

Veuillez lire l’article Fine-Tuning Converters pour en savoir plus sur la conversion de HTML en PDF à l’aide de la méthode Renderto(device).

Aspose.HTML propose un Convertisseur ZIP en PDF gratuit en ligne qui vous permet de convertir rapidement, facilement et clairement le code HTML d’une archive ZIP en PDF. Téléchargez, convertissez les fichiers et obtenez les résultats en quelques secondes. Aucun logiciel supplémentaire n’est nécessaire. Essayez notre convertisseur robuste gratuitement dès maintenant !

Texte “ZIP to PDF Converter” (convertisseur ZIP en PDF)

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.