Gerando arquivos PDF com .NET e iTextSharp

Olá pessoal!

Todos já tiveram alguma necessidade com PDF, seja para ler ou gerar arquivos através de aplicações C#.
Neste post vou demonstrar como gerar arquivos PDFs utilizando o famoso iTextSharp, além de uma exceção com a qual você pode se deparar. Não vou entrar muito em detalhes visto que a partir do código é possível obter uma idéia completa do que podemos fazer.

A primeira coisa que você deve fazer é baixar o assembly neste endereço e referenciá-lo no seu projeto. Alguns conceitos básicos são muito importantes para a geração de PDF:

1. PdfWriter
Todas as ações para gerar um PDF serão realizadas através de um objeto da classe PdfWriter.

2. Open()
Você deve abrir o documento para começar a editar.

3. writer.Add()
E deve adicionar elementos através do método Add do objeto PdfWriter.

Abaixo um exemplo direto em código para testes:

var retangulo = new Rectangle(765, 765);
var documento = new Document(retangulo); string nomeDoArquivo = Guid.NewGuid().ToString(); var writer = PdfWriter.GetInstance(documento, new FileStream(“…”, FileMode.Create)); documento.Open(); var rodape = new Rectangle(765, 85); rodape.BackgroundColor = new BaseColor(242, 242, 242); documento.Add(rodape); var imagemDoTopo = Image.GetInstance(“…”); imagemDoTopo.SetAbsolutePosition(0, 653); documento.Add(imagem); // Leitura de uma imagem por Stream – Não tem ligação direta com o PDF try { FileStream imagemAmbiente = System.IO.File.Create(“…”); byte[] buffer = new byte[8192]; int read; while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) { imagemAmbiente.Write(buffer, 0, read); } imagemAmbiente.Close(); stream.Close();
} catch (Exception ex) {
logger.Inserir(ex.Message, Nbr.Framework.Log.ValueObjects.TipoLog.Erro);
throw; } var imagemSimulador = Image.GetInstance(“…”); imagemSimulador.SetAbsolutePosition(0, 130); documento.Add(imagemSimulador); var produto = new ProdutosRepository().ObterProdutoPeloGuid(codigoProduto); PdfContentByte cb = writer.DirectContent; BaseFont nomeProduto = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, false, false); cb.BeginText(); cb.SetFontAndSize(nomeProduto, 14); cb.SetColorFill(new BaseColor(238, 42, 115)); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, produto.Nome, 50, 50, 0); cb.EndText(); BaseFont descricaoProduto = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, false, false); cb.BeginText(); cb.SetFontAndSize(descricaoProduto, 12); cb.SetColorFill(new BaseColor(51, 51, 51)); cb.ShowTextAligned(PdfContentByte.ALIGN_LEFT, produto.Descricao, 50, 35, 0); cb.EndText(); documento.Close();

Exceção possível

Em alguns casos você pode se deparar com a exceção “That assembly does not allow partially trusted callers”. Neste caso, basta baixar o código fonte do itextsharp no endereço já informado e recompilar o assembly com a instrução abaixo no AssemblyInfo.cs:

[assembly: AllowPartiallyTrustedCallers]

Abraços!

Published Tuesday, January 19, 2010 4:01 PM by anobre
Filed under:

Comments

# re: Gerando arquivos PDF com .NET e iTextSharp

Wednesday, September 22, 2010 3:29 PM by Besaleel

Boa tarde li seu post, mas achei ótimo não sabia da existência do iTextSharp, eu acabava utilizando um componete pago.

Bem, sabe onde encontro exemplos do uso do iTextSharp C#? Se souber por favor me encaminhe os links. obrigado.

# re: Gerando arquivos PDF com .NET e iTextSharp

Friday, December 3, 2010 8:02 AM by Leandro Figueira

O link esta no POST

# re: Gerando arquivos PDF com .NET e iTextSharp

Wednesday, January 12, 2011 4:06 AM by Claudinei Catarino

Muito bom o post. Minhas dúvidas são:

a)Posso distribuir a iTextSharp.dll em aplicação comercial sem ferir os ditreitos autorais ou só é para uso pessoal?

b) Como colocar um gráfico gerado no objeto chart em arquivo PDF - itextshap?

# re: Gerando arquivos PDF com .NET e iTextSharp

Thursday, October 27, 2011 9:21 AM by Gabriel RB

Muito bom.

Ótima dica.