none
Exibir relatório em pdf RRS feed

  • Pergunta

  • Olá!!

    Bem, eu precisava de uma rotina que mostrasse meu relatório em pdf sem print preview, encontrei alguns trechos na net e fui moldando à minha necessidade, porém o código que encontrei apenas salva o relatório, e não sei se da melhor forma. Qual o método para exibir?

    Aproveitando, o código abaixo está salvando temporariamente ou definitivamente em disco?

    Ps: Estou utilizando C#, WinForms, Crystal Reports...

     

    Relatorio1 rpt = new Relatorio1();

                SqlConnection cnn = new SqlConnection(@"Server=DHARMA0ECIONEK\SQLEXPRESS;Database=UCP;Trusted_Connection=True");

                SqlDataAdapter dta = new SqlDataAdapter();

     

                dta = new SqlDataAdapter("Select * from pessoa",cnn);

                DataTable dt = new DataTable();

                dta.Fill(dt);

     

                rpt.Load("caminho onde salvo o relatorio");

                rpt.SetDataSource(dt);

     

                crystalReportViewer1.ReportSource = rpt;

                crystalReportViewer1.Refresh();

                crystalReportViewer1.DisplayGroupTree = false;

     

                ExportOptions CrExportOptions;

                DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();

                PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();

                CrDiskFileDestinationOptions.DiskFileName = "caminho onde desejo salvar o pdf";

                CrExportOptions = rpt.ExportOptions;

     

                CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;

                CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

                CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;

                CrExportOptions.FormatOptions = CrFormatTypeOptions;

     

                rpt.Export();

    terça-feira, 24 de agosto de 2010 18:13

