C# examples to convert HTML to PDF in .Net on Azure Websites (or any other website)

If you are looking for a C# webpage to pdf converter, you can use our free web service, in use by commercial applications and platforms. You do not need to install or download any libraries or components to make this work.

Especially great for reporting, brochures and invoicing - create one HTML webpage and use it as both as a source to generate your downloadable PDF or for users to view directly.

The service will convert webpages to pdfs online by reading your webpage and dynamically generate a PDF or an image. It will handle fairly complex documents and layouts including images and executing javascript, although as always the simpler the better.

See example #5 for a the new ASPNET 5 code.

    • Example #1 - How to stream a PDF directly to the end user with ASP.NET C# MVC

    • By commenting out line #17 you can switch between showing the file inside the browser window itself (if supported by the browser), and downloading as an attachment.

    •         public ActionResult Run()
              {
                  string apiKey = "ABCD-1234";
                  string value = "http://www.google.com"; // a url starting with http or an HTML string
      
                  using (var client = new WebClient())
                  {
                      // Build the conversion options 
                      NameValueCollection options = new NameValueCollection();
                      options.Add("apikey", apiKey);
                      options.Add("value", value);
      
                      // Call the API convert to a PDF
                      MemoryStream ms = new MemoryStream(client.UploadValues("http://api.html2pdfrocket.com/pdf", options));
      
                      // Make the file a downloadable attachment - comment this out to show it directly inside
                      HttpContext.Response.AddHeader("content-disposition", "attachment; filename=myfilename.pdf");
      
                      // Return the file as a PDF
                      return new FileStreamResult(ms, "application/pdf");
                  }
              }
      
    • Example #2 - How to convert a webpage to an image using ASP.NET C#

    • Line #12 allows you to change the default output format so the html is converted into an image. You can use "png", "bmp" or "svg" formats for images. You could add line #12 to the above example to steam the image to the user (or as an attachment), or you can use this example which instead saves the image to your disk.

    •         public void Run()
              {
                  string apiKey = "ABCD-1234";
                  string value = "http://www.google.com"; // a url starting with http or an HTML string
      
                  using (var client = new WebClient())
                  {
                      // Build the conversion options 
                      NameValueCollection options = new NameValueCollection();
                      options.Add("apikey", apiKey);
                      options.Add("value", value);
                      options.Add("OutputFormat", "jpg");
                                          
                      // Call the API convert to an image
                      byte[] result = client.UploadValues("http://api.html2pdfrocket.com/pdf", options);
      
                      // Save the image to disk
                      System.IO.File.WriteAllBytes(Server.MapPath(Path.Combine("~/", @"c:\temp\myimage.jpg")), result);
                  }
              }
      
    • Example #3 - How to convert an HTML string to a PDF using ASP.NET C#

    • You can also convert an HTML string to a PDF by supplying the HTML directly. It can be as complex as you like and may include image references and stylesheeet information -- just make sure it is valid HTML

    •         public void Run()
              {
                  string apiKey = "ABCD-1234";
                  string value = "

      An ExampleHTML String

      "; // a direct HTML string using (var client = new WebClient()) { // Build the conversion options NameValueCollection options = new NameValueCollection(); options.Add("apikey", apiKey); options.Add("value", value); // Call the API convert to an image byte[] result = client.UploadValues("http://api.html2pdfrocket.com/pdf", options); // Save the image to disk System.IO.File.WriteAllBytes(Server.MapPath(Path.Combine("~/", @"c:\temp\myimage.pdf")), result); } }
    • Example #4 - Using C# MVC to convert a URL and add a footer

    • By default page margins are set to zero. In this example, we increase the bottom margin to 30 to allow space for a page footer. Note you could use a Url to the file, or you could pass the whole file as a string with the FooterHtml parameter

    • 
                                          
                          public ActionResult TestC()
                          {
                              string apiKey = "ABCD-1234";
                              string value = "http://www.google.com";
      
                              using (var client = new WebClient())
                              {
                                  // Build the conversion options
                                  NameValueCollection options = new NameValueCollection();
                                  options.Add("apikey",apiKey);
                                  options.Add("value", value);
                                  options.Add("MarginBottom", "30");
                                  options.Add("FooterUrl", "http://www.html2pdfrocket.com/examples/footer.htm");
                                  
                                  // Call the API convert to a PDF
                                  MemoryStream ms = new MemoryStream(client.UploadValues("http://api.html2pdfrocket.com/pdf", options));
                                  
                                  // Make the file a downloadable attachment - comment this out to show it directly inside
                                  HttpContext.Response.AddHeader("Content-Disposition:attachment;", "filename=devis.pdf");
                                  
                                  // Return the file as a PDF
                                  return new FileStreamResult(ms, "application/pdf");
                              }
                          }
      
            
                                  

      Here is an example custom HTML footer file with page numbers. Do not forget the doctype.

      <!DOCTYPE html>
      <html>
      <head>
          <script>
              function subst() {
                  var vars = {};
                  var x = window.location.search.substring(1).split('&');
                  for (var i in x) { var z = x[i].split('=', 2); vars[z[0]] = unescape(z[1]); }
                  var x = ['frompage', 'topage', 'page', 'webpage', 'section', 'subsection', 'subsubsection'];
                  for (var i in x) {
                      var y = document.getElementsByClassName(x[i]);
                      for (var j = 0; j < y.length; ++j) y[j].textContent = vars[x[i]];
                  }
              }
          </script>
      </head>
          <body style="border:0; margin: 0;" onload="subst()">
              <table style="border-bottom: 1px solid black; width: 100%">
                  <tr>
                      <td class="section"></td>
                      <td style="text-align:right">
                          Page <span class="page"></span> of <span class="topage"></span>
                      </td>
                  </tr>
              </table>
          </body>
      </html>
      

      This is an example which hides the header on page 1 and 3

                                          
      <!DOCTYPE html>
      <html>
      <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
          <script>
              function subst() {
                  var vars = {};
                  var x = document.location.search.substring(1).split('&');
                  for (var i in x) { var z = x[i].split('=', 2); vars[z[0]] = unescape(z[1]); }
                  var x = ['frompage', 'topage', 'page', 'webpage', 'section', 'subsection', 'subsubsection'];
                  for (var i in x) {
                      var y = document.getElementsByClassName(x[i]);
                      for (var j = 0; j < y.length; ++j) y[j].textContent = vars[x[i]];
                      if (vars['page'] == 1) { // If page is 1, set FakeHeaders display to none
                          document.getElementById("FakeHeaders").style.display = 'none';
                      }
                      if (vars['page'] == 3) { // If page is 3, set FakeHeaders display to none
                          document.getElementById("FakeHeaders").style.display = 'none';
                      }
                  }
              }
          </script>
      </head>
      <body style="border:0;margin:0;" onload="subst()">
           <table style="border-bottom: 1px solid pink; width: 100%; margin-bottom:5px;" id="FakeHeaders">
               <tr>
                   <th>Your awesome table column header 1</th>
                   <th>Column 2</th>
                   <th style="text-align:right">
                   Page <span class="page"></span>/<span class="topage"></span>
                   </th>
              </tr>
          </table>
      </body>
      </html>
      
    • Example #5 - How to convert a webpage to an PDF and stream it to the browser using ASP.NET C#

    • Line #20 allows you to stream the bytes directly to the browser to use as an attachment

    •         public void Run()
              {
                  string apiKey = "ABCD-1234";
                  string value = "http://www.google.com"; // a url starting with http or an HTML string
                  using (var client = new WebClient())
                  {
                      // Build the conversion options 
                      NameValueCollection options = new NameValueCollection();
                      options.Add("apikey", apiKey);
                      options.Add("value", value);
                                          
                      // Call the API convert to an image
                      byte[] result = client.UploadValues("http://api.html2pdfrocket.com/pdf", options);
                                                          
                      // Set response type to PDF
                      Response.Clear();
                      Response.ContentType = "application/pdf";
      
                      // Comment this next line out to attempt to stream inline into the browser (if browser supports it)
                      Response.AddHeader("content-disposition", "attachment; filename=myfilename.pdf");
      
                      // Return the file as a PDF                
                      Response.BinaryWrite(result);
                      Response.End();
                  }
              }
      
    • Example #6 - ASP.NET 5 and C# MVC 6

    • The WebClient has been replaced with HttpClient in ASP.NET 5. Other aspects follow the same format.

    •  
                  using (var client = new HttpClient())
                  {
                      var content = new FormUrlEncodedContent(new[]
                      {
                          new KeyValuePair("apikey", apiKey),
                          new KeyValuePair("value", url)
                      });
       
                      var result = client.PostAsync("http://api.html2pdfrocket.com/pdf", content).Result;
       
                      if (result.IsSuccessStatusCode)
                      {
                          MemoryStream stream = new MemoryStream(result.Content.ReadAsByteArrayAsync().Result);
                          return File(stream, "application/pdf", "MyPdfFile.pdf");
                      }
                  }
                                      

Need another C# example? Would you mind dropping us a quick one line note to say which example you would have liked and we'll put the most commonly used ones here.

Get Started

Don't waste your day reinventing the wheel, be converting in 3 minutes from now

Conversion Tip


The number #1 reason a conversion fails to look correct is because it contains an references to external links or images that don't exist, or exist on your localhost. If there is a conversion error, please check the page using your webbrowsers 'developer' network tab to ensure there are no 404 errors.