[OFF] ITEXTSHARP

ACCIOLLY 11/03/2016 09:42:00
#458982
Bom dia galera!
Em um post anterior de um colega que perguntou sobre problemas relacionados ao Crystal, eu dei uma sugestão pra ele estudar sobre o iTextSharp. Mas para aqueles que não sabem o que é e como utiliza-lo vou disponibilizar nesse post um pequeno exemplo. Em breve estarei disponibilizando também para os artigos (se já não houver!).

Citação:

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.
Fonte: http://www.devmedia.com.br/criando-e-manipulando-arquivos-pdf-com-a-biblioteca-itextsharp-em-c/33392



Para adicionar essa biblioteca nas referencias, clique com o botão direito em References depois vá em Manage NuGet Packages. Na aba Browse digite no campo de pesquisa iTextSharp, espere procurar (Tem que estar online!) e instale clicando no botão ao lado como uma seta pra baixo de download. Geralmente é o primeiro pacote que aparece na pesquisa! mas em todo caso estamos na versão 5.5.8

A criação de relatórios no começo não é muito produtiva, mas com o tempo agente pega o jeito! A vantagem de se utilizar essa biblioteca é de não depender muito de pacotes de programas de relatórios como o Crystal como o KERPLUNK um dia disse! Ele consegue fazer em HTML! Seria muito interessante mostrar isso em um de seus vídeos não?! rsrsrsrs

Abaixo tem a codificação para geração de um pdf. Utilizarei como exemplo uma pequena aplicação que estou fazendo pra um amigo meu que é católico e me pediu fazer um controle dos dízimos e ofertas. Acima vocês podem ver o print de como é gerado esse relatório.

usar as classes
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using iTextSharp;
using iTextSharp.text;
using iTextSharp.text.pdf;
using System.Windows.Forms;
using System.Data;


E a codificação

Document doc;

public void DizimoData(string caminhoDoc, DateTime inicio, DateTime fim)
{
doc = new Document(PageSize.A4);
doc.SetMargins(40, 40, 40, 80);
doc.AddCreationDate();

//SE O DOCUMENTO JÁ EXISTE APAGA ELE
if (File.Exists(caminhoDoc))
{
File.Delete(caminhoDoc);

}

//CRIA O DOCUMENTO
PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(caminhoDoc, FileMode.Create));

//PEGA AS DATAS FORNECIDAS COMO PARMETROS E CONVERTE PARA O FORMATO DO BANCO ONDE SERÁ REALIZADO O SELECT
string _inicio = inicio.ToString([Ô]MM/dd/yyyy[Ô]);
string _fim = fim.ToString([Ô]MM/dd/yyyy[Ô]);

