Dynamic Web TWAINRelease Notes

Scanner Core Module
  • Scanner Core Module
  • Optional Addon Modules
How to Upgrade?

16.0 (06/16/2020)

features to the Core module

  • Added a new mobile edition that enables document capturing via mobile cameras and other document manipulation functionalities. Most of the existing methods and properties are made compliant with this new edition.
  • Added WASM based document manipulation functionalities which enable the use of all features of Dynamic Web TWAIN except for document scanning without installing the Dynamsoft Service.
  • Added setting Dynamsoft.WebTwainEnv.UseLocalService to switch the working mode of the library between Local-Service mode and WASM mode. Only valid on desktop operating systems.
  • Replaced the built-in image viewer including the built-in image editor with the Dynamsoft Viewer.
  • The creation of a WebTwain instance is now independent from the UI. In version 16.0, you can create a WebTwain instance in 4 ways
    • Specify a Container that has a ContainerId and assign it to Dynamsoft.WebTwainEnv.Containers. A ContainerId is essentially the id of an HTMLDivElement element which is required for generating a built-in Dynamsoft Viewer. Then call the method Dynamsoft.WebTwainEnv.GetWebTwain with ContainerId as the argument to get the instance.
    • Call the method Dynamsoft.WebTwainEnv.CreateDWTObject to create an instance with built-in Dynamsoft Viewer.
    • Specify a Container that has a WebTwainId but no ContainerId and assign it to Dynamsoft.WebTwainEnv.Containers. A WebTwainId is just a string to uniquely specify the instance. Then call the new method Dynamsoft.WebTwainEnv.GetWebTwainEx with WebTwainId as the argument to get the instance.
    • Call the method Dynamsoft.WebTwainEnv.CreateDWTObjectEx to create an instance without a built-in Dynamsoft Viewer.
    • Note:
    • If a WebTwain instance is created without a built-in Dynamsoft Viewer, you can create a Viewer later and bind it to the existing WebTwain instance using the new method BindViewer(). The Viewer can also be updated or unbound with the new methods UpdateViewer() and UnbindViewer().
  • Added method LoadImageFromBinary() to enable importing data from binary (an object of the type Blob or ArrayBuffer).
  • Added methods getCapabilities() and setCapabilities() which enables fast capability negotiation.
  • Added method EnableSourceUI() to enable TWAIN configuration without scanning.
  • Added method SelectImages() to select one or multiple images programmatically. This method replaces the old APIs SetSelectedImageIndex() and SelectedImagesCount.
  • Added property SelectedImagesIndices to return the indices of selected images. This property replaces the old API GetSelectedImageIndex().
  • Added Viewer-specific APIs: setViewMode(), updateUISettings(), setButtonClass(), setSelectedImageArea(), zoomIn(), zoomOut(), bindCustomElement(), showCustomElement(), hideCustomElement(), toggleCustomElement(). These methods should be called like this: DWObject.Viewer.zoomIn().

Updated Add-on Features

  • Added PDF Rasterizer mobile edition.
  • Extended the PDF Rasterizer on desktop to the WASM mode.
  • Replaced the old barcode reader add-on with a new add-on which now supports both Local-Service mode and WASM mode of the desktop editions as well as the mobile edition.

Better performance

  • In favor of the WASM mode, image transferring now uses JPEG more often than PNG. Previously, there was only the Local-Service mode and only PNG was used.
  • The following methods are made asynchronous (while still synchronous-compliant):
    ChangeImageSize(), ConvertToBW(), ConvertToGrayScale(), Crop(), Erase(), FilterImageByTag(), Flip(), GetSelectedImageSize(), GetSkewAngle(), Invert(), Mirror(), Rotate(), RotateEx(), RotateLeft(), RotateRight(), SetDPI(), SetImageWidth()

    NOTE: These APIs must be called asynchronously in the WASM mode.

