flutter_twain_scanner

A Flutter plugin that enables you to develop Windows desktop applications for digitizing documents using TWAIN, WIA, and eSCL scanners. The plugin offers callable methods for both open-source TWAIN (64-bit only) and the Dynamsoft Service REST API, supporting 32-bit and 64-bit TWAIN, WIA, and eSCL scanners.
Dynamsoft Service REST API
By default, the REST API's host address is set to http://127.0.0.1:18622.
| Method | Endpoint | Description | Parameters | Response |
|---|---|---|---|---|
| GET | /DWTAPI/Scanners |
Get a list of scanners | None | 200 OK with scanner list |
| POST | /DWTAPI/ScanJobs |
Creates a scan job | license, device, config |
201 Created with job ID |
| GET | /DWTAPI/ScanJobs/:id/NextDocument |
Retrieves a document image | id: Job ID |
200 OK with image stream |
| DELETE | /DWTAPI/ScanJobs/:id |
Deletes a scan job | id: Job ID |
200 OK |
To make Dynamsoft Service work:
- Install Dynamsoft Service REST Preview for Windows.
- Request a free trial license.
API Usage
Open Source TWAIN
Future<List<String>> getDataSources(): Get the list of TWAIN compatible scanners.List<String> scanners = await _flutterTwainScannerPlugin.getDataSources();Future<List<String>> scanDocument(int sourceIndex): Scan documents from a selected scanner.int index = _scanners.indexOf(_selectedScanner!); List<String> documentPaths = await _flutterTwainScannerPlugin.scanDocument(index);
Dynamsoft Service
-
Future<List<dynamic>> getDevices(String host, [int? scannerType]): Get the list of TWAIN, WIA, and eSCL compatible scanners.String host = 'http://127.0.0.1:18622'; final scanners = await dynamsoftService.getDevices(host, ScannerType.TWAINSCANNER | ScannerType.TWAINX64SCANNER); -
Future<void> deleteJob(String host, String jobId): Deletes a scan job based on the provided job ID.await dynamsoftService.deleteJob(host, jobId); -
Future<List<String>> getImageFiles(String host, String jobId, String directory): Saves images from a scan job to a directory.List<Uint8List> paths = await dynamsoftService.getImageFiles(host, jobId, './'); -
Future<List<Uint8List>> getImageStreams(String host, String jobId): Retrieves image streams from a scan job.List<Uint8List> paths = await dynamsoftService.getImageStreams(host, jobId); -
Future<String> scanDocument(String host, Map<String, dynamic> parameters): Creates a new scan job using provided parameters.final Map<String, dynamic> parameters = { 'license': 'LICENSE-KEY', 'device': devices[index]['device'], }; parameters['config'] = { 'IfShowUI': false, 'PixelType': 2, 'Resolution': 200, 'IfFeederEnabled': false, 'IfDuplexEnabled': false, }; final String jobId = await dynamsoftService.scanDocument(host, parameters);The parameter configuration is based on Dynamsoft Web TWAIN documentation. It controls the behavior of the scanner.