Baixe o binário e adicione em seu aplicativo (pasta Bin). Utilize o código abaixo para fazer o processo de conversão e exibição do PDF na tela:
using System;
using System.Web;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html.simpleparser;
// Captura ou atribui o HTML a ser convertido - no caso estou baixando de uma URL
string html = new System.Net.WebClient().DownloadString("http://thiagomarcal.blogspot.com/");
//string html = "Convertendo o HTML em PDF - Thiago Marçal";
// Cria o documento aplicando o tamanho e margens
Document documento = new Document(PageSize.A4, 80, 50, 30, 65);
// Memory Stream para ser usado na conversão e emissão
MemoryStream ms = new MemoryStream();
// Inicializa o gravador
PdfWriter writer = PdfWriter.GetInstance(documento, ms);
// Lê o HTML e atribui
StringReader conteudo = new StringReader(html);
// Objeto de conversão do HTML
HTMLWorker objeto = new HTMLWorker(documento);
// Abre o documento
documento.Open();
// Aplica o parser para análise de conversão
// Geralmente aqui ocasiona muitos erros - irei explicar no post
objeto.Parse(conteudo);
// Fecha o documento
documento.Close();
// Força o download do PDF gerado - se desejável você pode salvar em disco também
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=Documento_HTML.pdf");
Response.ContentType = "application/pdf";
Response.Buffer = true;
Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length);
Response.OutputStream.Flush();
Response.End();
Veja que a variável html eu atribuo o HTML que desejo converter. O seu conteúdo pode vir externamente ou posso atribuir um valor desejado.
Vamos aos problemas! Muitos vão encontrar erro quando o objeto estiver fazendo o parser do HTML e muitos irão falhar. Acontece que, devido à complexidade do HTML que estiver trabalhando, o componente não consegue converter para o formato adequado ao que ele usa internamente. Por exemplo, o TABLE do HTML que usamos é "meio" diferente do TABLE que o componente usa. Esse é um dos exemplos... Então prepara-se para fazer um tratamento adequado antes de fazer o parser. Eu sugiro o seguinte:
- Use expressão regular para validar seu HTML;
- Use expressão regular e/ou o HtmlAgilityPack para remover os JavaScripts;
- O conteúdo a ser convertido deve ser apenas o que está dentro do body;
- Imagens, CSS e links devem conter o caminho completo (exemplo: http://thiagomarcal.blogspot.com/imgs/logo.png ao invés de ../imgs/logo.png), etc.
Ou seja, quanto mais simplificado for seu HTML mais rápido e fácil será convertido em PDF. Uma observação bem clara é: nem sempre ficará 100% que o esperado.
Uma dica que pode ser usada (e um armengue, claro!) é fazer o seguinte:
- Gere um thumb (imagem) do HTML que deseja converter (saiba como gerar um thumb de um HTML nesse post) e salve em disco;
- Atribua a variável html com o conteúdo "<img src="http://thiagomarcal.blogspot.com/imgs/thumb.png" />";
- Coloque o width e height na tag IMG o tamanho desejado (pode ser até o tamanho do papel).
Pronto! O parser irá identificar apenas uma imagem no HTML e gerará o PDF com ela. Mole-mole...