Todas as Respostas

  • Você pode deixar o Windows usar o programa padrão para visualizar o PDF, use

    System.Diagnostics.Process.Start("Caminho do seu arquivo");

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 24 de agosto de 2010 18:18
  • Rogério,

    Ainda preciso de todo aquele código para gerar o arquivo em pdf certo? 

    Dessa forma, o pdf até abre, mas antes aparece o print preview na tela, por 1 segundinho...

    terça-feira, 24 de agosto de 2010 18:26
  • Rogério,

    Ainda preciso de todo aquele código para gerar o arquivo em pdf certo? 

    Dessa forma, o pdf até abre, mas antes aparece o print preview na tela, por 1 segundinho...

    Na verdade os dois ficam abertos!
    terça-feira, 24 de agosto de 2010 18:30
  • Vai precisar de todo o código sim...

    Você fala que ele esta aparecendo e sumindo a tela de preview antes de mostrar o PDF? Isto?

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 24 de agosto de 2010 18:31
  • Abrem os dois, primeiro o preview e depois o pdf, e permanecem abertos...

    Quanto a salvar o pdf em disco, ele é temporário ou definitivo?

    terça-feira, 24 de agosto de 2010 18:33
  • É definitivo, se você quiser, você pode apaga-lo depois...

    private void Execute(string fileName)
    { 
      System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
      proc.StartInfo.FileName = fileName; 
      proc.Start(); 
      proc.Exited += new EventHandler(ProcessExited); 
      proc.EnableRaisingEvents = true; 
    }      
     
    private void ProcessExited(Object source, EventArgs e) 
    { 
     // apague o arquivo aqui... 
    } 
    
    

    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 24 de agosto de 2010 18:36
  • Lana,

    Para o problema do preview, tente gerar o arquivo desta forma:

    Relatorio1 rpt = new Relatorio1();
    
    SqlConnection cnn = new SqlConnection(@"Server=DHARMA0ECIONEK\SQLEXPRESS;Database=UCP;Trusted_Connection=True");
    
    SqlDataAdapter dta = new SqlDataAdapter();
    dta = new SqlDataAdapter("Select * from pessoa",cnn);
    
    DataTable dt = new DataTable();
    dta.Fill(dt);
    
    rpt.Load("caminho onde salvo o relatorio");
    rpt.SetDataSource(dt);
    
    rpt.ExportToDisk( ExportTypeFormat.PortableDocFormat , "caminho do arquivo");
    

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 24 de agosto de 2010 18:42
  • Rogério,

    Gerou uma exception: Load report failed, na linha:

    rpt.Load("caminho onde salvo o relatorio");

    :/

     

    terça-feira, 24 de agosto de 2010 19:01
  • Mas não funcionava no seu código anterior? Até o rpt.Load eu não mudei nada...

    A excessão não fala mais nada?

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    terça-feira, 24 de agosto de 2010 19:10
  • Rogério,

    Meu relatorio corrompeu sabeselá como, terei que criar outro e tentar novamente, assim que possível te passo uma posição!

    Por hora muito obrigada!!

    terça-feira, 24 de agosto de 2010 19:26
  • terça-feira, 24 de agosto de 2010 19:48
  • Prezado(a),

    Estou migrando seu post para o fórum de Geração de Relatórios.

    Por favor, das próximas vezes que for postar alguma dúvida referente a esse assunto, poste por lá.

    Obrigado.


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    terça-feira, 24 de agosto de 2010 22:06
    Moderador
  • Bom dia Rogério,

    Refiz o relatório e quando executei a aplicação, o relatório corrompeu novamente...Então fiz o seguinte:

    Retirei esta parte do código:

                rpt.Load(caminho onde salvo);

                rpt.SetDataSource(dt);

                rpt.ExportToDisk(ExportFormatType.PortableDocFormat, caminho onde salvo);

     

                ExportOptions CrExportOptions;

                DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();

                PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();

                CrDiskFileDestinationOptions.DiskFileName = caminho onde abro;

                CrExportOptions = rpt.ExportOptions;

     

                CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;

                CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;

                CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;

                CrExportOptions.FormatOptions = CrFormatTypeOptions;

                rpt.Export();

     

    E apenas adicionei:

    System.Diagnostics.Process.Start(caminho + extensão pdf);

     

    Agora voltou ao normal, ou seja, abrem os dois (preview e pdf) :/

    quarta-feira, 25 de agosto de 2010 12:20
  •     Relatorio1 rpt = new Relatorio1();
                SqlConnection cnn = new SqlConnection(@"Server=DHARMA0ECIONEK\SQLEXPRESS;Database=UCP;Trusted_Connection=True");
                SqlDataAdapter dta = new SqlDataAdapter();
                dta = new SqlDataAdapter("Select * from pessoa", cnn);
                DataTable dt = new DataTable();
                dta.Fill(dt);

                rpt.Load(@"C:\Projeto\Relatorio1.rpt");
                rpt.SetDataSource(dt);

                crystalReportViewer1.ReportSource = rpt;
                crystalReportViewer1.Refresh();
                crystalReportViewer1.DisplayGroupTree = false;

                ExportOptions CrExportOptions;
                DiskFileDestinationOptions CrDiskFileDestinationOptions = new DiskFileDestinationOptions();
                PdfRtfWordFormatOptions CrFormatTypeOptions = new PdfRtfWordFormatOptions();
                CrDiskFileDestinationOptions.DiskFileName = @"C:\Projeto\Relatorio1.pdf";
                CrExportOptions = rpt.ExportOptions;

                CrExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
                CrExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
                CrExportOptions.DestinationOptions = CrDiskFileDestinationOptions;
                CrExportOptions.FormatOptions = CrFormatTypeOptions;
                rpt.Export();
                System.Diagnostics.Process.Start(@"C:\Projeto\Relatorio1.pdf");
    quarta-feira, 25 de agosto de 2010 14:03
  • Agora teste com o código que te passei para ver se resolve o problema dos dois previews...

    Relatorio1 rpt = new Relatorio1();
    
    SqlConnection cnn = new SqlConnection(@"Server=DHARMA0ECIONEK\SQLEXPRESS;Database=UCP;Trusted_Connection=True");
    
    SqlDataAdapter dta = new SqlDataAdapter();
    dta = new SqlDataAdapter("Select * from pessoa",cnn);
    
    DataTable dt = new DataTable();
    dta.Fill(dt);
    
    rpt.Load(@"C:\Projeto\Relatorio1.rpt");
    rpt.SetDataSource(dt);
    rpt.ExportToDisk( ExportTypeFormat.PortableDocFormat , @"C:\Projeto\Relatorio1.pdf");
    
    System.Diagnostics.Process.Start(@"C:\Projeto\Relatorio1.pdf");
    
    

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quarta-feira, 25 de agosto de 2010 14:13
  • Rogério,

    Não sei se vc vai conseguir entender....

    Ainda abrem os dois, porém no preview não aparece mais o relatório, só a janelinha dele entende? :/

    quarta-feira, 25 de agosto de 2010 17:22
  • Vou testar aqui mais tarde e te falo!

    Mas pelo menos esta gerando o PDF corretamente né?

    At.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    quarta-feira, 25 de agosto de 2010 17:40
  • Está gerando sim!

    Vou aguardar então, mas muito obrigada pela disposição!

    quarta-feira, 25 de agosto de 2010 17:44
  • Lana,

    Novidades quanto a essa sua dúvida?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 2 de setembro de 2010 22:54
    Moderador
  • Oi Lana,

    Não esqueci disto não viu... assim que tiver um tempinho eu vou fazer o teste aqui.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    sexta-feira, 3 de setembro de 2010 12:13