//CRIA UMA DATATABLE E CARREGA NELA AS INFORMAÇÕES DO BANCO
DataTable dados = Program.conn.Pesquisar([Ô]SELECT dizimo.id_Familia,dizimo.data_Dizimo,dizimo.valor_Dizimo,[Ô]+
[Ô](SELECT (SELECT pessoa.nome_Pessoa FROM pessoa WHERE pessoa.id_Pessoa = familia.id_Responsavel) [Ô]+
[Ô]FROM familia WHERE familia.id_Familia = dizimo.id_Familia) AS nome_Pessoa FROM dizimo [Ô]+
[Ô]WHERE dizimo.data_Dizimo BETWEEN #[Ô]+_inicio+[Ô]# AND #[Ô]+_fim+[Ô]#[Ô]);

//CRIA UMA VARIAVEL COM O VALOR TOTAL DE UMA DETERMINADA COLUNA DO BANCO
string totalDizimo = Program.conn.Pesquisar([Ô]SELECT SUM(valor_Dizimo) AS total FROM dizimo [Ô]+
[Ô]WHERE data_Dizimo BETWEEN #[Ô] + _inicio + [Ô]# AND #[Ô] + _fim + [Ô]#[Ô]).Rows[0][[Ô]total[Ô]].ToString();

//ABRE O DOCUMENTO
doc.Open();

//CABEÇALHO-----------------------------------------------------------------------------------------------------------------
Paragraph cabecalho = new Paragraph([Ô][Ô], new Font(Font.NORMAL, 12));
cabecalho.Alignment = Element.ALIGN_CENTER;
cabecalho.Font = new Font(Font.FontFamily.HELVETICA, 18, (int)System.Drawing.FontStyle.Bold);
cabecalho.Add([Ô]Relatório de Dízimo
De: [Ô] + inicio.ToString([Ô]dd/MM/yyyy[Ô]) + [Ô] à [Ô] + fim.ToString([Ô]dd/MM/yyyy[Ô])+[Ô]

[Ô]);
doc.Add(cabecalho);
//FIM CABEÇALHO-------------------------------------------------------------------------------------------------------------

//INICIA A TABELA-----------------------------------------------------------------------------------------------------------
PdfPTable table = new PdfPTable(3);
table.WidthPercentage = 100;

Font f = new Font(Font.FontFamily.HELVETICA, 10, Font.NORMAL, GrayColor.GRAYWHITE);
PdfPCell celulaData = new PdfPCell(new Phrase([Ô]DATA[Ô], f));
celulaData.BackgroundColor = GrayColor.GRAYBLACK;
celulaData.HorizontalAlignment = Element.ALIGN_LEFT;
table.AddCell(celulaData);

PdfPCell celulaResponsavel = new PdfPCell(new Phrase([Ô]RESPONSÁVEL[Ô], f));
celulaResponsavel.BackgroundColor = GrayColor.GRAYBLACK;
celulaResponsavel.HorizontalAlignment = Element.ALIGN_LEFT;
table.AddCell(celulaResponsavel);

PdfPCell celulaValor = new PdfPCell(new Phrase([Ô]VALOR R$[Ô], f));
celulaValor.BackgroundColor = GrayColor.GRAYBLACK;
celulaValor.HorizontalAlignment = Element.ALIGN_LEFT;
table.AddCell(celulaValor);

//ESSA ESTRUTURA DE REPETIÇÃO é PARA ACRESCENTAR NA TABELA OS VALORES RECUPERADOS DO BANCO
for (int i = 0; i < dados.Rows.Count; i++)
{
table.AddCell(dados.Rows[i][[Ô]data_Dizimo[Ô]].ToString().Replace([Ô]00:00:00[Ô],[Ô][Ô]));
table.AddCell(dados.Rows[i][[Ô]id_Familia[Ô]].ToString()+[Ô] - [Ô]+dados.Rows[i][[Ô]nome_Pessoa[Ô]].ToString());
table.AddCell(dados.Rows[i][[Ô]valor_Dizimo[Ô]].ToString());
}

doc.Add(table);

//FIM TABELA-----------------------------------------------------------------------------------------------------------------

//COLOCA O VALOR TOTAL AO FINAL DO RELATÓRIO
Paragraph totalRelatorio = new Paragraph([Ô][Ô], new Font(Font.NORMAL, 12));
totalRelatorio.Alignment = Element.ALIGN_RIGHT;
totalRelatorio.Font = new Font(Font.FontFamily.HELVETICA, 14, (int)System.Drawing.FontStyle.Bold);
totalRelatorio.Add([Ô]TOTAL ARRECADADO NO PERÍODO R$: [Ô]+totalDizimo);

doc.Add(totalRelatorio);

//FINALIZA E SALVA O DOCUMENTO
doc.Close();
}


OBS.: A forma como me conecto ao banco e recupero as informações é irrelevante. Cada um pode fazer da forma como já está acostumado! No mais é só usar a imaginação!
Té mais!
MOUSER 11/03/2016 10:02:04
#458983
Depois desta postagem mais uma vez digo pra mim mesmo o que Ken Tompson disse: Um dos meus dias mais produtivos, foi quando eu joguei fora 1000 linhas de código.

Digo isso por que eu dou preferencia aos relatorios PDF do que Crystal, por mais que eu utilize o Crystal.
2 a 3 subs, uma importação, reciclagem de outras subs ao invés de criar um monte de subs desnecessários; Pronto, Está feito um sistema de relatório com PDF, uma pena que tenho dificuldade com as dll deles, ainda bem que conheci o ACCIOLLY no VBMANIA!
MOUSER 11/03/2016 10:05:00
#458984
Apesar de conseguir escrever perfeitamente (mais ou menos/mais ou menos) em VB.NET, já foi de grande utilidade essa postagem por mais que seja em C# (Aulas do Kerp tem ajudado muito nessas leituras).
KERPLUNK 11/03/2016 10:09:34
#458987
Este é um assunto que vou abordar muito em breve no meu canal: Relatórios. Com o uso da WebAPI, basta criar os objetos necessários e um HTML e prontinho, relatório feito.
OCELOT 11/03/2016 10:15:06
#458988
Só queria registrar aqui pra quem se preocupa com isso, de que o iTextSharp só é gratuito para uso comercial (licença LGPL) até a versão 4.1.6.0, que pode ser encontrada facilmente, no NuGet é só procurar por iTextSharp-LGPL.

O iTextSharp é na verdade um port do iText do Java para o .Net, e como tal ele tem que manter a mesma licença usada pelo iText, que nas versões mais novas é o AGPL, que é gratuito apenas se seu programa for Open Source e gratuito, não pode ser comercializado, neste caso é necessário uma licença do iText.
ACCIOLLY 11/03/2016 10:15:18
#458989
Valeu mesmo MOUSER!
A janela que fiz pra mostrar o relatório utilizei a dll do adobe

AxAcroPDF.src = [Ô]Diretório do arquivo PDF[Ô];

Mas também posso utilizar o controle WebBrowser

WebBrowser.url([Ô]Diretório do arquivo[Ô]);


Com o mesmo WebBrowser eu poderia mostrar um Rel em HTML mole mole! O negócio é manipular HTML na codificação! rsrsrs

Citação:

Só queria registrar aqui pra quem se preocupa com isso, de que o iTextSharp só é gratuito para uso comercial (licença LGPL) até a versão 4.1.6.0, que pode ser encontrada facilmente, no NuGet é só procurar por iTextSharp-LGPL.

O iTextSharp é na verdade um port do iText do Java para o .Net, e como tal ele tem que manter a mesma licença usada pelo iText, que nas versões mais novas é o AGPL, que é gratuito apenas se seu programa for Open Source e gratuito, não pode ser comercializado, neste caso é necessário uma licença do iText.



Fica registrada aí a dica OCELOT! Valeu Mesmo!
ACCIOLLY 11/03/2016 10:35:01
#458993
Só pra constar, estarei doando essa aplicação para a igreja. Confesso que não sou um cara religioso! rsrsrs Mas sou grato pela religião me ajudar a dar uma educação melhor pra minha filha!
(OBS: ser à toa não é ser ateu viu!)
Quando encerrar vou disponibilizar aqui no VBMania o Projeto como OpenSource Blz!
F001E 11/03/2016 10:48:55
#458997
Trabalho com iTextSharp e não tenho problemas porém o relatório tem que ser escrito na unha. Nessa parte o Crystal Report é mais ágil.
ACCIOLLY 11/03/2016 11:11:21
#458999
Citação:

:
Trabalho com iTextSharp e não tenho problemas porém o relatório tem que ser escrito na unha. Nessa parte o Crystal Report é mais ágil.


Sem sombra de dúvidas! Mas a OOP está aí para minimizar esse trabalho
ACCIOLLY 14/03/2016 10:55:20
#459120
Bom dia galera!
Como prometido disponibilizo o projeto com o fonte dele pra quem quiser dar uma estudada no iTextSharp. Ele também aborda outros assuntos básicos, como conexao OleDb, XML, 3ª forma normal (este é pro banco). A senha do banco estará no código fonte pra quem quiser dar uma estudada nele também.
OBS: O Zip superou 9mb por isso não pude carrega-lo no VBMania.

URL
http://www.4shared.com/zip/Uom-BIalce/ProjetoDizimo.html?

Té mais!
Tópico encerrado , respostas não são mais permitidas