1º passo, crie uma select com tudo o que voce necessita, exemplo: nome da codigo, nome da empresa (que será usado para quebra), acompanhado de demais campos, exemplo, codigo do fornecedor, nome, valores etc..., este select traz tanto de uma empresa como de todas empresas de um grupo, por isso a chamada solicita um numero, caso for 0 traz todas.
neste nosso caso trata-se de um relatorio de contas por isso as descrições abaixo.
2º passo o relatório:
temos uma função q retorna a datatable com a select,
e esta abaixo que trata o relatório:
public static bool RelRespDespDia(string Data, string caminhoPDF, int Empresa)
{
DataTable dt = new DataTable();
bool _retorno;
dt = clsConsulta.RetornaResumoDespDia(Convert.ToDateTime(Data),Empresa);
if (dt != null)
{
// defino documento
Document document = new Document(PageSize.A4.Rotate(), 10, 10, 10, 10);
try
{
// cria o arquivo
PdfWriter.GetInstance(document, new FileStream(caminhoPDF, FileMode.Create));
// we add some meta information to the document
document.AddAuthor("AFK");
document.AddSubject(".");
document.Open();
iTextSharp.text.Table TableCabec = new iTextSharp.text.Table(1);
TableCabec.WidthPercentage = 100;
TableCabec.Padding = 2;
//alinhamento dentro da celula
TableCabec.Spacing = 0;
TableCabec.DefaultCellBorderWidth = 0;
TableCabec.DefaultHorizontalAlignment = 1;
TableCabec.Border = iTextSharp.text.Rectangle.NO_BORDER;
TableCabec.Alignment = Element.ALIGN_CENTER;
TableCabec.BackgroundColor = new iTextSharp.text.Color(0xC0, 0xC0, 0xC0);
TableCabec.AddCell(new Phrase(@"Resumo Despesas Diária", FontFactory.GetFont(FontFactory.HELVETICA, 12, iTextSharp.text.Font.BOLD)));
TableCabec.AddCell(new Phrase("Data Base: " + Data + " Data Emissão: " + DateTime.Now, FontFactory.GetFont(FontFactory.HELVETICA, 12, iTextSharp.text.Font.BOLD)));
TableCabec.EndHeaders();
document.Add(TableCabec);
//rodapé
HeaderFooter header = new HeaderFooter(new Phrase("Data Base: " + Data + " Data Emissão: " + DateTime.Now + " Pagina : "), true);
document.Footer = header;
//Cabeçalho empresa
iTextSharp.text.Table TableFor = new iTextSharp.text.Table(1);
float[] headerwidthsFor = { 100 };
TableFor.Widths = headerwidthsFor;
TableFor.AutoFillEmptyCells = true;
TableFor.WidthPercentage = 100;
TableFor.Spacing = 0;
TableFor.DefaultCellBorderWidth = 1;
TableFor.DefaultHorizontalAlignment = 1;
TableFor.Border = iTextSharp.text.Rectangle.NO_BORDER;
//TableFor.Alignment = Element.ALIGN_CENTER;
//TableFor.AddCell(new Phrase(@"Cod. For.", FontFactory.GetFont(FontFactory.HELVETICA, 10, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 0));
TableFor.Alignment = Element.ALIGN_LEFT;
TableFor.AddCell(new Phrase(@"Empresa", FontFactory.GetFont(FontFactory.HELVETICA, 10, iTextSharp.text.Font.BOLD)));
//Cabeçalho Itens.
iTextSharp.text.Table TableItens = new iTextSharp.text.Table(8, 1);
TableItens.AutoFillEmptyCells = true;
float[] headerwidths = { 6, 26, 4, 4, 8, 8, 10, 34 };
TableItens.Widths = headerwidths;
TableItens.WidthPercentage = 100;
TableItens.Spacing =1;
TableItens.DefaultCellBorderWidth = 1;
TableItens.DefaultHorizontalAlignment = Element.ALIGN_LEFT;
TableItens.AddCell(new Phrase(@"Cod. For.", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 0));
TableItens.DefaultHorizontalAlignment = Element.ALIGN_LEFT;
TableItens.AddCell(new Phrase(@"Razão", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 1));
TableItens.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItens.AddCell(new Phrase(@"Doc.", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 2));
TableItens.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
//TableItens.AddCell(new Phrase(@"Par.", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 3));
TableItens.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItens.AddCell(new Phrase(@"Tp Doc.", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 3));
TableItens.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItens.AddCell(new Phrase(@"Dt Emissão", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 4));
//TableItens.AddCell(new Phrase(@"Dt Venc.", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 6));
TableItens.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItens.AddCell(new Phrase(@"Vl Docum.", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 5));
//TableItens.AddCell(new Phrase(@"Gp.Despesas", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 6));
//TableItens.AddCell(new Phrase(@"Tp.Despesa", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 7));
TableItens.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItens.AddCell(new Phrase(@"Usuario", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 6));
TableItens.DefaultHorizontalAlignment = Element.ALIGN_LEFT;
TableItens.AddCell(new Phrase(@"Observação", FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.BOLD)), new System.Drawing.Point(0, 7));
//TableFor.InsertTable(TableItens, new System.Drawing.Point(1, 1));
//adiciona no documento
TableFor.EndHeaders();
TableItens.EndHeaders();
document.Add(TableFor);
document.Add(TableItens);
//limpa variavel que ira controlar a quebra
_nomeAnterior = string.Empty;
foreach (DataRow row in dt.Rows)
{
//trata a quebra por empresa criando uma nova tabela
if (_nomeAnterior != row["Nome_emp"].ToString())
{
iTextSharp.text.Table TableForr = new iTextSharp.text.Table(1);
float[] headerwidthsForr = { 100 };
TableForr.Widths = headerwidthsFor;
TableForr.AutoFillEmptyCells = true;
TableForr.WidthPercentage = 100;
TableForr.Spacing = 1;
TableForr.DefaultCellBorderWidth = 1;
TableForr.DefaultHorizontalAlignment = 1;
TableForr.Border = iTextSharp.text.Rectangle.NO_BORDER;
TableForr.Alignment = Element.ALIGN_CENTER;
_nomeAnterior = row["Nome_emp"].ToString();
TableForr.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableForr.AddCell(new Phrase(row["ID_Emp"].ToString() + " - " + row["Nome_emp"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
//TableForr.DefaultHorizontalAlignment = Element.ALIGN_LEFT;
//TableForr.AddCell(new Phrase(row["Nome_emp"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
document.Add(TableForr);
}
//insere os itens abaixo da quebra
iTextSharp.text.Table TableItenss = new iTextSharp.text.Table(8, 1);
TableItens.AutoFillEmptyCells = true;
float[] headerwidthss = { 6, 26, 4, 4, 8, 8, 10, 34 };
TableItenss.Widths = headerwidthss;
TableItenss.WidthPercentage = 100;
TableItenss.Spacing = 1;
TableItenss.DefaultCellBorderWidth = 1;
TableItenss.DefaultHorizontalAlignment = 1;
TableItenss.Border = iTextSharp.text.Rectangle.NO_BORDER;
TableItenss.DefaultHorizontalAlignment = Element.ALIGN_LEFT;
TableItenss.AddCell(new Phrase(row["ID_FOR"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
TableItenss.DefaultHorizontalAlignment = Element.ALIGN_LEFT;
TableItenss.AddCell(new Phrase(row["NM_RAZAO_SOCIAL"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
TableItenss.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItenss.AddCell(new Phrase(row["ID_NFE_NF_ENT_FOR"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
//TableItenss.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
//TableItenss.AddCell(new Phrase(row["SEQ_PARCELA"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
TableItenss.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItenss.AddCell(new Phrase(row["CD_DOCUMENTO_PAGTO_ORIGINAL"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
TableItenss.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItenss.AddCell(new Phrase(Convert.ToDateTime(row["DT_EMISSAO"]).ToString("dd/MM/yyyy"), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
//TableItenss.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
//TableItenss.AddCell(new Phrase(Convert.ToDateTime(row["DT_VENCIMENTO"]).ToString("dd/MM/yyyy"), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
TableItenss.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItenss.AddCell(new Phrase(row["VL_DOCUMENTO"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
//TableItenss.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
//TableItenss.AddCell(new Phrase(row["DS_GRUPO_DESPESA"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
//TableItenss.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
//TableItenss.AddCell(new Phrase(row["DS_TIPO_DESPESA"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
TableItenss.DefaultHorizontalAlignment = Element.ALIGN_CENTER;
TableItenss.AddCell(new Phrase(row["NM_USUARIO"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 8, iTextSharp.text.Font.NORMAL)));
TableItenss.DefaultHorizontalAlignment = Element.ALIGN_LEFT;
TableItenss.AddCell(new Phrase(row["DS_DOCUMENTO"].ToString(), FontFactory.GetFont(FontFactory.HELVETICA, 6, iTextSharp.text.Font.NORMAL)));
document.Add(TableItenss);
}
document.Close();
_retorno = true;
}
catch (IOException ex)
{
_retorno = false;
}
catch (Exception ex)
{
_retorno = false;
}
finally
{
document.Close();
}
return _retorno;
}
else
{
return false;
}
}
O retorno true ou false é para tratar a chamada no programa, no caso web:
if(clsRelatoriosFinanceiro.RelRespDespDia(txtDtInicio.Text, Request.PhysicalApplicationPath + @"PDF\\RelResDespDia.pdf", int.Parse(cmbLoja.SelectedValue)))
ScriptManager.RegisterStartupScript(base.Page, base.Page.GetType(), "Pdf", "window.open('../PDF/RelResDespDia.pdf');", true);
Qualquer opinião de melhoria é bem vinda, este caso relato a forma que encontrei para salvar uma situação a qual me deparei e após pesquisas em varios sites, espero ter ajudado.
Fernando Valota
Nenhum comentário:
Postar um comentário