Wijmo has just shipped its third major release of 2021. This release includes accessibility support for our PDF and FlexGrid PDF modules, OLAP improvements, and more. Let's take a closer look at the release!

Try Wijmo's controls

Download the latest version of Wijmo

Download Now!

Create Accessible PDFs in JavaScript, Angular, React, and Vue

Wijmo has a PDF module that can be used to generate custom PDF files at runtime in JavaScript. We have been continuously improving this module and have now added the most important feature that it was missing: full accessibility support.

We have added additional APIs to help developers create accessible PDFs using JavaScript.

Here are some accessibility requirements and our new APIs to address them:

  • Tags: added tag and addTag methods to PdfDocument class
  • Artifacts (decorative content): added artifact method to PdfPageArea class
  • Document Language: added a lang property to our PdfDocument class
  • Document Title: added displayTitle property to PdfDocument class

After utilizing these new APIs, you can run the Accessibility Checker in Acrobat Pro to verify that your generated PDF passes all tests. Here are the results for a PDF document generated from one of our demos. Note the tag tree, which is critical for making accessible PDFs.

expense report

If we run the Accessibility Checker tool, we pass the tests!

accessibility checker

Accessible PDF Export from FlexGrid

We have also improved our PDF export from FlexGrid to provide accessibility support. You can now produce tagged PDFs while exporting FlexGrid. To enable this, we added a documentOptions.tagged property to the export settings.

Try our Accessible PDF export demo yourself!

Save Blobs to Files in JavaScript

We have improved our saveFile method to make it easier to save blobs to files in JavaScript. You can now pass blobs directly to our saveFile method.

For example, this code saves the content of a canvas element to a JPG file:

import { saveFile } from '@grapecity/wijmo';

canvas.toBlob(blob => {
   saveFile(blob, 'image.jpg');
}, 'image/jpeg');

Improved PivotEngine dataType Parsing

PivotEngine now scans all records in each field to determine dataType. Previously, it scanned the first 1000 records. It scans all records until it reaches the first non-null value to determine the dataType for each field.

In rare cases, this could impact performance. If a dataset has thousands of null records BEFORE any non-null records, performance would be a little slower. In such a case, you should set the dataType for each field so that the PivotEngine does not need to detect dataType.

PivotGrid Performance Improvements

PivotGrid now utilizes the dataType of fields in PivotEngine and no longer does type detection itself.

This improves performance significantly, especially with larger datasets. As mentioned above, PivotEngine now has improved type detection. But you can also set dataType's explicitly for even better performance.

Dynamic Tab Ordering in All Controls

Modern applications have dynamic pages/views that constantly change with user interaction. Because of this, we are introducing the ability to change the tabIndex (tab ordering) on all Wijmo controls at runtime.

We have added a tabOrder property to all Wijmo controls so that developers have full control over the tab order of their application. This can be set initially or updated dynamically in JavaScript.

Pricing and Packaging Changes

We are happy to introduce our simple and affordable option for buying Wijmo.

There is now a single option: Wijmo Enterprise

  • New license: $699
  • Renewal: $499
  • Includes all of Wijmo's components
  • Includes Platinum Support
  • Perpetual and royalty-free distribution

This new packaging and pricing will give developers an incredible toolset for an accessible price. You won't find a better product for a better price in the market. We are excited to make Wijmo available to more developers worldwide.

Breaking Changes
  • [httpRequest] When sending JSON data, the Content-Type request header is no longer set to "application/json" if it is provided by the user via options.requestHeaders.
  • [FlexGrid] Now, when the user is pasting rows from the clipboard at the bottom new row:

    1. When adding the first row, the 'rowAdded' event will be fired after the 'pasting' event and before the 'rowEditStarting' event for the currently added row.
    2. When adding the next rows after the first one, the 'rowAdded' event will be fired after the 'rowEditEnded' event for the previously added row and before the 'rowEditStarting' event for the currently added row. a. The 'rowAdded' event was fired in the previous builds after the 'rowEditStarted' event and before the 'pastingCell' event. As a result of new behavior, if the 'rowAdded' event is cancelled, the 'rowEditStarting', 'rowEditStarted', 'rowEditEnding' and 'rowEditEnded' events will not be fired.
  • [FlexGrid] Now, when the user is pasting multiple rows from the clipboard at the top new row:
    1. When adding the first row, the 'rowAdded' event will be fired after the 'pasting' event and before the 'rowEditStarting' event for the currently added row.
    2. When adding the next rows after the first one, the 'rowAdded' event will be fired after the 'rowEditEnded' event for the previously added row and before the 'rowEditStarting' event for the currently added row. a. In the previous builds, the 'rowAdded' event was not fired in such a scenario. As a result of new behavior, if the 'rowAdded' event is cancelled, the 'rowEditStarting', 'rowEditStarted', 'rowEditEnding' and 'rowEditEnded' events will not be fired.
  • [FlexGrid] Now, when the user is editing or pasting a single row from the clipboard at the top new row, the 'rowAdded' event will be fired after the 'rowEditEnded' event. The 'rowAdded' event was fired in the previous builds after the 'rowEditEnding' event and before the 'rowEditEnded' event.
  • [InputNumber] From now on, when you type figures from the keyboard, extra decimal places are truncated and not rounded. (WJM-20917)
  • [PivotEngine] To determine each PivotField's dataType, PivotEngine can now scan all rows instead of the first 1000 rows as before. This may bring performance penalties in the case of big data arrays with sparse data with non-null values appearing closer to the end of the array. If this behavior brings unwanted performance penalties, you can get rid of it by explicitly specifying dataType for each PivotField.
  • [InputMask] The width of the internal input element is changing now together with the width of the control. Previously, the internal input element didn't shrink in IE when the control width was less than about 150px, so the padding internally defined for the input element was invisible. Now, this padding is always visible and decreases the working space of the input element. (WJM-20593)

Try Wijmo's controls

Download the latest version of Wijmo

Download Now!