Ir para conteúdo
ViniciusRafael

[Resolvido] Gerar PDF através do Report Viewer antes de abri-lo (

Recommended Posts

Olá pessoal =D

 

Estou com o seguinte problema:

 

Preciso gerar um PDF baseado num relatório do Report Viewer na máquina sem precisar abrir o Report Viewer. A aplicação será Windows Forms.

 

Até agora o código está assim:

 

DataTable Dt = new DataTable();
           ReportViewer Rv = new ReportViewer();

           DataRow Dr = Dt.NewRow() ;

           Dt.Columns.Add("Name", typeof(string));
           Dt.Columns.Add("Age", typeof(string));
           Dt.Columns.Add("Phone", typeof(string));

           Dr["Name"] = "Vini";
           Dr["Age"] = "12";
           Dr["Phone"] = "2134";

           Dt.Rows.Add(Dr);

           Rv.ProcessingMode = ProcessingMode.Local;
           Rv.LocalReport.ReportPath = @"\report1.rdlc";
           Rv.LocalReport.DataSources.Add(new ReportDataSource("Employee", Dt));


           Warning[] warnings;
           string[] streamids;
           string mimeType;
           string encoding;
           string extension;

              byte[] bytes = Rv.LocalReport.Render(
              "Pdf", null, out mimeType, out encoding,
               out extension,
              out streamids, out warnings);

               FileStream fs = new FileStream(@"c:\output\output.pdf",
                  FileMode.Create);
               fs.Write(bytes, 0, bytes.Length);
               fs.Close()

 

 

O problema é que está dando erro no byte[]. Alega que não foi possível fazer o processamento com o relatório.

 

Mensagem: "Ocorreu um erro durante o processamento de relatórios local."

 

Então, alguém com dicas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente usar o método ReadBytes() do ReportViewer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente usar o método ReadBytes() do ReportViewer.

Olá.

 

Não achei o método ReadBytes() do ReportViewer, joguei no Google e nada, também.

 

Acho que o problema está no processo que pega o fonte de dados e o arquivo do relatório, pois fui defininir alguns parâmetros e, também deu o mesmo problema.

 

 

Rv.LocalReport.SetParameters( Rp );  

 

Você já chegou um relatório PDF dessa forma em WinForm?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, consegui gerar o PDF, mas ele está em branco.

 

Tive que adicionar parâmetros antes de usar o Rv.LocalReport.Render(). Daí foi, mas infelizmente ele não está associando meu DataTable com o relatório.

 

Segue abaixo o código (um pouco modificado, estou no trabalho e não tenho o mesmo projeto que usei em casa)

 

 private void ExportPdf()
       {
           DataTable Dt = new DataTable("Teste");
           ReportViewer Rv = new ReportViewer();
           ReportParameter[] Rp = new ReportParameter[3];
           BindingSource Bs = new BindingSource();
           ReportDataSource Rds = new ReportDataSource(); 

           Rp[0] = new ReportParameter("Name", "Name", true);
           Rp[1] = new ReportParameter("Age", "Age", true);
           Rp[2] = new ReportParameter("Phone", "Phone", true);

           DataRow Dr = Dt.NewRow() ;

           Dt.Columns.Add("Name", typeof(string));
           Dt.Columns.Add("Age", typeof(string));
           Dt.Columns.Add("Phone", typeof(string));

           Dr["Name"] = "Vini";
           Dr["Age"] = "12";
           Dr["Phone"] = "2134";

           Dt.Rows.Add(Dr);

           Bs.DataSource = Dt;
           Rds.Name = Dt.TableName;
           Rds.Value = Bs;

           Rv.ProcessingMode = ProcessingMode.Local;
           Rv.LocalReport.ReportPath = @"c:\users\vinicius\desktop\RP_PDFTESTE\RP_PDFTESTE\Report1.rdlc";
           Rv.LocalReport.SetParameters( Rp );  
           Rv.LocalReport.DataSources.Add( Rds);


           Rv.LocalReport.Refresh(); 

           Warning[] warnings;
           string[] streamids;
           string mimeType;
           string encoding;
           string extension;

              byte[] bytes = Rv.LocalReport.Render(
              "Pdf", null, out mimeType, out encoding,
               out extension,
              out streamids, out warnings);

               FileStream fs = new FileStream(@"c:\output\output.pdf",
                  FileMode.Create);
               fs.Write(bytes, 0, bytes.Length);
               fs.Close();
       }

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema resolvido =D

 

Abaixo o código funcional (Lembrando que tem que adicionar um DataSet ao Report (Report Viewer).

private void ExportPdf()
       {

           ReportViewer Rv = new ReportViewer();
           ReportParameter[] Rp = new ReportParameter[3];
           BindingSource Bs = new BindingSource();
           ReportDataSource Rds = new ReportDataSource();
           DataTable Dt = new DataTable("Teste");
           DataRow Dr;

           Rp[0] = new ReportParameter("Name", "Name", true);
           Rp[1] = new ReportParameter("Age", "Age", true);
           Rp[2] = new ReportParameter("Phone", "Phone", true);

           Dt.Columns.Add( "Name", typeof( string ) );
           Dt.Columns.Add( "Age", typeof( string ) );
           Dt.Columns.Add( "Phone", typeof( string ) );

           for ( int i = 0; i < 5; i++ )
           {
               Dr = Dt.NewRow(); 
               Dr["Name"] = "Vini " + i * i+2;
               Dr["Age"] = "12 " + i + i + Math.PI;
               Dr["Phone"] = "2134 " + i + i / 0.5;

               Dt.Rows.Add( Dr );
           }
           Bs.DataSource = Dt;
           Rds.Name = Dt.TableName;
           Rds.Value = Bs.DataSource;

           Rv.ProcessingMode = ProcessingMode.Local;
           Rv.LocalReport.ReportPath = @"Report1.rdlc";
           Rv.LocalReport.SetParameters( Rp );  
           Rv.LocalReport.DataSources.Add( Rds);

           Warning[] warnings;
           string[] streamids;
           string mimeType;
           string encoding;
           string extension;

              byte[] bytes = Rv.LocalReport.Render(
              "Pdf", null, out mimeType, out encoding,
               out extension,
              out streamids, out warnings);

               FileStream fs = new FileStream(@"c:\output\output.pdf",FileMode.Create);
               fs.Write(bytes, 0, bytes.Length);
               fs.Close();

               System.Diagnostics.Process.Start(@"c:\output\output.pdf");
       }

       private void button1_Click( object sender, EventArgs e )
       {
           ExportPdf(  );
           label1.Text = "Exportado com sucesso!";  
       }

 

Pra quem não conseguir rodar vou deixar o font aqui embaixo.

 

Download --> https://skydrive.live.com/redir?resid=930E14C1CBA22D2B!157

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo, valeu! Valeu mesmo!

 

Eu precisava mesmo deste comando: "System.Diagnostics.Process.Start(@"c:\output\output.pdf");", o único problema é que ele não funciona no cliente porque o Windows não deixa qualquer um gravar no c:.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

 

Tenho um relatório que está sendo exportado para .pdf mas sem os dados, somente com o layout.

 

Gostaria de saber se alguém poderia me orientar, pois o código está exatamente igual ao último postado como resolvido.

Compartilhar este post


Link para o post
Compartilhar em outros sites
9 hours ago, Rodrigo Malagodi said:

Boa tarde.

 

Tenho um relatório que está sendo exportado para .pdf mas sem os dados, somente com o layout.

 

Gostaria de saber se alguém poderia me orientar, pois o código está exatamente igual ao último postado como resolvido.

Descobri o motivo do report em branco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.