Wednesday, April 24, 2013

HTML to PDF Conversion

Html to Pdf conversion in asp.net c# i searched on google html to pdf conversion, but i found a very few and most of them are not working properly. so i decided to develop a very small code for conversion. iTextSharp utility gives us control to perform most of the operations on pdf files.

1- download ITextSharp.dll

2- add itextsharp.dll reference in your project

3- include following libraries in c# code

Code:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using iTextSharp.text;
using iTextSharp.text.html;
using iTextSharp.text.pdf;
using iTextSharp.text.html.simpleparser;
using System.IO;
using System.util;
using System.Net;
using System.Xml;

4- Generate pdf file from html
Code:
protected void btn_submit_Click(object sender, EventArgs e)
    {
        using (StreamReader reader = new StreamReader(Server.MapPath("~") + "/App_Data/test.html"))
        {
            String line = reader.ReadToEnd();
            Text2PDF(line);
        }
    }

    protected void Text2PDF(string PDFText)
    {
        //HttpContext context = HttpContext.Current;
        StringReader reader = new StringReader(PDFText);

        //Create PDF document
        Document document = new Document(PageSize.A4);
        HTMLWorker parser = new HTMLWorker(document);

        string PDF_FileName = Server.MapPath("~") + "/App_Data/PDF_File.pdf";
        PdfWriter.GetInstance(document, new FileStream(PDF_FileName, FileMode.Create));
        document.Open();

        try
        {
            parser.Parse(reader);
        }
        catch (Exception ex)
        {
            //Display parser errors in PDF.
            Paragraph paragraph = new Paragraph("Error!" + ex.Message);
            Chunk text = paragraph.Chunks[0] as Chunk;
            if (text != null)
            {
                text.Font.Color = BaseColor.RED;
            }
            document.Add(paragraph);
        }
        finally
        {
            document.Close();
            DownLoadPdf(PDF_FileName);
        }
    }

in above code, my html file already exist in app_data, you can modify your code either by uploading file or by a fixed location.
in finally the function DownLoadPdf(PDF_FileName) download the newly generated pdf to client.

5- download pdf file
Code:
private void DownLoadPdf(string PDF_FileName)
    {
        WebClient client = new WebClient();
        Byte[] buffer = client.DownloadData(PDF_FileName);
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-length", buffer.Length.ToString());
        Response.BinaryWrite(buffer);
    }

the code is really simple, but it does not support external css and images.

this code successfully parse the red color and bold property on below line
Code:
<font color='red'><b>www.dotnetobject.com</b></font>

No comments:

Post a Comment