Rendering Charts and Graphs in PDFs

IronPDF can render web pages containing charts, graphs, and other elements built with modern JavaScript technologies.

IronPDF supports WebGL, allowing it to process web canvas-built elements using the machine's hardware graphics capabilities.

IronPDF supports all third-party chart libraries, including:

  • C3.js
  • D3.js
  • Highcharts

The setEnableJavaScript method on the ChromePdfRenderOptions object enables the developer to enable the processing of JavaScript referenced internally or externally within a web page. This property must be set to true to allow IronPDF to process the JavaScript needed to render the charts and graphics on a webpage.

The setRenderDelay configures IronPDF to postpone its interpreting of a web page's JavaScript for a specified amount of time (in milliseconds) after it has loaded its DOM. This method is useful in ensuring that IronPDF's HTML-to-PDF converter captures content that appears on a web page seconds after a browser finishes loading it initially. This is particularly relevant for asynchronous JavaScript code that takes a long time to complete.

Refer to the JavaScript Charts to PDF Code Example for more details about additional methods available on the ChromePdfRenderOptions class.


Render JavaScript Charts into PDF

  1. Add IronPDF to your Maven project:

    <dependency>
     <groupId>com.ironsoftware</groupId>
     <artifactId>ironpdf</artifactId>
     <version>XXX.X.X</version>
    </dependency>
    <dependency>
     <groupId>com.ironsoftware</groupId>
     <artifactId>ironpdf</artifactId>
     <version>XXX.X.X</version>
    </dependency>
    XML
  2. Use ChromePdfRenderOptions to enable JavaScript and configure delay/media type.
  3. Render HTML (inline string, file, or URL) using PdfDocument.renderHtmlAsPdf(...).
  4. Save the output with saveAs(...).

import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.render.ChromePdfRenderOptions;
import com.ironsoftware.ironpdf.render.CssMediaType;
import com.ironsoftware.ironpdf.render.WaitFor;
import java.io.IOException;
import java.nio.file.Paths;

public class JsChartsToPdf {

    public static void main(String[] args) throws IOException {
        String htmlWithCharts = """
            <html><body>
              <div id="chart"></div>
              <script src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.js"></script>
              <link href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.css" rel="stylesheet"/>
              <script>
                var chart = c3.generate({
                  bindto: '#chart',
                  data: {
                    columns: [
                      ['data1', 30,200,100,400,150,250],
                      ['data2', 50,20,10,40,15,25]
                    ]
                  }
                });
              </script>
            </body></html>
            """;

        // Configure PDF rendering options
        ChromePdfRenderOptions options = new ChromePdfRenderOptions()
            .setEnableJavaScript(true)             // run JS
            .setWaitFor(new WaitFor(3000))         // wait 3 seconds
            .setCssMediaType(CssMediaType.PRINT);  // use print styles

        // Render HTML to PDF using IronPDF
        PdfDocument pdf = PdfDocument.renderHtmlAsPdf(htmlWithCharts, options);

        // Save the PDF
        pdf.saveAs(Paths.get("charts_output.pdf"));

        System.out.println("PDF with charts saved as 'charts_output.pdf'");
    }
}
import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.render.ChromePdfRenderOptions;
import com.ironsoftware.ironpdf.render.CssMediaType;
import com.ironsoftware.ironpdf.render.WaitFor;
import java.io.IOException;
import java.nio.file.Paths;

public class JsChartsToPdf {

    public static void main(String[] args) throws IOException {
        String htmlWithCharts = """
            <html><body>
              <div id="chart"></div>
              <script src="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.js"></script>
              <link href="https://cdnjs.cloudflare.com/ajax/libs/c3/0.7.20/c3.min.css" rel="stylesheet"/>
              <script>
                var chart = c3.generate({
                  bindto: '#chart',
                  data: {
                    columns: [
                      ['data1', 30,200,100,400,150,250],
                      ['data2', 50,20,10,40,15,25]
                    ]
                  }
                });
              </script>
            </body></html>
            """;

        // Configure PDF rendering options
        ChromePdfRenderOptions options = new ChromePdfRenderOptions()
            .setEnableJavaScript(true)             // run JS
            .setWaitFor(new WaitFor(3000))         // wait 3 seconds
            .setCssMediaType(CssMediaType.PRINT);  // use print styles

        // Render HTML to PDF using IronPDF
        PdfDocument pdf = PdfDocument.renderHtmlAsPdf(htmlWithCharts, options);

        // Save the PDF
        pdf.saveAs(Paths.get("charts_output.pdf"));

        System.out.println("PDF with charts saved as 'charts_output.pdf'");
    }
}
JAVA