Criando e manipulando arquivos PDF com a biblioteca iTextSharp em C#

Veja neste artigo como criar e trabalhar com arquivos PDF utilizando iTextSharp, que é uma biblioteca free oferecida pela Microsoft na linguagem C#.

Os arquivos PDF são quase sempre muito úteis para programadores, pois existem vários tipos de problemas que podem ser facilmente solucionados com a utilização deles dentro dos códigos de programação dos softwares.

Imagine a seguinte situação: o desenvolvedor cria um software para uma empresa específica e o mesmo precisa que o software gere um contrato de compra e venda para a conclusão da negociação. Este problema pode ser facilmente resolvido com a utilização de arquivos PDF, assim, é possível criar um arquivo PDF com o conteúdo padrão desde contrato, e o desenvolvedor pode alterar apenas os dados específicos daquela venda e cliente com o auxílio de variáveis para atualizar os dados e imprimi-los para este cliente.

Uma grande vantagem dos arquivos PDF é que, uma vez criados, eles podem apenas ser lidos e não podem ser editados. Por questões de segurança, contratos de vendas e relatórios importantes, por exemplo, precisam de confiança de que ninguém os alterou.

Biblioteca iTextSharp

A biblioteca ItextSharp foi criada pela Microsoft para ser utilizada no Visual Studio, preferencialmente na linguagem C#, mas também é aceita em outras linguagens, como Visual Basic, e outros.

Essa biblioteca é utilizada para trabalhar com arquivos PDF, e o seu diferencial das demais é a facilidade e praticidade de utilização, pois com ela podemos criar arquivos PDF de forma dinâmica e com textos formatados.

Para utilizar essa biblioteca em nosso projeto precisamos referenciá-la e, para isso, precisamos abrir, dentro do nosso projeto, o local onde se busca as bibliotecas.

Vamos então criar um projeto no Visual Studio, e do lado direito do mesmo, aonde ficam todas as bibliotecas, na opção “references”, clicaremos com o botão direito do mouse e escolheremos a opção “Manage NuGet Packages...”, como nos mostra a Figura 1.

Figura 1. Abrindo local de busca de bibliotecas

Feito isso, abrirá uma página que usamos para referenciar bibliotecas, então clicaremos no menu do canto esquerdo na opção “online”, e após, digitaremos no campo de busca o nome da biblioteca “iTextSharp”, que fica localizado no canto superior direito. Após aparecer o resultado da nossa busca, escolheremos a versão mais recente (geralmente é a primeira opção da busca), que até o momento de escrita desse artigo é a versão 5.5.6. Clique na opção “install”, como nos mostra a Figura 2.

Figura 2. Instalando e referenciando a Biblioteca iTextSharp

Criando um arquivo PDF

Agora precisamos declarar as bibliotecas que usaremos em nosso projeto: iTextSharp e a IO. Essa última é a biblioteca utilizada para entrada e saída de arquivos, pois como trabalharemos com arquivos PDF, necessitaremos dela. Use a codificação presente na Listagem 1.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //ESSAS SAO AS BIBLIOTECAS QUE DEVEREMOS ADICIONAR EM NOSSO PROJETO using System.IO;// A BIBLIOTECA DE ENTRADA E SAIDA DE ARQUIVOS using iTextSharp;//E A BIBLIOTECA ITEXTSHARP E SUAS EXTENÇÕES using iTextSharp.text;//ESTENSAO 1 (TEXT) using iTextSharp.text.pdf;//ESTENSAO 2 (PDF) namespace iTextSharp_PDF { class Program { static void Main(string[] args) { } } }
Listagem 1. Declarando bibliotecas necessárias

Feito isso, vamos declarar uma variável com o nome “doc” do tipo “Document” e inicializá-la, passando como parâmetro o código “PageSize.”, que é o tamanho da folha utilizada, por exemplo, A3, A4, etc..

Devemos também especificar as margens do nosso documento, na seguinte sequência: esquerdo, em cima, direito e em baixo. Usamos o código “doc.SetMargins ” para passar o parâmetro as margens que desejamos na sequência.

