This is a migrated thread and some comments may be shown as answers.

Printing Reports in MVC

0 Answers 220 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Eric Moore
Top achievements
Rank 1
Eric Moore asked on 03 May 2012, 09:53 PM
I had been struggling for a few days to try and figure out how to do this. I found a few solutions that were partial answers that finally lead me to this. This will print directly to the default printer without stopping for directions. It doesn't require a special view or partial view. It's just clean. I have some cleanup to do on it, but so far it works quite well. Hopefully someone else finds it useful!

I'm using a custom Knockoutjs grid to start the code
@Html.Hidden("Report", Url.Action("Reports"))
<script id="OHSTemplate" type="text/html">
  <tr>
      <td class="formno">${formNo}</td>
      <td class="name">${ name }</td>
      <td class="online">-</td>
      <td data-bind="click: $parent.PrintCurrent.bind($data, fileName)" class="print"></td>
  </tr>
</script>
 
 //This is Javascript
PrintCurrent: function (file) {
 
            var Url, d;
 
            Url = $('#Report').val();
            d = { fileName: file };
            $.ajaxSettings.traditional = true;
            $.ajax({
                type: "GET",
                url: Url,
                data: d,
                contentType: "application/json;",
                dataType: "json",
                success: function (response) {
                    //response will give success or failure text (response.Result)
                }
            });
             
        }
 
 //This is c# in my controller
public class Results
        {
            string result;
            public Results()
            {
            }
 
            public string Result
            {
                get
                {
                    return this.result;
                }
                set
                {
                    this.result = value;
                }
            }
        }
 
public JsonResult Reports(string fileName)
        {
            if(fileName != null)
            {
 
                Results results = new Results();
 
                List<Report> reports = new List<Report>();
                //Add each Telerik report you have that you'll be searching through
                
                 
                Report r = new Report();
                r = (from c in reports
                            where c.Name == fileName
                            select c).FirstOrDefault();
                //Configure Printer Settings
                System.Drawing.Printing.PrinterSettings printerSettings = new System.Drawing.Printing.PrinterSettings();
 
                if (printerSettings.CanDuplex)
                {
                    printerSettings.Duplex = System.Drawing.Printing.Duplex.Default;
                }
                printerSettings.DefaultPageSettings.Color = false;
 
                //Initialize ReportProcessor
                Telerik.Reporting.Processing.ReportProcessor rp = new Telerik.Reporting.Processing.ReportProcessor();
 
                //Print Report
                try
                {
                    rp.PrintReport(r, printerSettings);
 
                    results.Result = "Print Successful";
                }
                catch (Exception e)
                {
                    results.Result = "Failed to print report because: " + e.InnerException;
                }
 
                return Json(results, JsonRequestBehavior.AllowGet);
            }
             
            return null;
        }

No answers yet. Maybe you can help?

Tags
General Discussions
Asked by
Eric Moore
Top achievements
Rank 1
Share this question
or