Convert MHTML to PDF in C#

To convert MHTML to PDF in C#, open the MHTML file as a stream, create PdfSaveOptions, and call Converter.ConvertMHTML() with the stream, options, and output path or stream provider.

MHTML stores a web page and its linked resources in a single MIME archive. PDF is useful when that archived web page must become a fixed-layout document for sharing, printing, archiving, or automated document workflows.

Before running the examples, install and configure Aspose.HTML for .NET in your project. The complete C# example project is available in the Aspose.HTML for .NET GitHub repository.

Convert MHTML to PDF with Two Lines of C#

The static Converter class provides the shortest path from an MHTML stream to a PDF file. The example below opens an MHTML file and converts it to PDF with default PdfSaveOptions.

1// Convert MHTML to PDF using C#
2
3// Open an existing MHTML file for reading
4using FileStream stream = File.OpenRead(DataDir + "sample.mht");
5
6// Invoke the ConvertMHTML() method to convert MHTML to PDF
7Converter.ConvertMHTML(stream, new PdfSaveOptions(), Path.Combine(OutputDir, "convert-by-two-lines.pdf"));

Convert an MHTML File to PDF in C#

Use this workflow when the MHTML source exists on disk and the PDF should be saved to a file path.

The workflow is:

  1. Open the MHTML file with File.OpenRead() or another readable stream.
  2. Create a PdfSaveOptions instance.
  3. Call Converter.ConvertMHTML(stream, options, savePath).
  4. Save the generated PDF file to the target output path.
 1// Convert MHTML to PDF in C#
 2
 3// Open an existing MHTML file for reading
 4using FileStream stream = File.OpenRead(DataDir + "sample.mht");
 5
 6// Prepare a path to save the converted file
 7string savePath = Path.Combine(OutputDir, "sample-output.pdf");
 8
 9// Create an instance of PdfSaveOptions
10PdfSaveOptions options = new PdfSaveOptions();
11
12// Call the ConvertMHTML() method to convert MHTML to PDF
13Converter.ConvertMHTML(stream, options, savePath);

Customize MHTML to PDF with PdfSaveOptions

Use PdfSaveOptions when the generated PDF needs custom rendering settings.

To customize MHTML to PDF conversion:

  1. Open the MHTML source stream.
  2. Create PdfSaveOptions.
  3. Configure only the settings required by the output, such as PageSetup, JpegQuality, BackgroundColor, resolution, or Encryption.
  4. Pass the stream, options, and output path to Converter.ConvertMHTML().
OptionUse it to control
PageSetupPage size, margins, and page layout settings.
JpegQualityJPEG image compression quality in the PDF output. The default value is 95.
CssCSS processing behavior through CssOptions.
BackgroundColorThe color used to fill the page background. The default value is transparent.
HorizontalResolution and VerticalResolutionOutput resolution values used by the rendering process. The default value is 300 dpi for each property.
EncryptionPDF encryption settings. If not configured, the PDF is created without encryption.
 1// Convert MHTML to PDF in C# with custom settings
 2
 3// Open an existing MHTML file for reading
 4using FileStream stream = File.OpenRead(DataDir + "sample.mht");
 5
 6// Prepare a path to save the converted file
 7string savePath = Path.Combine(OutputDir, "sample-options.pdf");
 8
 9// Create an instance of PdfSaveOptions. Set up the page-size and change the background color to AliceBlue
10PdfSaveOptions options = new PdfSaveOptions()
11{
12    PageSetup =
13        {
14            AnyPage = new Page()
15            {
16                Size = new Aspose.Html.Drawing.Size(Length.FromPixels(3000), Length.FromPixels(1000))
17            }
18        },
19    BackgroundColor = System.Drawing.Color.AliceBlue
20};
21
22// Call the ConvertMHTML() method to convert MHTML to PDF
23Converter.ConvertMHTML(stream, options, savePath);

Related PDF Workflows

Save MHTML to PDF with an Output Stream Provider

Use ICreateStreamProvider when the conversion output should be written through streams instead of only to a file path. This is useful for memory-based workflows, remote storage, databases, and services that decide where the rendered output is stored.

The MemoryStreamProvider class below implements ICreateStreamProvider and keeps generated streams in memory.

 1// Implement a custom MemoryStream provider for advanced control over HTML rendering output streams
 2
 3class MemoryStreamProvider : Aspose.Html.IO.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}

The following example converts MHTML to PDF with MemoryStreamProvider.

 1// Convert MHTML to PDF in C# using memory stream
 2
 3// Create an instance of MemoryStreamProvider
 4using MemoryStreamProvider streamProvider = new MemoryStreamProvider();
 5
 6// Open an existing MHTML file for reading
 7using FileStream stream = File.OpenRead(DataDir + "sample.mht");
 8
 9// Prepare a path to save the converted file
10string savePath = Path.Combine(OutputDir, "stream-provider.pdf");
11
12// Convert MHTML to PDF by using the MemoryStreamProvider class
13Converter.ConvertMHTML(stream, new PdfSaveOptions(), streamProvider);
14
15// Get access to the memory stream that contains the result data
16MemoryStream memory = streamProvider.Streams.First();
17memory.Seek(0, SeekOrigin.Begin);
18
19// Flush the result data to the output file
20using (FileStream fs = File.Create(savePath))
21{
22    memory.CopyTo(fs);
23}

Related MHTML Conversion Guides

Other Platforms

Try Online MHTML to PDF Conversion

                
            

Use the online MHTML to PDF Converter for quick manual conversion. Use Aspose.HTML for .NET when MHTML to PDF conversion must run inside a C# application, service, or document pipeline.

MHTML to PDF Converter