Vamos criar uma variável do tipo “string” com o nome ”caminho” e nela vamos atribuir o caminho (endereço físico) e o nome do arquivo que desejarmos. Após isso, criaremos uma variável com o nome “writer” do tipo “PdfWriter”, inicializando-a com o método “GetInstance”, passando como parâmetro a variável com o nome “doc” do tipo “Document” que criamos e a variável com o nome “caminho”. Veja tudo isso na Listagem 2.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //ESSAS SAO AS BIBLIOTECAS QUE DEVEREMOS ADICIONAR EM NOSSO PROJETO using System.IO;// A BIBLIOTECA DE ENTRADA E SAIDA DE ARQUIVOS using iTextSharp;//E A BIBLIOTECA ITEXTSHARP E SUAS EXTENÇÕES using iTextSharp.text;//ESTENSAO 1 (TEXT) using iTextSharp.text.pdf;//ESTENSAO 2 (PDF) namespace iTextSharp_PDF { class Program { static void Main(string[] args) { Document doc = new Document(PageSize.A4);//criando e estipulando o tipo da folha usada doc.SetMargins(40, 40, 40, 80);//estibulando o espaçamento das margens que queremos doc.AddCreationDate();//adicionando as configuracoes //caminho onde sera criado o pdf + nome desejado //OBS: o nome sempre deve ser terminado com .pdf string caminho = @"C:\Users\anton\Desktop\Projetos\projeto Borsari&Borsari\x\Relatorios\" + "CONTRATO.pdf"; //criando o arquivo pdf embranco, passando como parametro a variavel //doc criada acima e a variavel caminho //tambem criada acima. PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(caminho, FileMode.Create)); } } }
Listagem 2. Criando um arquivo PDF

Pronto, criamos nosso arquivo PDF, agora vamos escrever nele.

Escrevendo no arquivo PDF

Primeiramente, vamos abrir o arquivo PDF utilizando a variável do tipo “Document” já criada, junto com o método “Open()” desta variável.

Feito isso, o arquivo estará aberto e pronto para ser escrito, então criaremos uma variável com o nome “paragrafo” do tipo “Paragraph”, que utilizaremos para escrever. Inicializaremos ela passado como parâmetro uma variável do tipo string vazia e uma variável do tipo “Font”, que contém o tipo de letra e o tamanho da fonte.

Vamos atribuir ao nosso documento, na opção “Alignment”, da variável do tipo ”Paragraph” já criada, constando o tipo de espaçamento desejado (por exemplo: ALIGN_JUSTIFIED, que é o alinhamento justificado).

Para escrever basta usarmos a rotina “Add” da variável do tipo “Paragraph”, passando como parâmetro o conjunto de caracteres que desejamos escrever. Depois basta adicionarmos essa mesma variável a variável com o nome “doc” do tipo “Document” utilizando o método “Add” dela. Veja tudo isso sendo feito na Listagem 3.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //ESSAS SAO AS BIBLIOTECAS QUE DEVEREMOS ADICIONAR EM NOSSO PROJETO using System.IO;// A BIBLIOTECA DE ENTRADA E SAIDA DE ARQUIVOS using iTextSharp;//E A BIBLIOTECA ITEXTSHARP E SUAS EXTENÇÕES using iTextSharp.text;//ESTENSAO 1 (TEXT) using iTextSharp.text.pdf;//ESTENSAO 2 (PDF) namespace iTextSharp_PDF { class Program { static void Main(string[] args) { Document doc = new Document(PageSize.A4);//criando e estipulando o tipo da folha usada doc.SetMargins(40, 40, 40, 80);//estibulando o espaçamento das margens que queremos doc.AddCreationDate();//adicionando as configuracoes //caminho onde sera criado o pdf + nome desejado //OBS: o nome sempre deve ser terminado com .pdf string caminho = @"C:\Users\anton\Desktop\Projetos\projeto Borsari&Borsari\x\Relatorios\" + "xxx.pdf"; //criando o arquivo pdf embranco, passando como parametro a variavel doc criada acima e a variavel caminho //tambem criada acima. PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(caminho, FileMode.Create)); doc.Open(); //criando uma string vazia string dados=""; //criando a variavel para paragrafo Paragraph paragrafo = new Paragraph(dados, new Font(Font.NORMAL, 14)); //etipulando o alinhamneto paragrafo.Alignment = Element.ALIGN_JUSTIFIED; //Alinhamento Justificado //adicioando texto paragrafo.Add("TESTE TESTE TESTE"); //acidionado paragrafo ao documento doc.Add(paragrafo); //fechando documento para que seja salva as alteraçoes. doc.Close(); } } }
Listagem 3. Criando e escrevendo um arquivo texto

Veja o arquivo pdf de teste criado com os códigos da Listagem 3 na Figura 3.

Figura 3. Arquivo PDF criado com os códigos da Listagem 3

Formatação

Vamos falar um pouco sobre como será feita a formatação dos arquivos texto utilizando a biblioteca iTextSharp.

