Write Document to HttpResponse

Write Document to HttpResponse

In PDFKit.NET 5.0 we decided to remove the <var>Document.Write(HttpResponse)</var> because it required the client to add a reference to System.Web even if this overload was not used. For example in a console or WPF application. The compiler needed a reference to System.Web to select the right overload at compile time.

If you are upgrading from 4.0 to 5.0, you may get a compile error because of this. The following extension method solves this:

using TallComponents.PDF;
using System.Web;

namespace YourCompany.PDF
{
  public static class DocumentExtensions
  {
    public static void Write(this Document document, HttpResponse response)
    {
      if (null == response) throw new ArgumentNullException(nameof(response));
      if (!response.IsClientConnected) throw new ArgumentException("Client is not connected.", nameof(response));
         
      response.Clear();
      response.ContentType = "application/pdf";
      response.ContentEncoding = new System.Text.UTF8Encoding();     

      document.Write(response.OutputStream);   

      // Flush requires full trust
      response.Flush(); // make sure all data is sent.
        
      // preventing further writing to the stream should be done by calling HttpApplication.CompleteRequest.
      // do not call response.End(), this will throw a ThreadAbortException.
      // do not call response.Close(), this will break Chrome support
    }
  }   
}

Usage

Document document;
HttpResponse response;

document.Write(response);