Changed behaviors

  • The methods HTTPDownload() and HTTPDownloadEx() no longer has the "Content-Type" header in their HTTP Get requests.
  • The method GetSourceNames(true) now returns more information which includes "DriverType" and "DeviceInfo".


  • Deprecated SetSelectedImageIndex(), GetSelectedImageIndex() and SelectedImagesCount in favor of the new method SelectImages().
  • Deprecated IfOpenImageWithGDIPlus in favor of the built-in imaging decoder.
  • Deprecated the following APIs in favor of the new methods getCapabilities() and setCapabilities()

    CapGet(), CapGetHelp(), CapGetCurrent(), CapGetDefault(), CapGetFrameBottom(), CapGetFrameLeft(), CapGetFrameRight()CapGetFrameTop(),CapGetLabel(), CapGetLabels(), CapSet(), CapReset(), CapSetFrame(), CapIfSupported(), GetCapItems(), GetCapItemsString(), SetCapItems(), SetCapItemsString(), Capability, CapNumItems, CapMaxValue, CapMinValue, CapCurrentValue, CapCurrentIndex, CapDefaultValue, CapDefaultIndex, CapType, CapValueType, CapDescription, CapStepSize, CapValue, CapValueString

Changes about the ActiveX edition

  • Added method SelectImages().
  • Added property SelectedImagesIndices.

15.3.1 (03/05/2020)


  • [HTML5] When reinstalling the Dynamsoft service, the service configuration file DSConfiguration.ini will now be replaced directly.


  • [HTML5] Fixed a bug where the scanner stops responding when you cancel the scan multiple times.
  • [HTML5] Fixed a bug where the scanner stops responding when the library tries to retrieve extended information that contains magnetic data.
  • [HTML5] Fixed a bug where images can‘t be selected in batches (CTRL/SHIFT + Click) after swapping the current tag.

15.3 (01/07/2020)


  • [HTML5] Added a new configuration extendedImageInfoQueryLevel for the method AcquireImage that allows setting up how the library queries extended image info items. In version 15.2, the default level would result in scanning failure or serious performance issues with some scanners.
  • [HTML5] Added a new method GetSourceNames(bool bIncludeDetails) that returns the list of available data sources as a string array. On Windows, when bIncludeDetails is set to true, this method returns more details about the sources including its protocol versions, manufacturer and whether it's the default/current source, etc.
  • [HTML5] Added a new method SelectAllImages() that can select all images in buffer or all images that have been filtered by tags.
  • [HTML5] Added a new method ConvertToBW(number imageIndex) that converts a specific image to Black & White.
  • [HTML5] Added a new method Invert(number imageIndex) that inverts a specific image.


  • [HTML5] Further improved security by deleting the methods FTPUploadDirectly(), FTPDownloadDirectly(), FileExist() and changing the methods HTTPUploadThroughPostDirectly(), HTTPDownloadDirectly() to only work on whitelisted images/files (check NOTE below).
  • [HTML5] Changing the default SSL certificates is now officially supported.
  • [HTML5] Changed the property LogLevel so that when it's set to 1\0, it's equivalent to setting LogLevel to 14\1 in the file C:\Windows\SysWOW64\Dynamsoft\DynamsoftServicex64\DSConfiguration.ini
  • [HTML5] Local caching is made smoother by introducing a new process to do the caching when the threshold is reached. As a result, it is significantly faster when loading a great many files.
  • [HTML5 | macOS] When using ICA(Image Capture Architecture) sources, info that was written to system log is now written to wtss.log.
  • [Upload Module] Now the module can only upload files/images that are whitelisted (check NOTE below)

    Note: How whitelisting is done

    • Dynamsoft Service keeps a whitelist of all images in buffer as well as images saved by the Service. The whitelist lives on until the current service process is destroyed.
    • Each Dynamic Web TWAIN object keeps a whitelist of file paths that are retrieved in the callback function OnGetFilePath for the method ShowFileDialog().


  • [HTML5] Fixed a bug where Dynamsoft Service gets stuck when you try to perform concurrent operations on the same image(s) like uploading and converting them at the same time.
  • [HTML5] Fixed a bug where Dynamsoft Service crashes when the callback OnBitmapChanged is called recursively.

