Convert MHTML to XPS – C#

MHTML to XPS conversion is often required to take advantage of XPS format for specific tasks. An XPS file represents page layout files that are based on XML Paper Specifications, created by Microsoft.

In this article, you find information on how to convert MHTML to XPS using ConvertMHTML() methods of the Converter class and how to apply XpsSaveOptions and ICreateStreamProvider parameters.

Online MHTML Converter

You can check the Aspose.HTML API functionality and convert MHTML in real-time. Please load an MHTML file from the local file system, select the output format and run the example. In the example, the save options are set by default. You will immediately receive the result as a separate file.

                
            

If you want to convert MHTML to XPS format programmatically, please see the following C# code examples.

MHTML to XPS by two lines of code

The static methods of the Converter class are primarily used as the easiest way to convert an MHTML code into various formats. For example, you can convert MHTML to XPS in your C# application literally with two lines of code!

1using System.IO;
2using Aspose.Html.Converters;
3using Aspose.Html.Saving;
4...
5     // Open an existing MHTML file for reading
6     using var stream = File.OpenRead(DataDir + "sample.mht");
7
8     // Invoke the ConvertMHTML() method to convert the MHTML code to XPS
9     Converter.ConvertMHTML(stream, new XpsSaveOptions(), Path.Combine(OutputDir, "convert-by-two-lines.xps")); 

Convert MHTML to XPS

Using Converter.ConvertMHTML methods is the most common way to convert MHTML code into various formats. With Aspose.HTML, you can convert MHTML to XPS format programmatically with full control over a wide range of conversion parameters.

The following C# code snippet shows how to convert MHTML to XPS using Aspose.HTML for .NET.

  1. Open an existing MHTML file. In the example, we use the OpenRead() method of System.IO.FileStream class to open and read files from the file system at the specified path.
  2. Create an instance of the XpsSaveOptions class.
  3. Use the ConvertMHTML() method of the Converter class to save MHTML as a XPS file. You need to pass the MHTML file stream, XpsSaveOptions, and output file path to the ConvertMHTML() method method for MHTML to XPS conversion.
 1using System.IO;
 2using Aspose.Html.Converters;
 3using Aspose.Html.Saving;
 4...
 5     // Open an existing MHTML file for reading
 6     using var stream = File.OpenRead(DataDir + "sample.mht");
 7
 8     // Prepare a path for converted file saving 
 9     string savePath = Path.Combine(OutputDir, "sample-output.xps");
10
11     // Create an instance of XpsSaveOptions
12     var options = new XpsSaveOptions();
13
14     // Call the ConvertMHTML() method to convert MHTML to XPS
15     Converter.ConvertMHTML(stream, options, savePath);

You can download the complete examples and data files from GitHub.

Save Options

Aspose.HTML allows converting MHTML to XPS using default or custom save options. XpsSaveOptions usage enables you to customize the rendering process; you can specify the page size, margins, background color, resolutions, etc.

PropertyDescription
PageSetupThis property gets a page setup object and uses it for configuration output page-set.
CssGets a CssOptions object which is used for configuration of CSS properties processing.
BackgroundColorThis property sets the color that will fill the background of every page. By default, this property is Transparent.
HorizontalResolutionSets horizontal resolution for output images in pixels per inch. The default value is 300 dpi.
VerticalResolutionSets vertical resolution for output images in pixels per inch. The default value is 300 dpi.

To learn more about XpsSaveOptions, please read the Fine-Tuning Converters article.

Convert MHTML to XPS using XpsSaveOptions

To convert MHTML to XPS with XpsSaveOptions specifying, you should follow a few steps:

  1. Open an existing MHTML file.
  2. Create a new XpsSaveOptions object and specify save options.
  3. Use the ConvertMHTML() method to save MHTML as a XPS file. You need to pass the MHTML file stream, XpsSaveOptions, and output file path to the ConvertMHTML() method for MHTML to XPS conversion.

The following example shows how to use XpsSaveOptions and create an XPS file with custom save options:

 1using System.IO;
 2using Aspose.Html;
 3using Aspose.Html.Converters;
 4using Aspose.Html.Saving;
 5using System.Drawing;
 6using Aspose.Html.Drawing;
 7...
 8    // Open an existing MHTML file for reading
 9    using var stream = File.OpenRead(DataDir + "sample.mht");