Para deixar a letra em negrito basta, antes de adicionar o conjunto de caracteres que será impresso no arquivo, na variável do tipo “Paragraph”, uma variável do tipo “ Font”, inicializando-a com “(int)System.Drawing.FontStyle.Bold”, como mostra a Listagem 4.

//criando a variavel para paragrafo Paragraph paragrafo = new Paragraph("", new Font(Font.NORMAL, 14)); //etipulando o alinhamneto paragrafo.Alignment = Element.ALIGN_JUSTIFIED; //Alinhamento Justificado //adicioando texto //AQUI ONDE VAMOS ADICIONAR A VARIAVEL DO TIPO "Font" paragrafo.Font = new Font(Font.NORMAL, 14, (int)System.Drawing.FontStyle.Bold); paragrafo.Add("TESTE TESTE TESTE"); //acidionado paragrafo ao documento doc.Add(paragrafo); //fechando documento para que seja salva as alteraçoes.
Listagem 4. Escrita com letras em negrito

Para deixar a letra em Itálico basta, antes de adicionar o conjunto de caracteres que será impresso no arquivo, adicionarmos a variável do tipo “Paragraph” uma variável do tipo “ Font”, inicializando-a com “(int)System.Drawing.FontStyle.Italic”, como mostra a Listagem 5.

//criando a variavel para paragrafo Paragraph paragrafo = new Paragraph("", new Font(Font.NORMAL, 14)); //etipulando o alinhamneto paragrafo.Alignment = Element.ALIGN_JUSTIFIED; //Alinhamento Justificado //adicioando texto //AQUI ONDE VAMOS ADICIONAR A VARIAVEL DO TIPO "Font" paragrafo.Font = new Font(Font.NORMAL, 14, (int)System.Drawing.FontStyle.Italic); paragrafo.Add("TESTE TESTE TESTE"); //acidionado paragrafo ao documento doc.Add(paragrafo); //fechando documento para que seja salva as alteraçoes.
Listagem 5. Escrita com letras em Itálico

Para mesclar letras com negrito e sem negrito no mesmo parágrafo basta adicionar uma variável do tipo “Font” inicializada com “(int)System.Drawing.FontStyle.Bold)” antes de adicionar a cadeia de caracteres que deseja colocar em negrito, e após, adicionaremos novamente uma variável do tipo “Font”, só que desta vez inicializada com “(int)System.Drawing.FontStyle.Regular)”, que é o tipo de escrita normal, e ai então, adicionar a cadeia de caracteres que desejamos que esteja sem negrito, como mostra a Listagem 6.

//criando a variavel para paragrafo Paragraph paragrafo = new Paragraph("", new Font(Font.NORMAL, 14)); //etipulando o alinhamneto paragrafo.Alignment = Element.ALIGN_JUSTIFIED; //Alinhamento Justificado //adicioando texto //AQUI ONDE VAMOS ADICIONAR A VARIAVEL DO TIPO "Font" paragrafo.Font = new Font(Font.NORMAL,14, (int)System.Drawing.FontStyle.Bold); paragrafo.Add("NEGRITO "); //acidionado paragrafo ao documento //AQUI ONDE VAMOS ADICIONAR A VARIAVEL DO TIPO "Font" paragrafo.Font = new Font(Font.NORMAL,14, (int)System.Drawing.FontStyle.Regular); paragrafo.Add("sem negrito"); //acidionado paragrafo ao documento doc.Add(paragrafo); //fechando documento para que seja salva as alteraçoes.
Listagem 6. Intercalando entre escrita em negrito e escrita normal

Veja na Figura 4 o resultado da Listagem 6, que mescla escritas com negrito e sem negrito no mesmo parágrafo.

Figura 4. Resultado da Listagem 6

Uma grande vantagem do iTextSharp para gerar arquivos pdf em comparação com outras bibliotecas que são utilizadas para a criação de arquivos PDF é que ele efetua quebra de linhas e quebra de páginas de forma automática, assim podemos inserir um grande parágrafo de uma única vez.

Para alterar o alinhamento do parágrafo, basta colocarmos, antes de adicionarmos a cadeia de caracteres que desejamos inserir no arquivo PDF, a variável “paragrafo.Alignment” recebendo o tipo de alinhamento desejado no parágrafo, que pode ser: justificado (Element.ALIGN_JUSTIFIED), centralizado (Element.ALIGN_CENTER), à esquerda (Element.ALIGN_LEFT) e à direita (Element.ALIGN_RIGHT).

Após criar o arquivo PDF, basta utilizarmos o método da biblioteca IO “System.Diagnostics.Process.Start”, passando como parâmetro o caminho do arquivo (endereço físico) e o nome do arquivo.

