none
Salvar em PDF tá dando "pau" RRS feed

  • Pergunta

  • Pessoal, outro colega me deu um código para salvar em PDF e enxertei no código para que o cliente pudesse ver que é possível salvar em pdf. Bem, agora olhando bem para o resultado, não é satisfatório. Ele repete as barras(é para salvar uns gráficos gerados pelo Telerik), e não salva os subtítulos, apenas o título. Obeserveando bem, o título é passado diretamente na rotina. Abaixo a rotina que o colega passou. Alguém pode me dar uma luz quanto a salvar em 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(ms1.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(ms1.ToArray());
                    iTextSharp.text.Image img2 = iTextSharp.text.Image.GetInstance(ms2.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);

                    img2.ScaleToFit(pdfDoc.PageSize.Width - 40f, pdfDoc.PageSize.Height);
                    img2.Alignment = Element.ALIGN_CENTER;
                    pdfDoc.Add(img2);

                    pdfDoc.Close();

                    Response.Write(pdfDoc.ToString());
                }

                this.Page.Response.End();

            }

    quinta-feira, 17 de maio de 2012 20:31

Todas as Respostas

  • A rotina completa:

    protected void btnSalvar_Click(object sender, EventArgs e)
            {

                System.IO.MemoryStream ms1 = new System.IO.MemoryStream();
                System.IO.MemoryStream ms2 = new System.IO.MemoryStream();

                this.radChart1.Save(ms1, System.Drawing.Imaging.ImageFormat.Png);
                this.radChart2.Save(ms2, 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(ms1.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(ms1.ToArray());
                    iTextSharp.text.Image img2 = iTextSharp.text.Image.GetInstance(ms2.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);

                    img2.ScaleToFit(pdfDoc.PageSize.Width - 40f, pdfDoc.PageSize.Height);
                    img2.Alignment = Element.ALIGN_CENTER;
                    pdfDoc.Add(img2);

                    pdfDoc.Close();

                    Response.Write(pdfDoc.ToString());
                }

                this.Page.Response.End();

            }

    quinta-feira, 17 de maio de 2012 21:11
  • Amigo,

    O que exatamente precisa? melhorar o resultado do PDF gerado? Que "pau" está dando?


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    quinta-feira, 17 de maio de 2012 21:36
  • Como eu disse, está repetindo as barras. Ex: Se me gráfico plota 3 séries de barras, no PDF mostra seis(6). O título é mostrado porque está amarrado no código, como vocês podem ver. Como os subtítulos não estão, o PDF então não mostra os subtítulos. Esse gráfico é plotado em duas áreas, o que chamo de 2 RadChart. Porém, a área total é apenas uma. Eu fiz então dois MemoryStream, um para cada radChart. Não sei se isso é o correto. Bem, acontece o seguinte quando eu vou gerar o PDF. Me dá a mensagem que não é possível abrir o adobe. Aí eu cancelo e o PDF é gerado. Não sei se é por causa de na máquina em gero o PDF não estar conectada à Internet. Mais o gerar duas barras, isso é que tá pegando. E mais, as barras extras não obedecem à original, tipo, a original tenho os labels das barras dentro das barras e na vertical, enquanto a que é gerada extra tem os labels em cima das barras e na horizontal.
    sexta-feira, 18 de maio de 2012 11:14