I recommend using Crystal Reports. Here are some links:
The implementation is simple and very similar to any reporting software.
Here is a simple example that returns the report by entering some parameters in the report:
public ActionResult relatorio_pdf()
{
connection.ConectarBanco();
ReportClass rptH = new ReportClass();
rptH.FileName = Server.MapPath("~/Views/Relatorios/relatorio.rpt");//Indica o endereço do relatório
rptH.Load();//Carrega o relatório
rptH.OpenSubreport("relatorio.rpt");
rptH.SetDatabaseLogon("usuario_banco","senha_banco");//Indica o usuário e senha do banco no qual o relatório está relacionado
rptH.SetParameterValue("id_produto", 120);//Indica o parametro para o relatório
Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);//Diz o tipo de stream, no pdf para Crystal Reports
connection.FecharConexaoBanco();
return File(stream, "application/pdf");
}
Note: This example applies to reports that are linked to a database in your configuration. This process does not become necessary in reports with a related DataSet, just use a Controller where you load the page by returning a Stream from your report.