HTML aus ZIP-Archiv in PDF konvertieren – C#-Beispiel

In diesem Artikel erstellen wir einen benutzerdefinierten Message Handler für eine bestimmte Aufgabe – die Konvertierung von HTML aus einem ZIP-Archiv in PDF.

Es gibt viele Gründe, warum Sie HTML aus einem ZIP-Archiv in das PDF-Format konvertieren möchten. PDF bietet viele Vorteile, die andere Dateien nicht haben. Zum Beispiel unterstützen viele Programme und Anwendungen PDF-Dokumente, die meisten Webbrowser wie Chrome und Firefox können PDF-Dateien anzeigen. PDF-Dateien sind für den Druck optimiert; sie sind ideal für die Erstellung physischer Kopien Ihrer Dokumente. PDF unterstützt viele Komprimierungsalgorithmen. Sie können die Sicherheitseinstellungen für Ihre PDF-Datei konfigurieren, usw.

Erstellen eines benutzerdefinierten Nachrichten-Handlers

Aspose.HTML for .NET bietet Funktionen für die Erstellung benutzerdefinierter Nachrichten-Handler. Lassen Sie uns einen benutzerdefinierten Handler entwerfen, den wir für die Arbeit mit ZIP-Archiven verwenden können. Führen Sie die folgenden Schritte aus:

  1. Verwenden Sie den erforderlichen Namespace, nämlich Aspose.Html.Net. Dieser Namespace wird durch Klassen und Schnittstellen dargestellt, die für eine einfache Netzwerkverarbeitung verantwortlich sind.

  2. Um einen benutzerdefinierten Message Handler zu erstellen, müssen Sie Ihre eigene Klasse definieren, die von der Klasse MessageHandler abgeleitet wird. Die Klasse MessageHandler stellt einen Basistyp für Message-Handler dar. Die Vererbung von IDisposable ist notwendig, um einen Mechanismus für die deterministische Freigabe von nicht verwalteten Ressourcen bereitzustellen.

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

Sie haben also Ihre eigene ZipArchiveMessageHandler-Klasse definiert, nun müssen Sie einige Operationen darin durchführen.

  1. Initialisieren Sie eine Instanz der Klasse ZipArchiveMessageHandler und definieren Sie eine Filter-Eigenschaft für sie.

  2. Überschreiben Sie die Methode Invoke() der Klasse MessageHandler, um das Verhalten des benutzerdefinierten Nachrichten-Handlers zu implementieren.

 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}

Schauen wir uns dieses Codeschnipsel einmal genauer an:

Sie können die vollständigen Beispiele und Datendateien von GitHub herunterladen.

Hinzufügen von ZipArchiveMessageHandler in die Pipeline

Sie müssen nun ZipArchiveMessageHandler in die Pipeline aufnehmen. Verwenden Sie die Methode Add(), die ein “Zip”-Objekt als Parameter annimmt und ZipArchiveMessageHandler am Ende der Sammlung von Nachrichten-Handlern hinzufügt.

Die Eigenschaft INetworkService.MessageHandlers liefert eine Liste von MessageHandler-Instanzen, die bei der Ausführung einer RequestMessage aufgerufen werden.

 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);

Im Beispiel enthält das ZIP-Archiv (test.zip) das HTML-Dokument (test.html), in dem alle zugehörigen Ressourcen Pfade relativ zum HTML-Dokument haben.

Hinweis: Der HTMLDocument(address, configuration) Konstruktor nimmt den absoluten Pfad zum ZIP-Archiv. Alle zugehörigen Ressourcen haben jedoch relative Pfade im HTML-Dokument und im Code des Beispiels.

Bitte lesen Sie den Artikel Feinabstimmung von Konvertern, um mehr über die Umwandlung von HTML in PDF mit der Methode RenderTo(device) zu erfahren.

Aspose.HTML bietet einen kostenlosen Online- ZIP zu PDF Konverter, mit dem Sie schnell, einfach und übersichtlich HTML aus ZIP-Archiven in PDF konvertieren können. Dateien hochladen, konvertieren und in Sekundenschnelle Ergebnisse erhalten. Es ist keine zusätzliche Software erforderlich. Testen Sie unseren robusten Konverter jetzt kostenlos!

Text “ZIP zu PDF Konverter”

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.