Generate PDF from HTML Using C#.Net
Click here to download the required dlls for generating
PDF.
Generate PDF from HTML
First, set a reference in your project to the 3 DLL's that Pdfizer uses. Here are
the 3 dll names to set a reference to:
-
ICSharpCode.SharpZipLib.dll (This component is used to parse the
HTML)
-
itextsharp.dll (This component is used by Pdfizer to create the
PDF document)
-
Pdfizer.dll (This is the main component with the HtmlToPdf object
that executes the conversion operations).
Now we can add some code to use this component. Here is the code to generate a PDF
from some HTML specified:
// set a path to where you want to write the PDF
to.
string sPathToWritePdfTo
=
@"C:\your_pdf_name.pdf";
// build some HTML text to write as a PDF. You
could also read this HTML from a file
or other means.
// NOTE: This component
doesn't understand CSS or other newer
style HTML so you will need to use depricated
// HTML formatting such as the <font> tag to make it look correct.
System.Text.StringBuilder sbHtml =
new
System.Text.StringBuilder();
sbHtml.Append(
"<html>");
sbHtml.Append(
"<body>");
sbHtml.Append(
"<font size='14'>www.venkateswarlu.co.in</font>");
sbHtml.Append(
"<br />");
sbHtml.Append(
"This is my document
text");
sbHtml.Append(
"</body>");
sbHtml.Append(
"</html>");
// create file stream to PDF file to write to
using (System.IO.Stream stream
=
new System.IO.FileStream (sPathToWritePdfTo,
System.IO.FileMode.OpenOrCreate))
{
// create new
instance of Pdfizer
Pdfizer.HtmlToPdfConverter htmlToPdf =
new Pdfizer.HtmlToPdfConverter();
// open
stream to write Pdf to to
htmlToPdf.Open(stream);
// write the HTML to the component
htmlToPdf.Run(sbHtml.ToString());
// close the write operation and complete the PDF
file
htmlToPdf.Close();
}
This component also supports PDF Chapters. You could add a single line of code right
before the Run() method to make the HTML specified a single chapter like this:
// open stream to write Pdf to to
htmlToPdf.Open(stream);
// add a chapter for this HTML
htmlToPdf.AddChapter("My Chapter Title 1");
// write the HTML to the component
htmlToPdf.Run(sbHtml.ToString());
Repeat the AddChapter() and Run() methods for each chapter you want to add and then
Close() to commit it to the PDF.
Download PDF using ASP.NET
Once the PDF is created, you can dynamically stream it back to the client browser
in ASP.NET on the fly as a file download using code like this:
// clear the http response so nothing else is in
the stream so we can just isolate the file bits.
HttpContext.Current.Response.Clear();
// add the HTTP header to tell the browser to accept
this as a file. Also, the friendlypdfname.pdf is the name
// of the PDF as you want it to appear to the user (regardless of what it is named
in your file system).
HttpContext.Current.Response.AddHeader("content-disposition",
string.Format("attachment;
filename={0}", "friendlypdfname.pdf"));
// tell the browser what type of file this is so
it can have a mime type associated with it.
HttpContext.Current.Response.ContentType
= "application/pdf";
// pass the path that you wrote the file to on
your file system as the parameter to WriteFile()
HttpContext.Current.Response.WriteFile(sPathToWritePdfTo);
// end the response and commit the file to the
stream
HttpContext.Current.Response.End();
You could put this code in an OnClick() button event or other means that would then
stream this new PDF down to your client browser.