10
11    // Prepare a path for converted file saving
12    string savePath = Path.Combine(OutputDir, "sample-options.xps");
13
14    // Create an instance of XpsSaveOptions. Set up the page-size and change the background color to AliceBlue 
15    var options = new XpsSaveOptions();
16    options.PageSetup.AnyPage = new Page(new Aspose.Html.Drawing.Size(Length.FromInches(8.3f), Length.FromInches(5.8f)));
17    options.BackgroundColor = System.Drawing.Color.AliceBlue;
18
19    // Call the ConvertMHTML() method to convert MHTML to XPS
20    Converter.ConvertMHTML(stream, options, savePath);

In the example, we use the OpenRead() method of System.IO.FileStream class to open and read source files from the file system at the specified path. The XpsSaveOptions() constructor initializes an instance of the XpsSaveOptions class that is passed to ConvertMHTML() method. The ConvertMHTML() method takes the stream, options, output file path savePath and performs the conversion operation. The XpsSaveOptions class provides numerous properties that give you full control over a wide range of parameters and improve the process of converting MHTML to XPS format.

In the above example, we use:

Output Stream Providers

If it is required to save files in the remote storage (e.g., cloud, database, etc.) you can implement ICreateStreamProvider interface to have manual control over the file creating process. This interface is designed as a callback object to create a stream at the beginning of the document/page (depending on the output format) and release the early created stream after rendering the document/page.

Aspose.HTML for .NET provides various types of output formats for rendering operations. Some of these formats produce a single output file (for instance PDF, XPS), others create multiple files (Image formats JPG, PNG, etc.).

The example below shows how to implement and use your own MemoryStreamProvider in the application:

 1using System.IO;
 2using System.Collections.Generic;
 3...
 4    class MemoryStreamProvider : Aspose.Html.IO.ICreateStreamProvider
 5    {
 6        // List of MemoryStream objects created during the document rendering
 7        public List<MemoryStream> Streams { get; } = new List<MemoryStream>();
 8
 9        public Stream GetStream(string name, string extension)
10        {
11            // This method is called when only one output stream is required, for instance for XPS, PDF or TIFF formats.
12            MemoryStream result = new MemoryStream();
13            Streams.Add(result);
14            return result;
15        }
16
17        public Stream GetStream(string name, string extension, int page)
18        {
19            // 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.)
20            MemoryStream result = new MemoryStream();
21            Streams.Add(result);
22            return result;
23        }
24
25        public void ReleaseStream(Stream stream)
26        {
27            //  Here you can release the stream filled with data and, for instance, flush it to the hard-drive
28        }
29
30        public void Dispose()
31        {
32            // Releasing resources
33            foreach (var stream in Streams)
34                stream.Dispose();
35        }
36    }
 1using System.IO;
 2using Aspose.Html;
 3using System.Linq;
 4using Aspose.Html.Converters;
 5using Aspose.Html.Saving;
 6...
 7     // Create an instance of MemoryStreamProvider
 8     using var streamProvider = new MemoryStreamProvider();
 9
10     // Open an existing MHTML file for reading
11     using var stream = File.OpenRead(DataDir + "sample.mht");
12
13     // Prepare a path for converted file saving 
14     string savePath = Path.Combine(OutputDir, "stream-provider.xps");
15
16     // Convert MHTML to XPS by using the MemoryStreamProvider class
17     Converter.ConvertMHTML(stream, new XpsSaveOptions(), streamProvider);
18
19     // Get access to the memory stream that contains the result data
20     var memory = streamProvider.Streams.First();
21     memory.Seek(0, SeekOrigin.Begin);
22
23     // Flush the result data to the output file
24     using (FileStream fs = File.Create(savePath))
25     {
26         memory.CopyTo(fs);
27     }

Aspose.HTML offers a free online MHTML to XPS Converter that converts MHTML to XPS file with high quality, easy and fast. Just upload, convert your files and get results in a few seconds!

Text “Banner MHTML to XPS Converter”

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.