ASP .NET - Gerando arquivos PDF na web


O objetivo deste artigo é mostrar como criar arquivos em aplicações ASP .NET usando a linguagem VB .NET.

Para realizar esta tarefa vamos precisar de uma ajuda. Estou me referindo a biblioteca iTextSharp que é gratuita e pode ser obtida no seguinte endereço: http://sourceforge.net/projects/itextsharp/.

Então primeiro faça o download da library para poder referenciá-la em seu projeto web. Eu fiz o download da library e a descompactei em: C:\Program Files\itextsharp-5.0.4-dll

Para demonstrar como usar este recurso eu vou usar o Visual Web Developer 2008 Express Edition e criar um novo web site (New Web Site) usando o template ASP .NET Web Site chamado ASPNET_PDF usando a linguagem Visual Basic.(poderíamos ter usado a linguagem C#)

Agora vamos referencia a library iTextSharp em nosso projeto:

No menu WebSite selecione Add Reference e em seguida clique na aba Browse da janela Add Reference e localize o local onde você descompactou a biblioteca iTextSharp, selecionando o arquivo itextsharp.dll e clicando em OK;

Agora vamos definir o seguinte leiaute no arquivo Default.aspx :

Através do menu Table -> Insert Table Inclua uma tabela com 5 linhas e 2 colunas e a seguir inclua os seguinte controles na tabela:

Agora no arquivo code-behind Default.aspx.vb vamos definir os namespaces usados no projeto:

Imports System
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf

No evento Click do botão de comando btnGerarPDF vamos fazer a chamada a rotina que iremos criar para gerar o arquivo PDF:

Protected Sub btnGerarPDF_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGerarPDF.Click
       gerarPDF(txtTextoPDF.Text, txtNomeArquivoPDF.Text)
End Sub

A rotina gerarPDF() esta usando o texto a ser gerado no arquivo PDF e o nome do arquivo pdf que será gerado.

A rotina gerarPDF() possui o seguinte código:

Private Sub gerarPDF(ByVal texto As String, ByVal arquivo As String)

Dim hoje As DateTime = DateTime.Now

If (arquivo.Contains(".pdf")) Then
     arquivo = arquivo.Replace(".pdf", "")
End If

Dim arquivoPDF = arquivo
& hoje.Millisecond & ".pdf"

Dim doc As Document = New Document
PdfWriter.GetInstance(doc, New FileStream(Request.PhysicalApplicationPath + "\"
& arquivoPDF, FileMode.Create))
doc.Open()
doc.Add(New Paragraph(texto))
doc.Close()
Response.Redirect("~/"
& arquivoPDF)

End Sub

Vamos entender o código acima:

A primeira parte do código eu estou verificando se o nome do arquivo informado possui a extensão .pdf; neste caso eu removo a extensão.

A seguir eu monto o nome do arquivo adicionando os milisegundos da data obtida para dessa forma ter um nome único de arquivo a cada geração.

A seguir é que entra a criação do arquivo PDF:

- criamos uma instância de um documento através da classe Document;

- criamos um arquivo PDF usando o nome gerado usando a propriedade Request.PhysicalApplicationPath que obtém o caminho do Sistema de arquivos físico do diretório raiz do aplicativo de servidor atualmente em execução. Dessa forma os arquivos serão gerados na raiz da aplicação;

- Abrimos o documento e incluímos o texto informado e depois fechamos o documento;

- Para exibir o documento usamos o Response.Redirect;

Na figura a seguir vemos o resultado do arquivo PDF gerado sendo exibido:

Viu como é simples gerar arquivos PDF em aplicações web usando o iTextSharp. É claro que existem outros recursos que não foram mostrados, através dos quais podemos gerar documentos mais complexos, mas eu pretendo mostrar isso em outro artigo.

Até o próximo artigo ASP .NET.

Pegue o projeto completo aqui: ASPNET_PDF.zip

Eu sei é apenas ASP .NET, mas eu gosto...

Referências:

José Carlos Macoratti