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.

Abrindo local de busca de bibliotecas
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.

Instalando e referenciando a Biblioteca iTextSharp
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.

Arquivo PDF criado com os códigos da Listagem 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.

Resultado da Listagem 6
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.

Texto com quebra de linha e pagina automático, criado com a Listagem 7
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.