15.2 (09/19/2019)


  • [HTML5] Added the capability to add tags to images. The tags can then be used to filter the images. The new APIs are TagImages, ClearImageTags, SetDefaultTag and FilterImagesByTag.


  • [HTML5] Tidied up the Dynamsoft Service installer by removing redundant files.
  • [HTML5] Unified image decoding capabilities for JPEG and PNG on Windows, macOS and Linux.
  • [HTML5] Improved the speed of PDF decoding by loading the file as a whole instead of per page.
  • [HTML5 | Win] Improved Windows buffer management so that its capacity is only limited by the size of disk space on the machine.
  • [HTML5 | macOS] Improved macOS installers for better user experience.
  • [ActiveX | Win] Aligned PDF rasterizer in ActiveX so that it shares the same feature set with the HTML5 edition.


  • [HTML5] Fixed a bug with the API CreateTextFont where the text takes up extra space when it is rotated by 90 degrees.
  • [HTML5] Fixed a bug where printing results in unnecessary extra blank pages in Firefox or IE11.
  • [HTML5] Fixed a bug where a missing filename parameter results in upload failure.
  • [HTML5 | Win] Fixed a bug where the library attempts to download an incorrect installer when the Barcode Reader add-on is used.
  • [HTML5 | Win] Fixed a bug with the API GenerateURLForUploadData so that it returns an URL that shows the correct SDK version.
  • [All] Fixed a bug where 8-bit image data can't be compressed as a JPEG-TIFF.
  • [All]Fixed a bug with the event OnTopImageInTheViewChanged where it doesn't get triggered if images are acquired into an empty buffer.

15.1 (08/13/2019)


  • [HTML5 | macOS] Added 64bit support to macOS.
  • [HTML5 | macOS & Linux] Expanded the event OnPostTransferAsync from Windows to macOS & Linux. The method serves as the asynchronous counterpart to the existing synchronous event OnPostTransfer. Information about the transferred image is returned in the event listener.
  • [HTML5 | macOS & Linux] Expanded the method startScan from Windows to macOS & Linux. The method accepts a JSON object that specifies all the scan parameters. This makes it simpler and even faster to initiate a scan job. At the same time, you can specify how you want the scanned data to be processed by adding extra output parameters in the same JSON object.


  • [HTML5 | Win] Improved the methods ConvertToBlob, ConvertToBase64 and image loading methods so that they can handle much bigger files.
  • [HTML5 | Linux] Improved the image encode/decode functionalities on Linux so that it can encode/decode files just like Windows.
  • [HTML5 | macOS & Linux] Expanded PDF related capabilities to macOS and Linux so that all 3 platforms share the same features.
  • [HTML5 | macOS & Linux] Improved the PDF decode engine so that it can load more PDF files without invoking the PDF rasterizer.


  • [HTML5 | Win] Fixed a bug where some scanners can only scan with document feeder but not the flatbed.

