Array
(
)

Imprimir em PDF pelo C#

Pjava
   - 11 mai 2012

Tenho esses charts, criados pelo Telerik. Eles estão no Page_Load da página.
RadChart radChart1 = new RadChart();
radChart1.Height = 400;
radChart1.Width = 1024;
radChart1.ChartTitle.TextBlock.Text = bl.tituloGrafico;
radChart1.ChartTitle.TextBlock.Appearance.Position.AlignedPosition = Telerik.Charting.Styles.AlignedPositions.Center;
radChart1.ChartTitle.Appearance.Dimensions.AutoSize = false;
radChart1.ChartTitle.Appearance.Dimensions.Height = 50;
radChart1.ChartTitle.Appearance.Dimensions.Width = 750;
radChart1.ChartTitle.Appearance.Dimensions.Margins.Left = Telerik.Charting.Styles.Unit.Percentage(5);
radChart1.ChartTitle.Appearance.Dimensions.Margins.Right = Telerik.Charting.Styles.Unit.Percentage(5);
Agora, abaixo tenho esse código para impressão dos gráficos. Observe que criaei um evento de OnClick paraesse botão. Vem a pergunta: Como eu faço para o radChart ser reconhecido dentro do btnSalvar_Click se ele foi declarado dentro do Page_Load? Quais using eu uso reconhecer os Document, PDfWriter e etc...?
protected void btnSalvar_Click(object sender, EventArgs e)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
this.radChart.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)
{
*/
Document pdfDoc = new Document(PageSize.A4.Rotate(), 10f, 10f, 10f, 0f);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
iTextSharp.text.Image img = 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);
img.ScaleToFit(pdfDoc.PageSize.Width-40f, pdfDoc.PageSize.Height);
img.Alignment = Element.ALIGN_CENTER;
pdfDoc.Add(img);
pdfDoc.Close();
Response.Write(pdfDoc);
//}
this.Page.Response.End();
}

Joel Rodrigues
   - 11 mai 2012

Cara, para que uma variável seja reconhecida em qualquer método da classe, ela precisa ser GLOBAL (depois você pode pesquisar sobre escopos de variáveis). Logo, declare o chart fora do evento onLoad, apenas dentro da classe. Quanto aos usings, ponha o mouse em cima de uma classe que não esteja sendo reconhecida e pressione CTRL + .(ponto), o intelisense deve sugerir o namespace a ser importado.
Caso não seja sugerido, talvez você precise adicionar uma referência à bilblioteca.

Pjava
   - 11 mai 2012

Ok, isso eu fiz e funcionou. Agora, quanto a impressão em PDF, ele não funcionou. Ou seja, não tive a opção de Salvar Como.... e quendo eu pressionava o botão salvar, ele gerava um monte de caracteres estranhos. Alguém sabe como Salvar em PDF? Desde já agradeço.

Joel Rodrigues
   - 11 mai 2012

Aí talvez você precise procurar a documentação oficial, não sei.