Report Writer uses WebBrowser Control
to export the data visualization to PDF, PPT,Word, Excel, and HTML file formats. The WebBrowser
is not supported in Core environment. To overcome this limitation in Core environment, we have provided the below options to export the data visualization report item.
External Browser - Puppeteer
In .NET Core it supports
ASP.NET Core 2.1
or above version only. To Download puppeteer package use below link.
Operating System | Download Link |
---|---|
Windows 32-bit |
https://storage.googleapis.com/chromium-browser-snapshots/Win/901912/chrome-win.zip |
Windows 64-bit |
https://storage.googleapis.com/chromium-browser-snapshots/Win_x64/901912/chrome-win.zip |
linux |
https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/901912/chrome-linux.zip |
PuppeteerSharp
package from NuGet Gallery
.wwwroot/Puppeteer
in your application.chrome-win
folder for Windows or chrome-linux
folder for Linux from the extracted location of puppeteer package and paste into wwwroot/Puppeteer
folder in your application.BrowserTypes
Enum property to External
.CustomBrowserType
by inheriting the ExportSettings
class.ResourcePath
, Scripts
and DependentScripts
property in Report Writer
instance. The following code example demonstrates how to configure Puppeteer
in your ASP.NET Core application.In this tutorial, the
product-line-sales.rdl
report is used, and it can be downloaded in this link.
public class HomeController : Controller
{
// IWebHostEnvironment used with sample to get the application data from wwwroot.
private Microsoft.AspNetCore.Hosting.IWebHostEnvironment _hostingEnvironment;
// IWebHostEnvironment initialized with controller to get the data from application data folder.
public HomeController(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Export(string writerFormat)
{
string fileName = null;
WriterFormat format;
string basePath = _hostingEnvironment.WebRootPath;
// Here, we have loaded the sample report from application the folder wwwroot.
FileStream inputStream = new FileStream(basePath + @"\Resources\product-line-sales.rdl", FileMode.Open, FileAccess.Read);
MemoryStream reportStream = new MemoryStream();
inputStream.CopyTo(reportStream);
reportStream.Position = 0;
inputStream.Close();
BoldReports.Writer.ReportWriter writer = new BoldReports.Writer.ReportWriter();
// Puppeteer Option to export the data visualization report items.
writer.ExportResources.BrowserType = ExportResources.BrowserTypes.External;
writer.ExportResources.ResourcePath = basePath + @"/Puppeteer/";
// Initialize the class for puppeteer
writer.ExportSettings = new customBrowsertype(writer.ExportResources.ResourcePath);
writer.ExportResources.Scripts = new List<string>
{
//Report Viewer component dependent script
"https://cdn.boldreports.com/6.2.32/scripts/v2.0/common/bold.reports.common.min.js",
"https://cdn.boldreports.com/6.2.32/scripts/v2.0/common/bold.reports.widgets.min.js",
//Report Viewer Script
"https://cdn.boldreports.com/6.2.32/scripts/v2.0/bold.report-viewer.min.js"
};
writer.ExportResources.DependentScripts = new List<string>
{
"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"
};
if (writerFormat == "PDF")
{
fileName = "ProductLineSales.pdf";
format = WriterFormat.PDF;
}
else if (writerFormat == "Word")
{
fileName = "ProductLineSales.docx";
format = WriterFormat.Word;
}
else if (writerFormat == "CSV")
{
fileName = "ProductLineSales.CSV";
format = WriterFormat.CSV;
}
else
{
fileName = "ProductLineSales.xlsx";
format = WriterFormat.Excel;
}
writer.LoadReport(reportStream);
MemoryStream memoryStream = new MemoryStream();
writer.Save(memoryStream, format);
// Download the generated document from client.
memoryStream.Position = 0;
FileStreamResult fileStreamResult = new FileStreamResult(memoryStream, "application/pdf");
fileStreamResult.FileDownloadName = fileName;
return fileStreamResult;
}
// Add the class to override the method for puppeteer
public class CustomBrowserType : ExportSettings
{
private string puppeteerPath;
public CustomBrowserType(string path)
{
puppeteerPath = path;
}
// Can be used to rendered html data visualization from the given url and convert the image to base 64 string by using external browser
public override string GetImageFromHTML(string url)
{
return LaunchPuppeteer(url).Result;
}
// Can be used to convert the image from Puppeteer
public async Task<string> LaunchPuppeteer(string url)
{
// Assigned the chrome.exe path to the puppeteer
await using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true, ExecutablePath = puppeteerPath + @"chrome-win/chrome.exe"});
await using var page = await browser.NewPageAsync();
await page.GoToAsync(url);
return await page.WaitForSelectorAsync("#imagejsonData").Result.GetPropertyAsync("innerText").Result.JsonValueAsync<string>();
}
}
}
The
Scripts
andDependent
scripts must be added to export the data visualization report items.
PhantomJS - Classic Tool
It supports
ASP.NET Core 2.1
or above version only. To downloadPhantomJS
application and deploy it on your machine, you should accept its license terms on LICENSE and Third-Party document.
PhantomJS
for windows
here and for linux
here and extract the download file.PhantomJS
file from the extracted bin folder and paste into wwwroot/PhantomJS
folder in your application.UsePhantomJS
property to true
.PhantomJSPath
, Scripts
and DependentScripts
property in Report Writer
instance. The following code example demonstrates how to configure PhantomJS
in your ASP.NET Core application.In this tutorial, the
product-line-sales.rdl
report is used, and it can be downloaded in this link.
public class HomeController : Controller
{
// IWebHostEnvironment used with sample to get the application data from wwwroot.
private Microsoft.AspNetCore.Hosting.IWebHostEnvironment _hostingEnvironment;
// IWebHostEnvironment initialized with controller to get the data from application data folder.
public HomeController(Microsoft.AspNetCore.Hosting.IWebHostEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Export(string writerFormat)
{
string fileName = null;
WriterFormat format;
string basePath = _hostingEnvironment.WebRootPath;
// Here, we have loaded the sample report from application the folder wwwroot.
FileStream inputStream = new FileStream(basePath + @"\Resources\product-line-sales.rdl", FileMode.Open, FileAccess.Read);
MemoryStream reportStream = new MemoryStream();
inputStream.CopyTo(reportStream);
reportStream.Position = 0;
inputStream.Close();
BoldReports.Writer.ReportWriter writer = new BoldReports.Writer.ReportWriter();
// PhantomJS Option to export the data visualization report items.
writer.ExportResources.UsePhantomJS = true;
// Set the IncludeText property to true, when text not displayed in the data visualization images.
writer.ExportResources.IncludeText = true;
writer.ExportResources.PhantomJSPath = basePath + @"\PhantomJS\";
writer.ExportResources.Scripts = new List<string>
{
//Report Viewer component dependent script
"https://cdn.boldreports.com/6.2.32/scripts/v2.0/common/bold.reports.common.min.js",
"https://cdn.boldreports.com/6.2.32/scripts/v2.0/common/bold.reports.widgets.min.js",
//Report Viewer Script
"https://cdn.boldreports.com/6.2.32/scripts/v2.0/bold.report-viewer.min.js"
};
writer.ExportResources.DependentScripts = new List<string>
{
"https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"
};
if (writerFormat == "PDF")
{
fileName = "ProductLineSales.pdf";
format = WriterFormat.PDF;
}
else if (writerFormat == "Word")
{
fileName = "ProductLineSales.docx";
format = WriterFormat.Word;
}
else if (writerFormat == "CSV")
{
fileName = "ProductLineSales.CSV";
format = WriterFormat.CSV;
}
else
{
fileName = "ProductLineSales.xlsx";
format = WriterFormat.Excel;
}
writer.LoadReport(reportStream);
MemoryStream memoryStream = new MemoryStream();
writer.Save(memoryStream, format);
// Download the generated document from client.
memoryStream.Position = 0;
FileStreamResult fileStreamResult = new FileStreamResult(memoryStream, "application/pdf");
fileStreamResult.FileDownloadName = fileName;
return fileStreamResult;
}
}
The
Scripts
andDependent
scripts must be added to export the data visualization report items.