15.0 (06/27/2019)


  • [HTML5 | Windows] Added a new method startScan which accepts a JSON object that specifies all the scan parameters. This makes it simpler and even faster to initiate a scan job. At the same time, you can specify how you want the scanned data to be processed by adding extra output parameters in the same JSON object.
  • [HTML5 | Windows] Added a new event OnPostTransferAync as the asynchronous counterpart to the existing synchronous event OnPostTransfer. Information about the transferred image is returned in the event listener.
  • [HTML5 | Windows] Added a new PDF core DLL as the default engine for PDF encoding & decoding. This new PDF DLL has added support for JPEG2000 and JBIG2 compression types.
  • [HTML5 | Windows] Added a new method PDF.Write.Setup which accepts a JSON object that contains all the parameters needed for creating PDF files.
  • [HTML5 | Mac] Added a new file libDynamicImg.dylib to the macOS edition which provides functionalities equal to those provided by the file DynamicImage.dll on Windows. Essentially, this file offers better image encoding and decoding.
  • [HTML5] Added a pair of methods IndexToImageID and ImageIDToIndex which converts the index of an image to its image id or vice versa. The id of an image is an unique number that can be used to specify the image.
  • [HTML5] Added a new event OnIndexChangeDragDropDone which is triggered when you drag and drop images to resort them in the viewer. The event returns the from and to indices for the operation.


  • [HTML5] Improved the method AcquireImage by adding two more options IfGetImageInfo & IfGetExtImageInfo to its parameter optionalDeviceConfig which are true by default and means extra image info will be returned with each transferred image.
  • [HTML5 | Windows] Improved the method SetFileXferInfo so that you can specify a naming pattern for the transferred images when the transfer mode is Disk File.
  • [HTML5] Improved the performance of Dynamsoft Service by allowing two time-consuming operations to occur concurrently. The affected methods are ConvertToBlob, ConvertToBase64, GenerateURLForUploadedData as well as a few HTTP Upload methods.
  • [HTML5] Improved service connecting efficiency by removing optional ports and use the same ports no matter it's 64bit service or 32bit. Also, during initialization, JavaScript will attempt to connect to the core scan module directly instead of connecting to the service first.
  • [HTML5] Improved the functions ConvertToBase64, ConvertToBlob, GenerateURLForUploadData, HTTPUpload, HTTPUploadAllThroughPostAsMultiPageTIFF, HTTPUploadAllThroughPostAsPDF, HTTPUploadThroughPost, HTTPUploadThroughPostAsMultiPagePDF, HTTPUploadThroughPostAsMultiPageTIFF, HTTPUploadThroughPostEx so that the current indices of the images which were operated on in these methods are returned in the callback functions. This is due to the fact that the indices might have changed during these time-consuming operations.


  • [HTML5 | Windows] 64bit service has been made the default option on 64bit machines.


  • [HTML5 | Windows] Fixed a bug where it takes too much time to load a network file in RDS-mode Chrome.
  • [HTML5 | Windows] Fixed a bug where an unwanted black line may appear as the right edge of saved TIFF files.

Previous Changes >>

It is a light-weighted PDF library working with Dynamic Web TWAIN SDK on the client side to convert text-based PDF files into images and display in the image viewer. (6/18/2020)


  • This addon now works both in the Local-Service mode and the WASM mode.
  • This addon now works on iOS, iPadOS & Android too. (06/27/2019)


  • [HTML5 | Windows] Changed the old DLL names to reflect the fact that they only work as the rasterizer.
  • [HTML5 | Windows] Removed the old PDF.Download method.
  • [HTML5 | Windows] Removed license limitation on the method IsTextBasedPDF so that it can always be used regardless of whether a license is in place. (9/06/2018)


  • Added the version number of the library to the name of the library so that different versions of the library can co-exist.
  • Added a method IsModuleInstalled() to detect whether the library has been installed on the client machine.
  • Updated the library to version which is more stable and uses the memory more efficiently. The new library also has fixed a bug where a loaded PDF may appear tilted. (7/17/2018)


  • Fixed the typo EnumDWT_ConverMode to EnumDWT_ConvertMode

10.2 (1/16/2018)


  • Upgraded the current PDF Rasterizer engine for Windows client.


  • Added support for macOS client and Linux client.

9.6 (03/01/2016)


  • Added PDF Rasterizer Add-on to convert text-based PDF files to images. This way, text PDF files can be successfully displayed in the viewer of the Dynamic Web TWAIN Scanner Core module.
  • Available APIs are:
    • Addon.PDF.SetConvertMode: to turn on or off the PDF rasterizer feature.
    • Addon.PDF.Download: to deploy the PDF library from the server side to the client machine.
    • Addon.PDF.SetPassword: set the password to decrypt the targeted PDF file.
    • Addon.PDF.SetResolution: to set the output image resolution.
    • Addon.PDF.IsTextBasedPDF: to detect if a PDF file is text-based or not.

