• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 636
  • Last Modified:

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

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

0
wint100
Asked:
wint100
  • 2
  • 2
1 Solution
 
rob_farleyCommented:
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
0
 
wint100Author 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

0
 
wint100Author Commented:
I ended up using a seperate class to render the report again in the IMAGE format, then sent this to the printer.
0
 
rob_farleyCommented:
Ah, ok. If that works, then great!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now