We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now

x

How can I print my rendered RS2008 report from c#?

Medium Priority
672 Views
Last Modified: 2013-11-25
I have a class that renders my report and saves it to a PDF file. As well as the save to pdf I also want to send the report to a printer. (Ideally default printer).

I've attached the code below, does anyone know how to modify this to add the print feature?

I'm using VS2008, .net 3.5 and RS2008.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using BEC.Logger;
using BECScheduler.RS2005;
using BECScheduler.rsExecService;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Printing;
 
namespace ReportServerProject
{    
    public class MyReportRenderer    
    {
        
       
        private BECScheduler.RS2005.ReportingService2005 rs;        
        private BECScheduler.rsExecService.ReportExecutionService rsExec;        
        public string renderTest(string rptname,string sDate,string eDate,string printerName)       
        {            
            rs = new ReportingService2005();            
            rsExec = new ReportExecutionService();
            rs.Credentials = new System.Net.NetworkCredential("user","pass","domain");
            rsExec.Credentials = new System.Net.NetworkCredential("user","pass","domain");
            rs.Url = "http://server/ReportServer_mssql2008/ReportService2005.asmx";
            rsExec.Url = "http://server/ReportServer_mssql2008/ReportExecution2005.asmx";
            string historyID = null;            
            string deviceInfo = null;
            string format = "CSV";
            Byte[] results;
            string encoding = String.Empty;
            string mimeType = String.Empty;
            string extension = String.Empty;
            BECScheduler.rsExecService.Warning[] warnings = null;
            string[] streamIDs = null;
            // Default Path;
            string fileName = @"c:\samplereport.csv";
            string _reportName = rptname;//@"/Trend Log Reporting/TrendReport/";
            string _historyID = null; 
            bool _forRendering = false;
            BECScheduler.RS2005.ParameterValue[] _values = null;
            BECScheduler.RS2005.DataSourceCredentials[] _credentials = null;
            BECScheduler.RS2005.ReportParameter[] _parameters = null; 
            try            
            {                
                _parameters = rs.GetReportParameters(_reportName, _historyID, _forRendering, _values, _credentials);
                BECScheduler.rsExecService.ExecutionInfo ei = rsExec.LoadReport(_reportName, historyID);
                BECScheduler.rsExecService.ParameterValue[] parameters = new BECScheduler.rsExecService.ParameterValue[2];
                if (_parameters.Length > 0)
                {
                  parameters[0] = new BECScheduler.rsExecService.ParameterValue();
                  parameters[0].Label = "";
                  parameters[0].Name  = "SDate"; 
                  parameters[0].Value = sDate;
                  parameters[1] = new BECScheduler.rsExecService.ParameterValue();
                  parameters[1].Label = "";
                  parameters[1].Name = "EDate";
                  parameters[1].Value = eDate; 
                }
                rsExec.SetExecutionParameters(parameters, "en-GB");
                results=  rsExec.Render(format, deviceInfo, out extension, out encoding, out mimeType, out warnings, out streamIDs);
 
              
                using (FileStream stream = File.OpenWrite(fileName))
                    
                {                    
                    stream.Write(results, 0, results.Length);
                    
                    
                }           
            }            
            catch (Exception ex)            
            {
                new BEC.Logger.Logger().ErrorLog(ex.Message);
                throw ex;
                           }
            return (fileName);
  
            
            
        }
    }
    }

Open in new window

Comment
Watch Question

Rob FarleyConsultant
CERTIFIED EXPERT

Commented:
This blog entry should help.

http://geekswithblogs.net/bleepzter/archive/2008/10/09/printing-a-pdf-file-to-a-network-printer-with-c.aspx

It's not something I've actually had to do before, but it should be easy enough.

Rob

Author

Commented:
So that article uses the below code.

I'm new to development. How would I replace the tempDir with my directory and set it to print a specific file from a location (e.g. c:\reports)

Also, how do I call the public void into action?
using System;                                                               
using System.Collections.Generic;                                           
using System.ComponentModel;                                                
using System.Data; System.Drawing;                                          
using System.IO;                                                            
using System.Text; System.Windows.Forms;                                    
using System.Management;                                                    
using System.Management.Instrumentation;                                    
                                                                            
/* the stuff in between is not relevant that's why its not included  */     
                                                                            
private void print(ref DirectoryInfo tempDir)                               
{                                                                           
    try                                                                     
    {                                                                       
        foreach(FileInfo file in tempDir.GetFiles("*.pdf"))                 
        {                                                                   
            file.CopyTo("\\\\XYZ\\Phaser77\\" + file.Name);                 
        }                                                                   
    }                                                                       
    catch(Exception ee){ }                                                  
}     

Open in new window

Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION
Rob FarleyConsultant
CERTIFIED EXPERT

Commented:
Ah, ok. If that works, then great!
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.