A professional linear & 2D barcode reading library for recognizing barcode from any document captured from scanners, cameras or file systems. (6/18/2020)

  • This addon has been redesigned with brand-new APIs.
  • This addon now works both in the Local-Service mode and the WASM mode.
  • This addon now works on iOS, iPadOS & Android too.

7.3 (01/07/2020)

  • Updated the library to version 7.3.
  • Removed independent service checking logic.

7.1 (09/19/2019)

  • Updated the library to version 7.1.

7.0 (08/13/2019)

  • Updated the library to version 7.0.

6.5.2 (06/27/2019)

  • Updated the library to version 6.5.2.

6.4.1 (01/15/2019)

  • Expanded the Barcode Reader feature to the ActiveX.
  • Updated the Barcode reader libraries to version 6.4.1.

6.3 (09/18/2018) (Since DWT 14.1)

5.2 (09/18/2017)


  • Improved the localization and recognition algorithms for PDF417 barcodes.
  • Optimized the de-blur algorithm for 1D barcodes to improve the recognition accuracy.
  • Optimized the timeout support. Now it is possible to stop barcode recognition by timeout.
  • Increased QR Code and DataMatrix barcode recognition speed for B&W images.

5.1 (06/20/2017) (since DWT 13.0)


  • Reconstructed the barcode reader SDKs to closely working with the Scanner Core module of the Dynamic Web TWAIN SDK.
  • Added support for reading barcodes from a base64 string image.
  • New de-blur algorithm for 1D barcodes to improve the accuracy when scanning linear barcodes from out-of-focus, blurred images.
  • Added new APIs that enable you to specify page numbers, barcode regions and barcode angles for barcode detection. These greatly improve the decoding workflow and barcode reading efficiency.
  • Added ImageCaptureDevice API to set the capture device (scanner, camera or fax) being used to scan barcode images. When set, it will use a better and more appropriate image processing technique to the images captured from that device.
  • Added BarcodeColorMode API to set the ink color for barcodes searching.
  • Added BarcodeTextEncoding API to set barcode text encoding mode so that you can display special characters properly.
  • Added TimeoutPerPage API to set the maximum amount of time for reading barcodes on one page.
  • Added Angle property to return the rotation angle of a detected barcode.


  • Updated barcode reader library with improved positioning algorithm that can better identify and locate DataMatrix barcodes.

4.3 (10/13/2016) (DWT12.1~12.3.1)


  • New localization algorithm was implemented for 1D barcode scanning to improve barcode reading speed.
  • New multi-thread processing was implemented for 2D barcode reading to improve decoding accuracy.


  • Improved recognition for perspective QR Codes.
  • Optimized decoding performance for large size, special angle and multiple 1D barcodes.
  • Other small fixes and tweaks.

4.2 (04/08/2016) (DWT12.0)


  • Changed 1D barcode decoding module to improve recognition accuracy.

4.1 (01/21/2016) (11.3~11.3.2)


  • Improved positioning algorithm to better identify and localize DataMatrix barcodes.

4.0 (07/23/2015) (11.2)


  • Added CodeBar, Code_93, EAN_8, EAN_13, ITF, UPC_A, UPC_E support to the 1D Barcode Reader module.
  • Added support for PDF417 and DataMatrix.

3.0 (08/13/2015) (DWT11.1)


  • Added support for QR Code and Industrial 2 of 5.

2.0 (07/17/2012) (DWT11.0, internal barcode dll version 9.6)


  • Added support for reading CodeBar, Code_93, EAN_8, EAN_13, ITF, UPC_A, UPC_E.


  • Fixed the bug in the Barcode Reader add-on where barcode location fails for 200 DPI.