Veja na Listagem 7 um parágrafo sendo colocado de uma única vez, realizando quebra de linha e de página automaticamente, com alinhamento justificado e abrindo o arquivo automaticamente após criado.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using iTextSharp; using iTextSharp.text; using iTextSharp.text.pdf; namespace PDFiTextSharp { class Class1 { public void teste() { Document doc = new Document(PageSize.A4);//criando e estipulando o tipo da folha usada doc.SetMargins(40, 40, 40, 80);//estibulando o espaçamento das margens que queremos doc.AddCreationDate();//adicionando as configuracoes //caminho onde sera criado o pdf + nome desejado //OBS: o nome sempre deve ser terminado com .pdf string caminho = @"C:\Users\anton\Desktop" + "xxx.pdf"; //criando o arquivo pdf embranco, passando como parametro a variavel doc criada acima e a variavel caminho //tambem criada acima. PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(caminho, FileMode.Create)); doc.Open(); //criando a variavel para paragrafo Paragraph paragrafo = new Paragraph("", new Font(Font.NORMAL, 14)); //etipulando o alinhamneto paragrafo.Alignment = Element.ALIGN_JUSTIFIED; //Alinhamento Justificado //adicioando texto //AQUI ONDE VAMOS ADICIONAR A VARIAVEL DO TIPO "Font" paragrafo.Font = new Font(Font.NORMAL,14, (int)System.Drawing.FontStyle.Regular); string texto = "O PDF (Portable Document Format) é um formato de " +"arquivo, desenvolvido pela Adobe Systems em 1993, " +"para representar documentos de maneira independente do aplicativo," +" do hardware e do sistema operacional usados para " +"criá-los. Um arquivo PDF pode descrever documentos que contenham texto, " +"gráficos e imagens num formato independente " +"de dispositivo e resolução. +"O PDF é um padrão aberto, e qualquer pessoa pode escrever aplicativos que " +"leiam ou escrevam neste padrão. " +"Há aplicativos gratuitos para Microsoft Windows, Apple Macintosh e Linux, " +"alguns deles distribuídos pela própria " +"Adobe e há diversos aplicativos sob licenças livres. " +"PDF pode ser traduzido para português como formato de documento portátil. " +"É possível gerar arquivos em PDF a partir de vários formatos de documentos, " +"como ODF (do LibreOffice) ou DOC (do Microsoft Word) e imagens, como Jpeg e PNG. " +"No entanto, a qualidade do foco " +"gerado, no que se refere à exibição do conteúdo, pode variar de acordo com o " +"formato do arquivo matriz, a partir do " +"qual o PDF foi criado. Portanto, a escolha do formato mais adequado pode ser um " +"esforço válido, principalmente em " +"se tratando de PDFs que contêm informações institucionais ou corporativas." +"Um bom método para conseguir o máximo de qualidade é gerar PDFs diretamente " +"dos programas gráficos onde as peças " +"foram produzidas (ocos), por exemplo, Inkscape, Gimp, Scribus, Photoshop " +"(também da Adobe), Illustrator, Freehand " +"ou CorelDraw. Se o usuário não tem esses programas ou não tem os arquivos fontes" +" do material em questão (SVG, XCF, " +"SLA, PSD, AI, FH* ou CDR), segue a lista com os formatos mais populares e que " +"permitem alta qualidade ao serem " +"convertidos para PDF:"; //adicionando texto paragrafo.Add(texto); //adicionando escrita no arquivo. doc.Add(paragrafo); //fechando documento para que seja salva as alteraçoes. //adicionando outro paragrafo com o texto, para que seja feita a quebra de pagina. paragrafo = new Paragraph("", new Font(Font.NORMAL, 14)); paragrafo.Alignment = Element.ALIGN_JUSTIFIED; //Alinhamento Justificado paragrafo.Font = new Font(Font.NORMAL, 14, (int)System.Drawing.FontStyle.Regular); paragrafo.Add(texto); doc.Add(paragrafo); doc.Close(); //Abrindo o arquivo após cria-lo. System.Diagnostics.Process.Start(caminho); } } }
Listagem 7. Colocando um texto em um PDF de uma única vez

Veja o resultado da Listagem 7, que adiciona dois parágrafos de uma única vez em um arquivo PDF, efetuando quebra de linhas e de páginas automaticamente na Figura 5.

Figura 5. Texto com quebra de linha e pagina automático, criado com a Listagem 7

Espero que tenham gostado desse artigo e até a próxima.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados