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.
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.
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)
{
}
}
}
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));
}
}
}
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();
}
}
}
Veja o arquivo pdf de teste criado com os códigos da Listagem 3 na Figura 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.
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.
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.
Veja na Figura 4 o resultado da Listagem 6, que mescla escritas com negrito e sem negrito no mesmo parágrafo.
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);
}
}
}
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.
Espero que tenham gostado desse artigo e até a próxima.