1.0 (01/20/2015) (since DWT10.1~10.2, internal barcode dll version 9.5)

Updates in this version include 1D barcode improvements in accuracy and performance for Code 39 and Code128 recognition. Also image preprocessing is improved. For Code 128, the recognition ratio and speed have jumped up by as much as 30 percent.

15.0 (06/27/2019)


  • Fixed a bug where the video stream may appear distorted if the DIV to put the stream has a different aspect ratio.

14.3.1 (01/15/2019)


  • Added a new method IsModuleInstalled to detect whether the webcam module has already been installed on the local system.
  • The method GetImageURL and GetImagePartURL are renamed to GetFrameURL and GetFramePartURL.
  • Fixed a bug where the memory may fail to be freed after a frame is captured either by CaptureImage or GetFramePartURL. (11/20/2018)


  • [Webcam Addon] Added Webcam addon back for Windows with a new feature to embed the video stream on the page.

It is a light-weighted pure JavaScript SDK to enable document capturing via the built-in mobile camera in a web page.

2.0 (06/06/2018)


  • Built-in & customizable image viewer, thumbnail viewer and image editor available.
  • Support embedding video stream into a web page.
  • Support common gestures to navigate or zoom in/out images in the image viewer.
  • Advanced image processing: automatic document border detection and automatic prospective deskew.
  • Input image formats include JPEG, PNG, GIF, BMP and WebP.
  • Output image formats include PDF, TIFF, JPEG, BMP, and PNG.
  • Various compression options available when encoding images as TIFF and PDF.
  • Support uploading images via HTTP(s) Protocol.
  • Support downloading a captured image to the local disk of your device.

1.0 (06/10/2017)


  • Support calling the mobile system API to grab images from the image gallery and device camera.
  • Support viewing captured images in an HTML image viewer.
  • Support basic image editing: Zoom in/out, Rotate, Crop.

It is one of the best OCR engines available in the market. (08/13/2019)


  • [OCR Pro] Added a feature to read multiple zones in one OCR operation. (06/27/2019)


  • [OCR Pro] Fixed a bug where the OCR result may not be readable when the target language is Arabic. (11/20/2018)


  • [OCR Pro] Added a new feature to allow multiple OCR processes to run concurrently on the server side. (09/06/2018)


  • [OCR Pro | OCR Basic] Added the version number of the library to the name of the library so that different versions of the library can co-exist.
  • [OCR Pro | OCR Basic] Added a method IsModuleInstalled() to detect whether the library has been installed on the client machine. (07/17/2018)


  • [OCR Pro] Better mechanism to verify the OCR license.

1.0 (07/05/2016)


  • [Windows Only] Added OCR Professional (OCR Pro) module. The module uses Kofax's OCR engine.
  • Added methods Addon.OCRPro.Download, Addon.OCRPro.Recognize, Addon.OCRPro.RecognizeFile, Addon.OCRPro.RecognizeRect, Addon.OCRPro.RecognizeSelectedImages and an OCRResult class to use the OCR Professional seamlessly with Dynamic Web TWAIN on the client-side.
  • Added a feature to Dynamsoft Service for it to accept an OCR Request, do OCR and return the OCR Result. With this feature, the OCR professional SDK can be deployed on the server-side.
  • The OCR Professional module supports multi-thread processing as well as zonal processing.
  • The OCR Professional module supports many more than 30 languages. See a full list ›
  • The OCR Professional module supports extracting text from the following file types: TIFF (G4 / LZW / JPEG), JPEG, PDF, BMP, JPEG2000, JBIG, JBIG2, PNG, PDA, PGX, XPS, WMP, OPG, MAX, AWD, DCX, PCX.
  • The OCR Professional module enables you to save OCR results in the following formats: Searchable PDFs (including PDF/A 1-b). Text over image technology supports multiple image compression formats to reduce the size of PDF files. Text files - TXT, CSV, XML, RTF. String variable.