Stimulsoft Reports
Reporting tool for React
Cross-platform reporting toolkit designed for use with the React library. Our solution is compatible with React 16.8 and higher, including the latest React version, and provides everything you need to create, edit, view, and export reports. The server-side of the product leverages ASP.NET MVC and .NET.Advanced Reporting
Professional reports of any complexity - fast, intuitive, and with an instant preview of the results.Loading...
Client-side installation
Quick start in just a couple of minutes and only a few lines of code. Download the npm package and easily integrate a React report generator into your application. Create, view, and export interactive reports using a powerful report designer and data visualization components. bash
npm install stimulsoft-viewer-react
Server-side installation
Quick server-side setup for your application. Install the required package and add a few lines of code to configure the controller. The server-side is built on ASP.NET MVC, .NET or Java, and provides full reporting engine functionality. bash
dotnet add package Stimulsoft.Reports.React
How to view
View ready-made reports directly in your application. The built-in React Report Viewer provides fast and convenient report display within your web application. Use interactive navigation, search, zoom, and export features for a seamless reporting experience. App.tsx
import React from 'react';
import { StimulsoftViewer } from 'stimulsoft-viewer-react';
export const App: React.FC = () => {
return (
<StimulsoftViewer
requestUrl="/Viewer/{action}"
action="InitViewer"
height="100vh"
/>
)
}
How to export
Export reports to PDF, Excel, Word, HTML, CSV, XML, JSON, RTF, OpenDocument, text files, and image formats including PNG, JPEG, BMP, TIFF, and SVG. Use React reporting components to create, view, and export professional reports for any business application. App.tsx
import React, { useRef } from 'react';
import { StimulsoftViewer, StimulsoftViewerHandle }
from 'stimulsoft-viewer-react';
export const App: React.FC = () => {
const viewerRef = useRef<StimulsoftViewerHandle>(null);
return (
<div>
<input
type="button"
onClick={() => { if (viewerRef.current)
viewerRef.current.export('Pdf',
{ ImageResolution: 200 }); }}
value="Export to PDF"
/>
</div>
);
};
Server-Side Report Processing on ASP.NET or Java
The Stimulsoft server-side component for React is built on the ASP.NET or Java platform and runs on Windows, macOS, and Linux. All resource-intensive tasks – template loading, rendering, calculations, and export to various formats – are offloaded to the server, which eases the client-side load and boosts overall application performance. The solution supports .NET 6, .NET 8, .NET 10, and all later versions, as well as Java 8+, including both plain Java applications and the Spring Boot framework, ensuring stable operation in modern enterprise environments. ViewerController.cs
using Microsoft.AspNetCore.Mvc;
using Stimulsoft.Report;
using Stimulsoft.Report.React;
namespace Integrating_the_Report_Viewer_into_an_Application.Controllers
{
[Controller]
public class ViewerController : Controller
{
static ViewerController()
{
// How to Activate
//Stimulsoft.Base.StiLicense.Key = "6vJhGtLLLz2GNviWmUTrhSqnO...";
//Stimulsoft.Base.StiLicense.LoadFromFile("license.key");
//Stimulsoft.Base.StiLicense.LoadFromStream(stream);
}
[HttpPost]
public IActionResult InitViewer()
{
var requestParams = StiReactViewer.GetRequestParams(this);
var options = new StiReactViewerOptions();
options.Actions.GetReport = "GetReport";
options.Actions.ViewerEvent = "ViewerEvent";
options.Toolbar.ShowPinToolbarButton = false;
options.Appearance.ScrollbarsMode = true;
return StiReactViewer.ViewerDataResult(requestParams, options);
}
[HttpPost]
public IActionResult GetReport()
{
var report = StiReport.CreateNewReport();
var path = StiReactHelper.MapPath(this, $"Reports/MasterDetail.mrt");
report.Load(path);
return StiReactViewer.GetReportResult(this, report);
}
[HttpPost]
public IActionResult ViewerEvent()
{
return StiReactViewer.ViewerEventResult(this);
}
}
}
package com.stimulsoft.demo;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.stimulsoft.base.json.JSONObject;
import com.stimulsoft.base.mail.StiMailProperties;
import com.stimulsoft.report.StiReport;
import com.stimulsoft.report.StiSerializeManager;
import com.stimulsoft.web.proxyee.StiHttpServletRequest;
import com.stimulsoft.web.proxyee.StiHttpServletResponse;
import com.stimulsoft.webviewer.StiReactViewerHandler;
import com.stimulsoft.webviewer.StiWebViewerOptions;
import com.stimulsoft.webviewer.servlet.StiWebViewerActionServletHelper;
public class StiReactViewerActionServlet extends HttpServlet implements StiReactViewerHandler {
private static final long serialVersionUID = 2759116620736251447L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processing(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
processing(request, response);
}
protected void processing(HttpServletRequest request, HttpServletResponse response) {
StiWebViewerActionServletHelper.processing(new StiHttpServletRequest(request, this), new StiHttpServletResponse(response));
}
public StiWebViewerOptions getOptions(StiHttpServletRequest request, StiHttpServletResponse response) {
StiWebViewerOptions options = new StiWebViewerOptions();
options.getAppearance().setScrollbarsMode(true);
return options;
}
public StiReport getReport(StiHttpServletRequest request, StiHttpServletResponse response, JSONObject viewerProperties) {
try {
File reportFile = new File(request.getSession().getServletContext().getRealPath("reports/" + viewerProperties.getString("reportName")));
StiReport report = StiSerializeManager.deserializeReport(reportFile);
report.render();
return report;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public StiMailProperties getMailProperties(StiHttpServletRequest request, StiHttpServletResponse response) {
StiMailProperties mailProperties = new StiMailProperties();
// fill necessary fields
return mailProperties;
}
}
package com.stimulsoft.demo;
import java.io.File;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.core.io.ClassPathResource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.stimulsoft.base.json.JSONObject;
import com.stimulsoft.base.mail.StiMailProperties;
import com.stimulsoft.report.StiReport;
import com.stimulsoft.report.StiSerializeManager;
import com.stimulsoft.web.proxyee.StiHttpServletRequest;
import com.stimulsoft.web.proxyee.StiHttpServletResponse;
import com.stimulsoft.webviewer.StiReactViewerHandler;
import com.stimulsoft.webviewer.StiWebViewerOptions;
import com.stimulsoft.webviewer.servlet.StiWebViewerActionServletHelper;
@RestController
public class StiViewerController implements StiReactViewerHandler {
@RequestMapping("/webviewer/**")
public void StiWebViewer(HttpServletRequest request, HttpServletResponse response) {
StiWebViewerActionServletHelper.processing(new StiHttpServletRequest(request, this), new StiHttpServletResponse(response));
}
public StiWebViewerOptions getOptions(StiHttpServletRequest request, StiHttpServletResponse response) {
StiWebViewerOptions options = new StiWebViewerOptions();
options.getAppearance().setScrollbarsMode(true);
return options;
}
public StiReport getReport(StiHttpServletRequest request, StiHttpServletResponse response, JSONObject viewerProperties) {
try {
File reportFile = new ClassPathResource(viewerProperties.getString("reportName")).getFile();
StiReport report = StiSerializeManager.deserializeReport(reportFile);
report.render();
return report;
} catch (Exception e) {
return null;
}
}
public StiMailProperties getMailProperties(StiHttpServletRequest request, StiHttpServletResponse response) {
StiMailProperties mailProperties = new StiMailProperties();
// fill necessary fields
return mailProperties;
}
}

Your main tool – the Designer for reports, dashboards, and forms
The Stimulsoft Designer is the central tool of the ecosystem for creating professional reports, dashboards, PDF forms, and data visualizations with no unnecessary complexity. Everything you need — data connection, calculations, groupings, visual styling — is all in one workspace.The interface is available in 40 languages, runs on any operating system and in the browser, making report development convenient across all platforms. Quick-start wizards and ready-to-use templates help you go from idea to final document instantly, accelerating the creation of interactive reports for any business task.