Gerar vários gráficos em um PDF
01/06/2012
0
Pessoal, tenho o seguinte problema. Quando vou gerar o meu gráfico, ele é gerado dentro de um for, o que faz com que a quantidade de gráficos na tela, varia de acordo com o tamanho da variável. Bem, digamos que eu tenho na tela dois gráficos. Quando eu vou gerar o meu PDF com iTextSharp, só gera um gráfico. Fiz dentro de um for, o mesmo usado para gerar o gráfico, e sempre vem o último gráfico. Como eu resolvo isso, ou seja, a mesma quantidade de gráfico deverá ser a mesma no PDF.Não é vários PDFs, mas no PDF eu ter todos os gráficos.
Código do PDF.
private void GeraPDF()
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
this.radChart1.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
this.Page.Response.Clear();
this.Page.Response.ClearHeaders();
int opcao = 2; // 1-download de imagem, 2-download de pdf
if (opcao == 1)
{
this.Page.Response.AddHeader(Content-disposition, attachment; filename=Chart.png);
this.Page.Response.AddHeader(Content-type, image/png);
this.Page.Response.BinaryWrite(ms.ToArray());
}
else if (opcao == 2)
{
this.Page.Response.AddHeader(Content-type, application/pdf);
Document pdfDoc = new Document(PageSize.A4.Rotate(), 10f, 10f, 10f, 0f);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
iTextSharp.text.Image img1 = iTextSharp.text.Image.GetInstance(ms.ToArray());
Font fonteTitulo1 = FontFactory.GetFont(Verdana, 12, iTextSharp.text.Font.BOLD);
fonteTitulo1.SetColor(255, 0, 0);
Chunk titulo1 = new Chunk(DESEMPENHO POR PERIODO, fonteTitulo1);
Phrase phrase1 = new Phrase(titulo1);
Paragraph p = new Paragraph();
p.Add(phrase1);
pdfDoc.Add(p);
img1.ScaleToFit(pdfDoc.PageSize.Width - 40f, pdfDoc.PageSize.Height);
img1.Alignment = Element.ALIGN_CENTER;
pdfDoc.Add(img1);
pdfDoc.Close();
Response.Write(pdfDoc.ToString());
}
this.Page.Response.End();
}
Chamada para gerar o PDF
protected void btnSalvar_Click(object sender, EventArgs e)
{
string anoInicio = Request.QueryString[A1].ToString();
string anoTermino = Request.QueryString[A2].ToString();
int periodo = int.Parse(anoTermino) - int.Parse(anoInicio) + 1;
for (int p = 0; p < periodo; p++)
{
GeraPDF();
}
}
Código do PDF.
private void GeraPDF()
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
this.radChart1.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
this.Page.Response.Clear();
this.Page.Response.ClearHeaders();
int opcao = 2; // 1-download de imagem, 2-download de pdf
if (opcao == 1)
{
this.Page.Response.AddHeader(Content-disposition, attachment; filename=Chart.png);
this.Page.Response.AddHeader(Content-type, image/png);
this.Page.Response.BinaryWrite(ms.ToArray());
}
else if (opcao == 2)
{
this.Page.Response.AddHeader(Content-type, application/pdf);
Document pdfDoc = new Document(PageSize.A4.Rotate(), 10f, 10f, 10f, 0f);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
iTextSharp.text.Image img1 = iTextSharp.text.Image.GetInstance(ms.ToArray());
Font fonteTitulo1 = FontFactory.GetFont(Verdana, 12, iTextSharp.text.Font.BOLD);
fonteTitulo1.SetColor(255, 0, 0);
Chunk titulo1 = new Chunk(DESEMPENHO POR PERIODO, fonteTitulo1);
Phrase phrase1 = new Phrase(titulo1);
Paragraph p = new Paragraph();
p.Add(phrase1);
pdfDoc.Add(p);
img1.ScaleToFit(pdfDoc.PageSize.Width - 40f, pdfDoc.PageSize.Height);
img1.Alignment = Element.ALIGN_CENTER;
pdfDoc.Add(img1);
pdfDoc.Close();
Response.Write(pdfDoc.ToString());
}
this.Page.Response.End();
}
Chamada para gerar o PDF
protected void btnSalvar_Click(object sender, EventArgs e)
{
string anoInicio = Request.QueryString[A1].ToString();
string anoTermino = Request.QueryString[A2].ToString();
int periodo = int.Parse(anoTermino) - int.Parse(anoInicio) + 1;
for (int p = 0; p < periodo; p++)
{
GeraPDF();
}
}
Pjava
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)