[OFF] ITEXTSHARP
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!
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!
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.
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!
(OBS: ser à toa não é ser ateu viu!)
Quando encerrar vou disponibilizar aqui no VBMania o Projeto como OpenSource Blz!
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
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!