Export Data Visualization in Web Forms Environment

To export data visualization report items with the Bold Reports® ASP.NET Web Forms Report Writer, use an external browser (Puppeteer) or PhantomJS. Use one of the following options to export the report.

  1. External browser - Puppeteer.
  2. PhantomJS - Classic Tool

External Browser - Puppeteer

To export data visualization report items with Puppeteer in the ASP.NET Web Forms Report Writer, download the Chromium package for your operating system and configure PuppeteerSharp in your application.

In .NET Framework it supports net621 or above version only. To download the Puppeteer package, use the following links.

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
  1. Open the Report Writer application and install the PuppeteerSharp package from NuGet Gallery.
  2. Create the following folder wwwroot/Puppeteer in your application.
  3. Copy the chrome-win folder for Windows from the extracted location and paste into wwwroot/Puppeteer folder in your application.
  4. Open the Report Writer application Web API file.
  5. Set the BrowserTypes Enum property to External.
  6. Create and initialize CustomBrowserType by inheriting the ExportSettings class.
  7. Set the ResourcePath, Scripts and DependentScripts property in Report Writer instance. The following code example demonstrates how to configure Puppeteer in your ASP.NET Web Forms application.

This tutorial uses the product-line-sales.rdl report. You can download it from the product line sales sample report download.

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/15.1.10/scripts/v2.0/common/bold.reports.common.min.js",
            "https://cdn.boldreports.com/15.1.10/scripts/v2.0/common/bold.reports.widgets.min.js",
             //Report Viewer Script
            "https://cdn.boldreports.com/15.1.10/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 and Dependent scripts must be added to export the data visualization report items.

PhantomJS - Classic Tool

To export data visualization report items with PhantomJS in the ASP.NET Web Forms Report Writer, deploy the PhantomJS application in your application folder and set the UsePhantomJS property to true.

To download PhantomJS application and deploy it on your machine, you should accept its license terms on LICENSE and Third-Party document.

  1. Download PhantomJS for windows or PhantomJS for linux and extract the downloaded file.
  2. Copy the PhantomJS file from the extracted bin folder and paste into Resources/PhantomJS folder in your application.
  3. Open the Report Writer application Web API file.
  4. Set the UsePhantomJS property to true.
  5. Set the PhantomJSPath, Scripts and DependentScripts property in Report Writer instance. The following code example demonstrates how to configure PhantomJS in your ASP.NET Web Forms application.

This tutorial uses the product-line-sales.rdl report. You can download it from the product line sales sample report download.

protected void ExportButton_Click(object sender, EventArgs e)
{
    string fileName = null;
    WriterFormat format;
    HttpContext httpContext = System.Web.HttpContext.Current;
    BoldReports.Writer.ReportWriter writer = new BoldReports.Writer.ReportWriter();
    writer.ReportPath = Server.MapPath("~/Resources/sales-order-detail.rdl");

    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 = Server.MapPath("/Resources/PhantomJS");

    writer.ExportResources.Scripts = new List<string>
    {
        //Report Viewer component dependent script
        "https://cdn.boldreports.com/15.1.10/scripts/v2.0/common/bold.reports.common.min.js",
        "https://cdn.boldreports.com/15.1.10/scripts/v2.0/common/bold.reports.widgets.min.js",
            //Report Viewer Script
        "https://cdn.boldreports.com/15.1.10/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 (this.ExportFormat.SelectedValue == "PDF")
    {
        fileName = "sales-order-detail.pdf";
        format = WriterFormat.PDF;
    }
    else if (this.ExportFormat.SelectedValue == "Word")
    {
        fileName = "sales-order-detail.docx";
        format = WriterFormat.Word;
    }
    else if (this.ExportFormat.SelectedValue == "Html")
    {
        fileName = "sales-order-detail.Html";
        format = WriterFormat.HTML;
    }
    else if (this.ExportFormat.SelectedValue == "PPT")
    {
        fileName = "sales-order-detail.ppt";
        format = WriterFormat.PPT;
    }
    else
    {
        fileName = "sales-order-detail.xlsx";
        format = WriterFormat.Excel;
    }
    writer.Save(fileName, format, httpContext.Response);
    }
}

The Scripts and Dependent scripts must be added to export the data visualization report items.