From c35ac34e2ccb39bca087dd8ad8964337ef4828df Mon Sep 17 00:00:00 2001 From: Ellie-dynamsoft Date: Tue, 20 Jun 2023 14:21:19 +0800 Subject: [PATCH 01/10] update to web-twain 18.3 --- README.md | 2 +- angular.json | 7 +++++- package.json | 36 ++++++++++++++-------------- src/environments/environment.prod.ts | 2 +- src/environments/environment.ts | 2 +- tsconfig.base.json | 2 +- 6 files changed, 28 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 25c96ab..34f9f2c 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ This project was bootstrapped with [Angular CLI](https://github.com/angular/angu * Barcode reading ## Usage -Environment: Node.js v16.20.0 +Environment: Node.js v18.16.0 1. Apply for a [30-day free trial license](https://www.dynamsoft.com/customer/license/trialLicense?product=dwt) of Dynamic Web TWAIN. 2. Update the license key in two files `src\environments\environment.ts` and `src\environments\environment.prod.ts` : diff --git a/angular.json b/angular.json index 441a0ba..7fbae45 100644 --- a/angular.json +++ b/angular.json @@ -42,7 +42,12 @@ "with": "src/environments/environment.prod.ts" } ], - "optimization": true, + "optimization": { + "scripts": true, + "styles": { + "minify": true, + "inlineCritical": false + }}, "outputHashing": "all", "sourceMap": false, "extractCss": true, diff --git a/package.json b/package.json index d0027ed..e3ebcd6 100644 --- a/package.json +++ b/package.json @@ -11,31 +11,31 @@ }, "private": true, "dependencies": { - "@angular/animations": "~12.0.0", - "@angular/common": "~12.0.0", - "@angular/compiler": "~12.0.0", - "@angular/core": "~12.0.0", - "@angular/forms": "~12.0.0", - "@angular/localize": "^12.0.0", - "@angular/platform-browser": "~12.0.0", - "@angular/platform-browser-dynamic": "~12.0.0", - "@angular/router": "~12.0.0", - "@ng-bootstrap/ng-bootstrap": "^11.0.0-beta.0", - "bootstrap": "^5.0.0", - "dwt": "18.2.0", + "@angular/animations": "~16.0.0", + "@angular/common": "~16.0.0", + "@angular/compiler": "~16.0.0", + "@angular/core": "~16.0.0", + "@angular/forms": "~16.0.0", + "@angular/localize": "^16.0.0", + "@angular/platform-browser": "~16.0.0", + "@angular/platform-browser-dynamic": "~16.0.0", + "@angular/router": "~16.0.0", + "@ng-bootstrap/ng-bootstrap": "~15.0.0", + "bootstrap": "^5.3.0", + "dwt": "18.3.0", "rxjs": "~6.6.0", "tslib": "^2.1.0", - "zone.js": "~0.11.4" + "zone.js": "~0.13.0" }, "devDependencies": { - "@angular-devkit/build-angular": "~12.0.0", - "@angular/cli": "~12.0.0", - "@angular/compiler-cli": "~12.0.0", + "@angular-devkit/build-angular": "~16.0.0", + "@angular/cli": "~16.0.0", + "@angular/compiler-cli": "~16.0.0", "@types/node": "^12.11.1", "@types/jasmine": "~3.6.0", "@types/jasminewd2": "~2.0.3", "codelyzer": "^6.0.0", - "jasmine-core": "~3.7.0", + "jasmine-core": "~5.0.0", "jasmine-spec-reporter": "~5.0.0", "karma": "~6.3.0", "karma-chrome-launcher": "~3.1.0", @@ -45,6 +45,6 @@ "protractor": "~7.0.0", "ts-node": "~8.3.0", "tslint": "~6.1.0", - "typescript": "~4.2.3" + "typescript": "~4.9.5" } } diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index a4d01b4..9436c1e 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, Dynamsoft: { resourcesPath: 'assets/dwt-resources', - dwtProductKey: 't0100CgEAAI/Kalkph+rANa7xvFeYzy2ZJaF0sV188r8K/knF/akFHHvAHdHAtGHQJrpxP+nqlDJkXOD65sKMbWhdmp6b7QgCWLr5A0huNQqu+DW0v3gAgcFwAvEGSBQj0nwHo981mg==', + dwtProductKey: 't0106KwEAAHS5i/IQMtobY1KiE0ohnvp0rYQ6Odqe3YSTuwoeLvNCke4y7UccAqchMe1OUgSW/vPP42qfMZqjyorwWR/DnRUBbMP5AyjcPbyr+HVod/EEDJNDB2wFSOh/Xnlxg6lISUkO19Q75w==', uploadTargetURL: '' } }; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 497e480..2348757 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -6,7 +6,7 @@ export const environment = { production: false, Dynamsoft: { resourcesPath: 'assets/dwt-resources', - dwtProductKey: 't0100CgEAAI/Kalkph+rANa7xvFeYzy2ZJaF0sV188r8K/knF/akFHHvAHdHAtGHQJrpxP+nqlDJkXOD65sKMbWhdmp6b7QgCWLr5A0huNQqu+DW0v3gAgcFwAvEGSBQj0nwHo981mg==', + dwtProductKey: 't0106KwEAAHS5i/IQMtobY1KiE0ohnvp0rYQ6Odqe3YSTuwoeLvNCke4y7UccAqchMe1OUgSW/vPP42qfMZqjyorwWR/DnRUBbMP5AyjcPbyr+HVod/EEDJNDB2wFSOh/Xnlxg6lISUkO19Q75w==', uploadTargetURL: '' } }; diff --git a/tsconfig.base.json b/tsconfig.base.json index f69f654..454d8a9 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -10,7 +10,7 @@ "experimentalDecorators": true, "moduleResolution": "node", "importHelpers": true, - "target": "es2015", + "target": "es2022", "module": "es2020", "lib": [ "es2018", From d852fb0f3a8d331aa8d663cf4840ba215936009e Mon Sep 17 00:00:00 2001 From: Ellie-dynamsoft Date: Tue, 26 Sep 2023 10:57:47 +0800 Subject: [PATCH 02/10] update to web-twain 18.4 --- package.json | 2 +- src/app/app.component.html | 6 +++--- src/app/app.component.ts | 11 ++++++++++- src/app/dwt.service.ts | 22 +++++++++++++++++++--- src/environments/environment.prod.ts | 2 +- src/environments/environment.ts | 2 +- 6 files changed, 35 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index e3ebcd6..edcb7ad 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@angular/router": "~16.0.0", "@ng-bootstrap/ng-bootstrap": "~15.0.0", "bootstrap": "^5.3.0", - "dwt": "18.3.0", + "dwt": "18.4.0", "rxjs": "~6.6.0", "tslib": "^2.1.0", "zone.js": "~0.13.0" diff --git a/src/app/app.component.html b/src/app/app.component.html index ae33e3a..8e0b9f6 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -58,14 +58,14 @@
Recommended environments
-

[1] Windows7 & 10 ; macOS 10.13 ~ 10.15 ; Linux (Ubuntu 18.04, Debian 9, Fedora 32)

-

[2] iOS 13 & iPadOS 13 ; Android 10 & 11

+

[1] Windows7+; macOS 10.13+ ; Linux (Ubuntu 18.04, Debian 9, Fedora 32, etc.)

+

[2] iOS 13+ & iPadOS 13+ ; Android 10+

[3] Windows only

[4] macOS, iOS & iPadOS only

Your current environment is
{{currentEnv}}
- + diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 5081e05..77892d9 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -18,13 +18,21 @@ export class AppComponent implements OnInit { version = ' v18.2'; currentEnv = ""; bStartUp = true; + bStartDemo = false; bMobile = false; bUseCameraViaDirectShow = true; - constructor(protected dwtService: DwtService) { } + constructor(protected dwtService: DwtService) { + let _this = this; + dwtService.showStartDemo(function(bShowStartDemo){ + _this.bStartDemo = bShowStartDemo; + //_this.onResize(undefined); + }); + } toggleStartDemo() { this.bStartUp = !this.bStartUp; this.dwtService.bUseCameraViaDirectShow = this.bUseCameraViaDirectShow; + } ngOnInit() { let env = this.dwtService.runningEnvironment; @@ -45,4 +53,5 @@ export class AppComponent implements OnInit { let curYear = document.getElementById("copyRightCurYear"); curYear.innerHTML = (new Date()).getFullYear().toString(); } + } diff --git a/src/app/dwt.service.ts b/src/app/dwt.service.ts index 003ed47..9055dae 100644 --- a/src/app/dwt.service.ts +++ b/src/app/dwt.service.ts @@ -146,6 +146,8 @@ export class DwtService { */ private fileSavingPath = "C:"; private fileActualName = ""; + private _doFunction; + constructor() { /** @@ -159,9 +161,19 @@ export class DwtService { * ConnectToTheService is overwritten here for smoother install process. */ Dynamsoft.DWT.ConnectToTheService = () => { - this.mountDWT(); + //this.mountDWT(); + this._doFunction(true); + window.location.reload(); }; + Dynamsoft.DWT.OnWebTwainReady = () => { + this._doFunction(true); + } + } + + showStartDemo(doFunction){ + this._doFunction = doFunction; } + mountDWT(UseService?: boolean): Promise { this._DWObject = null; return new Promise((res, rej) => { @@ -482,8 +494,12 @@ export class DwtService { */ load(files?: FileList): Promise { return new Promise((res, rej) => { - this._DWObject.Addon.PDF.SetConvertMode(Dynamsoft.DWT.EnumDWT_ConvertMode.CM_AUTO); - this._DWObject.Addon.PDF.SetResolution(200); + this._DWObject.Addon.PDF.SetReaderOptions({ + convertMode: Dynamsoft.DWT.EnumDWT_ConvertMode.CM_AUTO, + renderOptions: { + resolution: 200 + } + }); this._DWObject.IfShowFileDialog = true; this._DWObject.RegisterEvent("OnPostLoad", ( directory: string, diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 9436c1e..55abd9b 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, Dynamsoft: { resourcesPath: 'assets/dwt-resources', - dwtProductKey: 't0106KwEAAHS5i/IQMtobY1KiE0ohnvp0rYQ6Odqe3YSTuwoeLvNCke4y7UccAqchMe1OUgSW/vPP42qfMZqjyorwWR/DnRUBbMP5AyjcPbyr+HVod/EEDJNDB2wFSOh/Xnlxg6lISUkO19Q75w==', + dwtProductKey: 't0107KwEAAFqHOzuiG0pkbu8UHkUGeOSoaezN9f0x+c7plsWGSCA28VNFZFgj71h2GachA/emFbGgAT3emZ8dQmmIu1Wg2A5UAHk4fwDOvVYEC34dWi6egGFy6ICtAAn9z6svMviWPNJ4ABlIPoA=', uploadTargetURL: '' } }; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 2348757..5ce7c4e 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -6,7 +6,7 @@ export const environment = { production: false, Dynamsoft: { resourcesPath: 'assets/dwt-resources', - dwtProductKey: 't0106KwEAAHS5i/IQMtobY1KiE0ohnvp0rYQ6Odqe3YSTuwoeLvNCke4y7UccAqchMe1OUgSW/vPP42qfMZqjyorwWR/DnRUBbMP5AyjcPbyr+HVod/EEDJNDB2wFSOh/Xnlxg6lISUkO19Q75w==', + dwtProductKey: 't0107KwEAAFqHOzuiG0pkbu8UHkUGeOSoaezN9f0x+c7plsWGSCA28VNFZFgj71h2GachA/emFbGgAT3emZ8dQmmIu1Wg2A5UAHk4fwDOvVYEC34dWi6egGFy6ICtAAn9z6svMviWPNJ4ABlIPoA=', uploadTargetURL: '' } }; From 07ff626ba016ea0c0df841f8f1e833a07c23e5fe Mon Sep 17 00:00:00 2001 From: Ellie-dynamsoft Date: Tue, 24 Oct 2023 11:02:19 +0800 Subject: [PATCH 03/10] update to web-twain 18.4.1 --- package.json | 2 +- src/environments/environment.prod.ts | 2 +- src/environments/environment.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index edcb7ad..1cff1e2 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@angular/router": "~16.0.0", "@ng-bootstrap/ng-bootstrap": "~15.0.0", "bootstrap": "^5.3.0", - "dwt": "18.4.0", + "dwt": "18.4.1", "rxjs": "~6.6.0", "tslib": "^2.1.0", "zone.js": "~0.13.0" diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 55abd9b..8e4b954 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, Dynamsoft: { resourcesPath: 'assets/dwt-resources', - dwtProductKey: 't0107KwEAAFqHOzuiG0pkbu8UHkUGeOSoaezN9f0x+c7plsWGSCA28VNFZFgj71h2GachA/emFbGgAT3emZ8dQmmIu1Wg2A5UAHk4fwDOvVYEC34dWi6egGFy6ICtAAn9z6svMviWPNJ4ABlIPoA=', + dwtProductKey: 't0107KwEAAGoasMG9xI2Iav49dLPDNR+pjYp+ZwC2Mlvgf6RlAzGLYngM9RNg61sTaf9/OD1pJlJXhwmYhR5+GMEoOwjbuYGgASjT+QPI3FtFsOLXoefiCRicwwBsBUgYf159kSEbmSTpAaZBPWg=', uploadTargetURL: '' } }; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 5ce7c4e..38db23a 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -6,7 +6,7 @@ export const environment = { production: false, Dynamsoft: { resourcesPath: 'assets/dwt-resources', - dwtProductKey: 't0107KwEAAFqHOzuiG0pkbu8UHkUGeOSoaezN9f0x+c7plsWGSCA28VNFZFgj71h2GachA/emFbGgAT3emZ8dQmmIu1Wg2A5UAHk4fwDOvVYEC34dWi6egGFy6ICtAAn9z6svMviWPNJ4ABlIPoA=', + dwtProductKey: 't0107KwEAAGoasMG9xI2Iav49dLPDNR+pjYp+ZwC2Mlvgf6RlAzGLYngM9RNg61sTaf9/OD1pJlJXhwmYhR5+GMEoOwjbuYGgASjT+QPI3FtFsOLXoefiCRicwwBsBUgYf159kSEbmSTpAaZBPWg=', uploadTargetURL: '' } }; From 40cf0c09e399036ec9d5a9732b8b3dd67d675b24 Mon Sep 17 00:00:00 2001 From: Ellie-dynamsoft Date: Fri, 26 Jan 2024 09:39:47 +0800 Subject: [PATCH 04/10] update public key --- package.json | 2 +- src/app/dwt.service.ts | 8 ++++++++ src/environments/environment.prod.ts | 2 +- src/environments/environment.ts | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 1cff1e2..fa02be0 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "@angular/router": "~16.0.0", "@ng-bootstrap/ng-bootstrap": "~15.0.0", "bootstrap": "^5.3.0", - "dwt": "18.4.1", + "dwt": "18.4.2", "rxjs": "~6.6.0", "tslib": "^2.1.0", "zone.js": "~0.13.0" diff --git a/src/app/dwt.service.ts b/src/app/dwt.service.ts index 9055dae..ef45985 100644 --- a/src/app/dwt.service.ts +++ b/src/app/dwt.service.ts @@ -150,6 +150,14 @@ export class DwtService { constructor() { + Dynamsoft.OnLicenseError = function (message, errorCode) { + if(errorCode == -2808) + message = '
Sorry. Your product key has expired. You can purchase a full license at the online store.
Or, you can try requesting a new product key at this page.
If you need any help, please contact us.
'; + (Dynamsoft.DWT as any).ShowMessage(message, { + width: 680, + headerStyle: 2 + }); + }; /** * ResourcesPath & ProductKey must be set in order to use the library! */ diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index 8e4b954..9e356f0 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -2,7 +2,7 @@ export const environment = { production: true, Dynamsoft: { resourcesPath: 'assets/dwt-resources', - dwtProductKey: 't0107KwEAAGoasMG9xI2Iav49dLPDNR+pjYp+ZwC2Mlvgf6RlAzGLYngM9RNg61sTaf9/OD1pJlJXhwmYhR5+GMEoOwjbuYGgASjT+QPI3FtFsOLXoefiCRicwwBsBUgYf159kSEbmSTpAaZBPWg=', + dwtProductKey: 'DLS2eyJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSJ9', uploadTargetURL: '' } }; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index 38db23a..5ea7cbd 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -6,7 +6,7 @@ export const environment = { production: false, Dynamsoft: { resourcesPath: 'assets/dwt-resources', - dwtProductKey: 't0107KwEAAGoasMG9xI2Iav49dLPDNR+pjYp+ZwC2Mlvgf6RlAzGLYngM9RNg61sTaf9/OD1pJlJXhwmYhR5+GMEoOwjbuYGgASjT+QPI3FtFsOLXoefiCRicwwBsBUgYf159kSEbmSTpAaZBPWg=', + dwtProductKey: 'DLS2eyJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSJ9', uploadTargetURL: '' } }; From 589de06a1f581c66f2ee773a7275c3e87203900e Mon Sep 17 00:00:00 2001 From: Ellie-dynamsoft Date: Fri, 26 Jan 2024 10:21:18 +0800 Subject: [PATCH 05/10] Remove OCR Module --- src/app/app.component.html | 2 +- src/app/dwt.service.ts | 317 +-------------------------- src/app/dwt/dwt.component.css | 18 -- src/app/dwt/dwt.component.html | 112 ---------- src/app/dwt/dwt.component.ts | 181 --------------- src/environments/environment.prod.ts | 2 +- src/environments/environment.ts | 2 +- 7 files changed, 4 insertions(+), 630 deletions(-) diff --git a/src/app/app.component.html b/src/app/app.component.html index 8e0b9f6..1f63e58 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -24,7 +24,7 @@

{{ title }}

Dynamic Web TWAIN features image aquisition via scanners or cameras as well as image editing, uploading and - recoginzing (barcode & OCR), etc. + barcode recoginzing, etc.

Recommended environments
diff --git a/src/app/dwt.service.ts b/src/app/dwt.service.ts index ef45985..51dfd27 100644 --- a/src/app/dwt.service.ts +++ b/src/app/dwt.service.ts @@ -6,7 +6,6 @@ import { DynamsoftEnumsDWT } from 'dwt/dist/types/Dynamsoft.Enum'; import { WebTwain } from 'dwt/dist/types/WebTwain'; import { DeviceConfiguration, ScanSetup } from 'dwt/dist/types/WebTwain.Acquire'; import { RuntimeSettings, TextResults, TextResult } from 'dwt/dist/types/Addon.BarcodeReader'; -import { OCRPro, Rect } from 'dwt/dist/types/Addon.OCRPro'; import { DWTInitialConfig } from 'dwt/dist/types/Dynamsoft'; @Injectable({ @@ -49,98 +48,6 @@ export class DwtService { */ public barcodeResults = []; public barcodeRects = { imageIds: [], rects: [] }; - /** - * OCR - */ - public ocrResultBase64Strings: string[] = []; - public OCRLanguages = [ - { desc: "Arabic", val: "ara" }, - { desc: "Bengali", val: "ben" }, - { desc: "Chinese_Simplified", val: "chi_sim" }, - { desc: "Chinese_Traditional", val: "chi_tra" }, - { desc: "English", val: "eng", selected: true }, - { desc: "French", val: "fra" }, - { desc: "German", val: "deu" }, - { desc: "Hindi", val: "hin" }, - { desc: "Indonesian", val: "ind" }, - { desc: "Italian", val: "ita" }, - { desc: "Japanese", val: "jpn" }, - { desc: "Javanese", val: "jav" }, - { desc: "Korean", val: "kor" }, - { desc: "Malay", val: "msa" }, - { desc: "Marathi", val: "mar" }, - { desc: "Panjabi", val: "pan" }, - { desc: "Persian", val: "fas" }, - { desc: "Portuguese", val: "por" }, - { desc: "Russian", val: "rus" }, - { desc: "Spanish", val: "spa" }, - { desc: "Swahili", val: "swa" }, - { desc: "Tamil", val: "tam" }, - { desc: "Telugu", val: "tel" }, - { desc: "Thai", val: "tha" }, - { desc: "Turkish", val: "tur" }, - { desc: "Vietnamese", val: "vie" }, - { desc: "Urdu", val: "urd" } - ]; - public OCROutputFormats = [ - { desc: "STRING", val: 0 }, - { desc: "Text PDF", val: 1 }, - { desc: "Image-over-text PDF", val: 2 } - ]; - public OCRProFindTextFlags = [ - { desc: "whole word", val: Dynamsoft.DWT.EnumDWT_OCRFindTextFlags.OCRFT_WHOLEWORD }, - { desc: "match case", val: Dynamsoft.DWT.EnumDWT_OCRFindTextFlags.OCRFT_MATCHCASE }, - { desc: "fuzzy match", val: Dynamsoft.DWT.EnumDWT_OCRFindTextFlags.OCRFT_FUZZYMATCH } - ]; - public OCRProFindTextAction = [ - { desc: "highlight", val: Dynamsoft.DWT.EnumDWT_OCRFindTextAction.OCRFT_HIGHLIGHT }, - { desc: "strikeout", val: Dynamsoft.DWT.EnumDWT_OCRFindTextAction.OCRFT_STRIKEOUT }, - { desc: "mark for redact", val: Dynamsoft.DWT.EnumDWT_OCRFindTextAction.OCRFT_MARKFORREDACT } - ]; - public OCRProLanguages = [ - { desc: "English", val: "eng" }, - { desc: "Arabic", val: "arabic" }, - { desc: "French", val: "french" }, - { desc: "German", val: "german" }, - { desc: "Italian", val: "italian" }, - { desc: "Spanish", val: "spanish" } - ]; - public OCRProRecognitionModule = [ - { desc: "auto", val: Dynamsoft.DWT.EnumDWT_OCRProRecognitionModule.OCRPM_AUTO }, - { desc: "most accurate", val: Dynamsoft.DWT.EnumDWT_OCRProRecognitionModule.OCRPM_MOSTACCURATE }, - { desc: "balanced", val: Dynamsoft.DWT.EnumDWT_OCRProRecognitionModule.OCRPM_BALANCED }, - { desc: "fastest", val: Dynamsoft.DWT.EnumDWT_OCRProRecognitionModule.OCRPM_FASTEST } - ]; - public OCRProOutputFormat = [ - { desc: "STRING", val: Dynamsoft.DWT.EnumDWT_OCRProOutputFormat.OCRPFT_TXTS }, - { desc: "CSV", val: Dynamsoft.DWT.EnumDWT_OCRProOutputFormat.OCRPFT_TXTCSV }, - { desc: "Text Formatted", val: Dynamsoft.DWT.EnumDWT_OCRProOutputFormat.OCRPFT_TXTF }, - { desc: "XML", val: Dynamsoft.DWT.EnumDWT_OCRProOutputFormat.OCRPFT_XML }, - { desc: "PDF", val: Dynamsoft.DWT.EnumDWT_OCRProOutputFormat.OCRPFT_IOTPDF }, - { desc: "PDF with MRC compression", val: Dynamsoft.DWT.EnumDWT_OCRProOutputFormat.OCRPFT_IOTPDF_MRC } - ]; - public OCRProPDFVersion = [ - { desc: "", val: "" }, - { desc: "1.0", val: Dynamsoft.DWT.EnumDWT_OCRProPDFVersion.OCRPPDFV_0 }, - { desc: "1.1", val: Dynamsoft.DWT.EnumDWT_OCRProPDFVersion.OCRPPDFV_1 }, - { desc: "1.2", val: Dynamsoft.DWT.EnumDWT_OCRProPDFVersion.OCRPPDFV_2 }, - { desc: "1.3", val: Dynamsoft.DWT.EnumDWT_OCRProPDFVersion.OCRPPDFV_3 }, - { desc: "1.4", val: Dynamsoft.DWT.EnumDWT_OCRProPDFVersion.OCRPPDFV_4 }, - { desc: "1.5", val: Dynamsoft.DWT.EnumDWT_OCRProPDFVersion.OCRPPDFV_5 }, - { desc: "1.6", val: Dynamsoft.DWT.EnumDWT_OCRProPDFVersion.OCRPPDFV_6 }, - { desc: "1.7", val: Dynamsoft.DWT.EnumDWT_OCRProPDFVersion.OCRPPDFV_7 } - ]; - public OCRProPDFAVersion = [ - { desc: "", val: "" }, - { desc: "pdf/a-1a", val: Dynamsoft.DWT.EnumDWT_OCRProPDFAVersion.OCRPPDFAV_1A }, - { desc: "pdf/a-1b", val: Dynamsoft.DWT.EnumDWT_OCRProPDFAVersion.OCRPPDFAV_1B }, - { desc: "pdf/a-2a", val: Dynamsoft.DWT.EnumDWT_OCRProPDFAVersion.OCRPPDFAV_2A }, - { desc: "pdf/a-2b", val: Dynamsoft.DWT.EnumDWT_OCRProPDFAVersion.OCRPPDFAV_2B }, - { desc: "pdf/a-2u", val: Dynamsoft.DWT.EnumDWT_OCRProPDFAVersion.OCRPPDFAV_2U }, - { desc: "pdf/a-3a", val: Dynamsoft.DWT.EnumDWT_OCRProPDFAVersion.OCRPPDFAV_3A }, - { desc: "pdf/a-3b", val: Dynamsoft.DWT.EnumDWT_OCRProPDFAVersion.OCRPPDFAV_3B }, - { desc: "pdf/a-3u", val: Dynamsoft.DWT.EnumDWT_OCRProPDFAVersion.OCRPPDFAV_3U } - ]; /** * Save */ @@ -681,210 +588,7 @@ export class DwtService { } this.barcodeSubject.next(this.barcodeRects); } - /** - * loadOCRModule & downloadOCRBasic prepare resources for the OCR module. - */ - loadOCRModule(engine: string): Promise { - return new Promise((res, rej) => { - if (Dynamsoft.Lib.product.bHTML5Edition) { - if (engine === "Pro") { - if (this._DWObject.Addon.OCRPro.IsModuleInstalled()) { - res(true); - } else { - this.downloadOCRPro() - .then( - success => - res(success), - error => - rej(error) - ); - } - } else { - if (this._DWObject.Addon.OCR.IsModuleInstalled()) { - this.downloadOCRBasic(false) - .then( - success => - res(success), - error => - rej(error) - ); - } else { - this.downloadOCRBasic(true) - .then( - success => - res(success), - error => - rej(error) - ); - } - } - } - else { - rej("OCR not supported in this environment!"); - } - }); - } - downloadOCRBasic(bDownloadDLL: boolean, langPath?: string): Promise { - return new Promise((res, rej) => { - let strOCRPath = Dynamsoft.DWT.ResourcesPath + "/addon/OCRx64.zip"; - let strOCRLangPath = Dynamsoft.DWT.ResourcesPath + '/addon/OCRBasicLanguages/English.zip'; - if (langPath) - strOCRLangPath = langPath; - if (bDownloadDLL) { - this._DWObject.Addon.OCR.Download( - strOCRPath, - () => this.downloadOCRBasic(false).then(() => res(true)).catch(err=>rej(err)), - (errorCode, errorString) => rej(errorString) - ); - } else { - this._DWObject.Addon.OCR.DownloadLangData( - strOCRLangPath, - () => res(true), - (errorCode, errorString) => rej(errorString) - ); - } - }); - } - downloadOCRPro(): Promise { - return new Promise((res, rej) => { - let strOCRPath = "https://tst.dynamsoft.com/libs/ocrp/OCRProx64.zip"; - this._DWObject.Addon.OCRPro.Download( - strOCRPath, - () => res(true), - (errorCode, errorString) => rej(errorString) - ); - }); - } - /** - * Prepararation for the OCR. - * @param language The target language. - * @param outputFormat The output format. - * @param zones Zones to read. - */ - ocr(ocrOptions: OCROptions | OCRProOptions, zones?: Zone[]): Promise { - let _index = this._DWObject.CurrentImageIndexInBuffer; - if (zones) zones = this.filterZones(_index, zones); - if (ocrOptions.engine === "basic") { - let language: DynamsoftEnumsDWT.EnumDWT_OCRLanguage = ocrOptions.Language; - let outputFormat: DynamsoftEnumsDWT.EnumDWT_OCROutputFormat = parseInt(ocrOptions.OutputFormat); - return new Promise((res, rej) => { - this._DWObject.Addon.OCR.SetLanguage(language); - this._DWObject.Addon.OCR.SetOutputFormat(outputFormat); - let strOCRLangPath = Dynamsoft.DWT.ResourcesPath + '/addon/OCRBasicLanguages/English.zip'; - for (let i = 0; i < this.OCRLanguages.length; i++) { - if (this.OCRLanguages[i].val === language) { - strOCRLangPath = Dynamsoft.DWT.ResourcesPath + '/addon/OCRBasicLanguages/' + this.OCRLanguages[i].desc + '.zip'; - } - } - this.downloadOCRBasic(false) - .then( - () => { - this.ocrResultBase64Strings = []; - let i = 0; - if (zones !== undefined && zones.length > 0) { - let ocrCallback = (hasError: boolean, errStr?: string) => { - if (hasError) { - rej(errStr); - } else { - if (i === zones.length) { - res(this.processOCRResult()); - } else { - this.doOCR(_index, zones[i], ocrCallback); - i++; - } - } - }; - ocrCallback(false); - } else - this.doOCR(_index, null, (hasError: boolean, errStr?: string) => { - if (hasError) { - rej(errStr); - } else - res(this.processOCRResult()); - }); - }, - err => rej(err) - ); - }); - } else { - return new Promise((res, rej) => { - let settings = Dynamsoft.WebTwain.Addon.OCRPro.NewSettings(); - settings.Languages = ocrOptions.Language; - settings.RecognitionModule = (ocrOptions).RecognitionModule; - settings.OutputFormat = (ocrOptions).OutputFormat; - if ((ocrOptions).OutputFormat === Dynamsoft.DWT.EnumDWT_OCRProOutputFormat.OCRPFT_IOTPDF || - (ocrOptions).OutputFormat === Dynamsoft.DWT.EnumDWT_OCRProOutputFormat.OCRPFT_IOTPDF_MRC) { - settings.PDFVersion = (ocrOptions).PDFVersion; - settings.PDFAVersion = (ocrOptions).PDFAVersion; - } - if ((ocrOptions).bFindText) { - settings.Redaction.FindText = (ocrOptions).textToFind; - settings.Redaction.FindTextFlags = (ocrOptions).FindTextFlags; - settings.Redaction.FindTextAction = (ocrOptions).FindTextAction; - } - //settings.LicenseChecker = - this._DWObject.Addon.OCRPro.Settings = settings; - this.ocrResultBase64Strings = []; - if (zones !== undefined && zones.length > 0) { - let rects: Rect[] = []; - for (let i = 0; i < zones.length; i++) { - rects.push({ left: zones[i].x, right: zones[i].x + zones[i].width, top: zones[i].y, bottom: zones[i].y + zones[i].height }); - } - this._DWObject.Addon.OCRPro.RecognizeRect(_index, rects, (_index, aryZone, result) => { - this.ocrResultBase64Strings.push(result.Get()); - res(this.processOCRResult()); - }, (errCode, errString) => rej(errString) - ); - } - else { - this._DWObject.Addon.OCRPro.Recognize(_index, (_index, result) => { - this.ocrResultBase64Strings.push(result.Get()); - res(this.processOCRResult()); - }, (errCode, errString) => rej(errString) - ); - } - }); - } - } - /** - * Actual OCR. - * @param index Specify the image to read. - * @param zone Specify a Zone. - * @param callback Callback after the read. - */ - doOCR(index: number, zone?: any, callback?: (...args) => void): any { - if (!!zone && !!callback) { - this._DWObject.Addon.OCR.RecognizeRect( - index, zone.x, zone.y, zone.x + zone.width, zone.y + zone.height, (imageId, left, top, right, bottom, result) => { - this.ocrResultBase64Strings.push(result.Get()); - callback(false); - }, (errCode, errString) => callback(true, errString)); - } else if (this._DWObject.SelectedImagesIndices.length > 1) { - this._DWObject.Addon.OCR.RecognizeSelectedImages((result) => { - this.ocrResultBase64Strings.push(result.Get()); - callback(false); - }, (errCode, errString) => callback(true, errString)); - } - else { - this._DWObject.Addon.OCR.Recognize(index, - (imageId, result) => { - this.ocrResultBase64Strings.push(result.Get()); - callback(false); - }, (errCode, errString) => callback(true, errString)); - } - } - /** - * Process OCR result. - */ - processOCRResult(): Promise { - return new Promise((res, rej) => { - if (this.ocrResultBase64Strings.length === 0) - rej("No text found!"); - else { - res(this.ocrResultBase64Strings.join(",")); - } - }); - } + /** * Convert image(s) to a Blob. * @param indices Specify the image(s). @@ -1123,22 +827,3 @@ interface Zone { height: number; index: number; } - -interface OCROptions { - engine: string; - Language: string; - OutputFormat: string; -}; - -interface OCRProOptions { - engine: string; - Language: string; - OutputFormat: string; - bFindText: boolean; - textToFind: string; - FindTextFlags: number; - FindTextAction: number; - RecognitionModule: string; - PDFVersion: string; - PDFAVersion: string; -}; diff --git a/src/app/dwt/dwt.component.css b/src/app/dwt/dwt.component.css index 78f0ab4..1818a9e 100644 --- a/src/app/dwt/dwt.component.css +++ b/src/app/dwt/dwt.component.css @@ -60,12 +60,6 @@ button.barcode { background-position: center; } -button.ocr { - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAIAAAADnC86AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGkSURBVFhH7ZivT8NAFMfvMOvUJka2GUCRmmaiWQIKgyPB1SAQOCQh8A/gQJDgMQjE5qanFhJIWrMg+QNaaAWy7njXvi60u5Tr+mOCftJs32/F++5d37rrKGOMrIMNfK+cOrgyxMPlOI5pmr7vo8+HoijD4bDX66EPgeBlJpOJ67pocgOloCCaCPFSQ6+dTgdNbqDU8uLVU10Z4mBVVVGVhjhY0zRUpbG2pc7y62Q+sJcb1EKUNj3/QB1nPB4bhoEmIEvHSpu/aqf0wqVnVnAqbhut4JQUqcFvdyhCGjyY7h6HLkZrm2wdkNYOWgnSgtnrbSwbqncHPEAE/0BKjo7Z/ebi4PZ3dndAT6aol4E1P3pELcHf1zjZd0FIDVeGyZdGInjviu5foy6OZDD/bkQH9+WkAqkdl5YKpAWXlwpIDVcS/5u9P6H+mpOFzsIqwez5EO7baD7nbHq5Snaw80oCu0xUBTEajVBFiDuezWaoSmOla1wEdXBliIPhacfzPDS5gVJQEE2EeM9l27ZlWUU9tDWbTV3X+/0++oD6r4jK+G/BhPwAPeVgElUj/BYAAAAASUVORK5CYII=); - background-repeat: no-repeat; - background-position: center; -} - button.save { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NTc3MiwgMjAxNC8wMS8xMy0xOTo0NDowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0YzVmZjRkMi1kYjVmLTQ2NjAtYmUzNS05NGEwNTlhYmRmY2QiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0E5QTJGQUIyQjVGMTFFNDg4QzlFMEU1RTZGNTQ3NzYiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0E5QTJGQUEyQjVGMTFFNDg4QzlFMEU1RTZGNTQ3NzYiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTQgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpkOTAyNGZiZS1jZDYyLTQzNjQtYjVjOS1mMjI1OTRlZGMxYzEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NGM1ZmY0ZDItZGI1Zi00NjYwLWJlMzUtOTRhMDU5YWJkZmNkIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+nt6kZQAABoRJREFUeNrEV0tsVVUUXffcz3vlU6gEWmirNURMjBqBQKm0pZTyqZ8QJw7EiIQEB+jMgTFqP4CCTnWmwWh0oANjYlJNcGAiaXm0YIxDCBr5tK9Y2tLSvvt1733OLX39KVFCm/Pu551z9tprr733eVaSJLiXfw5/WJbFF29lR1chihlQgoguYQzE/9GAzUPREBMW3VsYbGvN0IPPzjtmnhj/4fAexEkMnlsgBHXl9v/iZfdAhAwhYNeUpbAbXYUURApgcRTHyFgxHv/kAlzbxs77s/hqbwUGRyZpoSWszAwXM6dfJbOf6abEs9E3bOHZD3/CouqHsbHcxQvrXERBQWwyAGX2cvkjoEVLsx7i747DdW3Z8FxvDufP9WIgP4D8QD8GaPTTsBRtTt/l8/qdRaD7+vRzf/81clUxIrDf2eVlSHJfI+M4FNopJ9wpDRh/KOYJTVIIsiVwbI2tdstW2ASGWUiIJWYh9bLuyXoBGSfa47o680z7xDRXqQSKVFRyXwUiz5X4R0kstopEaOyjEJAoLKKu5jG58jvbsfHBe0fIY4X6xibZnI2xVrY2NOHEsTZs294i4Pj5+NE2NDbtQBgG2N7YSFtE5GoCd1WNsBFEyewsMPblS4oQFm3YScgjMAe9uW607GpFVXU1oqiYgWtXLmP/gUNYU1mF3JlumfvywVfE+/LyClYNMcJORSh5aD0UgY4izA1ANBDzZH6ZSPqwsU21dcIC60qcp49ENJlo7dE9G9xUu4UoVuJIFHEIQpYAmEjZk24oAtM1MJuBAqFzKV0czlt6w/Hk/D1+pJ0WW2hoaia7cSr6KSb4Wr+NwnG0nUJF8xqbEVAImuobBISj9J58H8TTFTCDARYIT5bCQVdGz9QeOHhIDFWsrsTZMz20kcKaqmpiIyL6K5Hr6aFwXMF+msdxptcor6ggSyTEJAWgxIl4RmkrAuDTQmabvWYQTPdmCgELUHyl502ba6F0WSOaIaLcTPSz56ZcSKj4S0v+9Z4pA+G8GrCMCMmYTa4LA5aSuB3reAfNO3YhItcaSNnvdrZLRWukkESRfsdztrfskuyQOkQAmrY1Uioq2dNVOpyc6tNjUKSBkL7jiWx0aCIS5C7t197ZOS3mQFt7u3jDDKRabDNz0nks4PxYCFv21GHgEET4Jw0QTBbg7zdDnL4ygXH/dkNKS7FpXjASFATT38EUb1b/kgx5b2sGlDJFaz4AHB/X0hrg6P2a9/HE6izutGFb0PFmJn+5OomsbZg1upkXANPjmFjxNXd1DH+M+Tr/oTfkzU0xXPDv6oiPa5MJPNqshBWI2yGYH0CskUoGkIG1K7K4frMgZwOwIFWq/hgLHWR4Vg2tHer3kXW0Qzzblr6xEIBEFyK2E5sis2O1wp5HVyIsBEULs9Q1Jyf9Oczr8uhkXHz/2yA+vaTZFGP2AgAsw4BjsoDBcLya1i3HnwOjGJ0I4HkeHGqp7H0UTtAI52SCw1xa4srajy8Mw1N6/1EqtXVVK2C57twMJCZllKnh3EgsRkJ5/GD1Krz0XKs+vWQ8uTY/87xcd7Y+XQSgtHQpbtwck7UZOpR4jpXWKAllDDWfCKkA2aZ6sV1L9+809p990yXdTNhCCM/kB58dS1y96QR5uWyxjZFxvTaIQhqUjvS99IKIa0M8DwPct5UGEJncTkzec30/vG8vHnhkw9T8N95qw9me0/jx1Cnse3Efqqg/BIQmwu21rinjsi+/ixeoA3GspGnwUg6BHIooLmYPfPTFt1QrYqLU9IYooD5QK2PSDzRopUQDyqxN53Io5CBTVLAwLRginpiQJtI40trNNY0bDevm/WMd+PLzk7h48YIYD0iEBd/Hz9059Padx+DgdQz9dV3Ey2t4rec6MnInTyDjOrOKmjMzgRwNXcTCvYCFqAwFr73+pm42coClbLHp/ESUrt+wkbQR6u7IGRJD1lhWPJWCCH25jxcCwIQIZbTJxfwQHVDKBABvzuD8wJ8qgWEQFPWHmY7wGosodI3PLa92UFg5t9XcAFjxHrm8NKM3XbvEwa3JUYwM27gVWihbXoqalYv/VS8YIzfHR0eQUCoty5bpwmUKnEcnbDVNBxYbI3XyrHUVnV098ZSHPsbo/OSREqX22+6ddSRzXmQdeekJyzhK58Oxy28/tZZs51MAXFlW0aikseQu/x5laDdoXCLbwykA+X1ofi65uPt/3ETGyXZg3euf538LMAC3T/4HUBNiLQAAAABJRU5ErkJggg==); background-repeat: no-repeat; @@ -145,18 +139,6 @@ button.save { align-items: center; } -.ocrResultString { - overflow: auto; - padding: 1vmin; - margin: 1vh; - height: auto; - font-size: 12px; - line-height: 20px; - border: 1px solid #ccc; - background: #e7f2fd; - color: #606060; -} - .half { width: 50%; } diff --git a/src/app/dwt/dwt.component.html b/src/app/dwt/dwt.component.html index 0c62110..46ce941 100644 --- a/src/app/dwt/dwt.component.html +++ b/src/app/dwt/dwt.component.html @@ -25,8 +25,6 @@ - @@ -269,116 +267,6 @@
Barcode Mode:
(click)="readBarcode()">{{barcodeButtonText}} -
- - - - - - - - - - - - - + + +
12
-
≥80 ≥70≥443113≥134≥80≥70≥134≥44(*2)11(*2)≥13(*3)
-

[1] Windows7+; macOS 10.13+ ; Linux (Ubuntu 18.04, Debian 9, Fedora 32, etc.)

-

[2] iOS 13+ & iPadOS 13+ ; Android 10+

-

[3] Windows only

-

[4] macOS, iOS & iPadOS only

+

[*1] Windows7+; macOS 10.13+ ; Linux (Ubuntu 18.04, Debian 9, Fedora 32, etc.)

+

[*2] Windows only

+

[*3] macOS, iOS & iPadOS only

Your current environment is
{{currentEnv}}
- +
-

© 2003– Dynamsoft. All rights reserved.

+

© 2003- Dynamsoft. All rights reserved.

diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 77892d9..80dc993 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,11 +1,19 @@ import { Component, OnInit, HostListener } from '@angular/core'; +import { CommonModule } from '@angular/common'; import { DwtService } from './dwt.service'; import { Subject } from 'rxjs'; +import { DwtComponent } from './dwt/dwt.component'; + @Component({ selector: 'app-root', templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] + styleUrl: './app.component.css', + + imports: [ + CommonModule, + DwtComponent + ] }) export class AppComponent implements OnInit { eventsSubject: Subject = new Subject(); @@ -15,11 +23,10 @@ export class AppComponent implements OnInit { this.eventsSubject.next(event); } title = 'DWT + Angular Sample'; - version = ' v18.2'; + version = ' v19.x'; currentEnv = ""; bStartUp = true; bStartDemo = false; - bMobile = false; bUseCameraViaDirectShow = true; constructor(protected dwtService: DwtService) { let _this = this; @@ -32,24 +39,18 @@ export class AppComponent implements OnInit { toggleStartDemo() { this.bStartUp = !this.bStartUp; this.dwtService.bUseCameraViaDirectShow = this.bUseCameraViaDirectShow; - } ngOnInit() { let env = this.dwtService.runningEnvironment; - if (env.bMobile) { - this.bMobile = env.bMobile; - this.currentEnv += env.bChrome ? "Chrome " + env.strChromeVersion : ""; - this.currentEnv += env.bFirefox ? "Firefox " + env.strFirefoxVersion : ""; - this.currentEnv += env.bSafari ? "Safari" : ""; - } else { - this.currentEnv += env.bWin ? "Windows, " : ""; - this.currentEnv += env.bLinux ? "Linux, " : ""; - this.currentEnv += env.bChrome ? "Chrome " + env.strChromeVersion : ""; - this.currentEnv += env.bFirefox ? "Firefox " + env.strFirefoxVersion : ""; - this.currentEnv += env.bSafari ? "Safari" : ""; - this.currentEnv += env.bIE ? "Internet Explorer" + env.strIEVersion : ""; - this.currentEnv += env.bEdge ? "Edge" : ""; - } + + this.currentEnv += env.bWin ? "Windows, " : ""; + this.currentEnv += env.bLinux ? "Linux, " : ""; + this.currentEnv += env.bChrome ? "Chrome " + env.strChromeVersion : ""; + this.currentEnv += env.bFirefox ? "Firefox " + env.strFirefoxVersion : ""; + this.currentEnv += env.bSafari ? "Safari" : ""; + this.currentEnv += env.bIE ? "Internet Explorer" + env.strIEVersion : ""; + this.currentEnv += env.bEdge ? "Edge" : ""; + let curYear = document.getElementById("copyRightCurYear"); curYear.innerHTML = (new Date()).getFullYear().toString(); } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 490056b..e69de29 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,26 +0,0 @@ -import { BrowserModule } from '@angular/platform-browser'; -import { NgModule } from '@angular/core'; - -import { AppComponent } from './app.component'; -import { DwtComponent } from './dwt/dwt.component'; -import { FormsModule } from '@angular/forms'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { CallbackPipe } from './callback.pipe'; -import { SafeurlPipe } from './safeurl.pipe'; - -@NgModule({ - declarations: [ - AppComponent, - DwtComponent, - CallbackPipe, - SafeurlPipe - ], - imports: [ - BrowserModule, - FormsModule, - NgbModule - ], - providers: [], - bootstrap: [AppComponent] -}) -export class AppModule { } diff --git a/src/app/dwt.service.ts b/src/app/dwt.service.ts index f7cf865..be273ad 100644 --- a/src/app/dwt.service.ts +++ b/src/app/dwt.service.ts @@ -9,7 +9,7 @@ import { RuntimeSettings, TextResults, TextResult } from 'dwt/dist/types/Addon.B import { DWTInitialConfig } from 'dwt/dist/types/Dynamsoft'; @Injectable({ - providedIn: 'root' + providedIn: 'any' }) export class DwtService { @@ -285,12 +285,8 @@ export class DwtService { } }); if (!waitForAnotherPromise) { - if (this._selectedDevice !== "") { - this.generalSubject.next({ type: "deviceName", deviceName: this._selectedDevice }); - res(true); - } - else - res(false); + this.generalSubject.next({ type: "deviceName", deviceName: this._selectedDevice }); + res(true); } }); } @@ -459,10 +455,10 @@ export class DwtService { } settings.barcodeFormatIds = Dynamsoft.DBR.EnumBarcodeFormat.BF_ALL; if (config) { - if (config.formatId) { + if ('formatId' in config) { settings.barcodeFormatIds = config.formatId; } - if (config.formatId2) { + if ('formatId2' in config) { settings.barcodeFormatIds_2 = config.formatId2; } if (config.zones) @@ -472,6 +468,8 @@ export class DwtService { this.barcodeResults = []; settings.region.regionMeasuredByPercentage = 0; + this._DWTObject.Viewer.fitWindow(); + if (config && config.zones && config.zones.length > 0) { let i = 0; let readBarcodeFromRect = () => { @@ -524,9 +522,10 @@ export class DwtService { } resultString.push({ text: "--------------------------", type: "seperator" }); resultString.push({ text: "Total barcode(s) found: " + allBarcodeResults.length, type: "important" }); + resultString.push({ text: "--------------------------", type: "seperator" }); for (let i = 0; i < allBarcodeResults.length; ++i) { let result: TextResult = allBarcodeResults[i]; - resultString.push({ text: "------------------", type: "seperator" }); + if(i>0) resultString.push({ text: "------------------", type: "seperator" }); resultString.push({ text: "Barcode " + (i + 1).toString(), type: "nomral" }); resultString.push({ text: "Type: " + (result.barcodeFormatString ? result.barcodeFormatString : result.barcodeFormatString_2), type: "nomral" }); resultString.push({ text: "Value: " + result.barcodeText, type: "important" }); diff --git a/src/app/dwt/dwt.component.css b/src/app/dwt/dwt.component.css index 1818a9e..a9d56eb 100644 --- a/src/app/dwt/dwt.component.css +++ b/src/app/dwt/dwt.component.css @@ -2,6 +2,10 @@ border: 0; } +.list-group { + list-style:none; +} + .mainContent { width: 100vw; max-width: 800px; diff --git a/src/app/dwt/dwt.component.html b/src/app/dwt/dwt.component.html index 46ce941..316757a 100644 --- a/src/app/dwt/dwt.component.html +++ b/src/app/dwt/dwt.component.html @@ -1,6 +1,5 @@ -
-
-
+
+
@@ -29,12 +28,12 @@ (click)="openModal(saveModalRef,'save')">
-
@@ -311,14 +309,14 @@
  • + aria-label="Checkbox for multiPage" />  Multi-Page  
  • diff --git a/src/app/dwt/dwt.component.ts b/src/app/dwt/dwt.component.ts index b3880f3..aab9f02 100644 --- a/src/app/dwt/dwt.component.ts +++ b/src/app/dwt/dwt.component.ts @@ -1,18 +1,31 @@ import { Component, Input, OnInit, OnDestroy } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; + import { DwtService, Device } from './../dwt.service'; import { WebTwain } from 'dwt/dist/types/WebTwain'; import { ThumbnailViewer } from 'dwt/dist/types/WebTwain.Viewer'; import { ThumbnailViewerSettings } from 'dwt/dist/types/WebTwain.Viewer'; import { ViewMode } from 'dwt/dist/types/WebTwain.Viewer'; -import { ViewerEvent } from 'dwt/dist/types/WebTwain.Viewer'; -import { Subscription, Observable, empty } from 'rxjs'; +import { Subscription, Observable } from 'rxjs'; + import Dynamsoft from 'dwt'; -import { NgbModal, NgbModalRef, } from '@ng-bootstrap/ng-bootstrap'; +import { NgbModal, NgbModalRef } from '@ng-bootstrap/ng-bootstrap'; +import { CallbackPipe } from '../callback.pipe'; +import { SafeurlPipe } from '../safeurl.pipe'; @Component({ selector: 'app-dwt', templateUrl: './dwt.component.html', - styleUrls: ['./dwt.component.css'] + styleUrl: './dwt.component.css', + imports: [ + NgbModule, + CommonModule, + FormsModule, + CallbackPipe, + SafeurlPipe + ] }) export class DwtComponent implements OnInit, OnDestroy { @Input() events: Observable; @@ -38,8 +51,7 @@ export class DwtComponent implements OnInit, OnDestroy { * Global variables and status flags. */ public bWin = true; - public dwtMounted = false; - public bMobile: boolean; + public dwtMounted = true; public bUseCameraViaDirectShow: boolean; public containerId = "dwtcontrolContainer"; public videoContainerId = "videoContainer"; @@ -94,7 +106,7 @@ export class DwtComponent implements OnInit, OnDestroy { public currentOptionItems = []; public currentItem = ""; public showRangePicker = false; - public rangePicker = null; + public rangePicker: any = null; public barcodeReaderOptions = { Symbologies: { All: true, @@ -112,7 +124,8 @@ export class DwtComponent implements OnInit, OnDestroy { }, Mode: "balance", showRects: true, - rectShowingTime: 3 + rectShowingTime: 3, + interval: null }; public saveOptions = { outPutType: "File", @@ -132,12 +145,20 @@ export class DwtComponent implements OnInit, OnDestroy { base64ButtonText: [], saveFileText: [], blobToShow: null - } + }; + public saveBarcodesDivScrollPos = 0; + + constructor(protected dwtService: DwtService, private modalService: NgbModal) { + + } + + ngAfterViewInit() { this.initDWT(); - this.bMobile = this.dwtService.runningEnvironment.bMobile; } + ngOnInit() { + this.eventsSubscription = this.events.subscribe( (args: any) => { if (args.type) @@ -177,7 +198,8 @@ export class DwtComponent implements OnInit, OnDestroy { switch (bufferStatus) { default: break; case "empty": this.emptyBuffer = true; break; - case "changed": this.barcodeRectsOnCurrentImage = []; + case "changed": + this.barcodeRectsOnCurrentImage = []; this.zones = []; break; } @@ -193,23 +215,29 @@ export class DwtComponent implements OnInit, OnDestroy { case "httpResponse": this.handleOutPutMessage(input.responsString, input.type, false, false); case "deviceName": - this.deviceName = input.deviceName; + if (input.deviceName === "") { + this.deviceName = "Choose..."; + } else { + this.deviceName = input.deviceName; + } break; case "cameraOptions": + if (this.deviceName === "" || this.deviceName === "Choose...") + break; this.cameraOptions = input; for (let i = 0; i < input.length; i++) { if (input[i].current) { - this.currentOptionItems = input[i].items; this.currentOption = input[i].name; + this.currentOptionItems = input[i].items; for (let j = 0; j < this.currentOptionItems.length; j++) { if (this.currentOptionItems[j].checked) { this.currentItem = this.currentOptionItems[j].value; + this.setupPlayVideo({ prop: this.currentOption, value: this.currentItem }); } } break; } } - this.setUpPlayVideo(); this.playVideo(); break; default: break; @@ -306,9 +334,9 @@ export class DwtComponent implements OnInit, OnDestroy { } unBindViewer() { if (this.DWTObject.Viewer.unbind()) { - let container = document.getElementById(this.containerId); + let container = document.getElementById(this.containerId) as HTMLDivElement; while (container.firstChild) { - container.removeChild(container.lastChild); + container.removeChild(container.firstChild); } if (!this.emptyBuffer) this.clearMessage(); @@ -320,8 +348,25 @@ export class DwtComponent implements OnInit, OnDestroy { } bindViewer() { this.DWTObject.Viewer.bind(document.getElementById(this.containerId)); - this.DWTObject.Viewer.width = "100%"; - this.DWTObject.Viewer.height = "100%"; + this.DWTObject.Viewer.width = "100%"; + this.DWTObject.Viewer.height = "100%"; + this.DWTObject.Viewer.on("wheel", ()=>{ + this.barcodeReaderOptions.showRects = false; + if(this.barcodeReaderOptions.interval) { + clearInterval(this.barcodeReaderOptions.interval); + this.barcodeReaderOptions.interval = null; + } + this.barcodeReaderOptions.rectShowingTime = 3; + }); + this.DWTObject.Viewer.on("scroll", ()=>{ + this.barcodeReaderOptions.showRects = false; + if(this.barcodeReaderOptions.interval) { + clearInterval(this.barcodeReaderOptions.interval); + this.barcodeReaderOptions.interval = null; + } + this.barcodeReaderOptions.rectShowingTime = 3; + }); + this.thumbnail = this.DWTObject.Viewer.createThumbnailViewer({size: '20%'}); if (this.thumbnail) { this.DWTObject.Viewer.show(); @@ -347,11 +392,10 @@ export class DwtComponent implements OnInit, OnDestroy { this.DWTObject.Viewer.on('OnImageAreaDeSelected', () => { this.clearMessage(); this.zones = []; }); - this.bMobile ? this.DWTObject.Viewer.cursor = 'pointer' : this.DWTObject.Viewer.cursor = 'crosshair'; + this.DWTObject.Viewer.cursor = 'crosshair'; this.DWTObject.Viewer.showPageNumber = true; //this.DWTObject.Viewer.off('imageRightClick'); - this.bMobile ? this.thumbnail.updateViewMode({columns: 1, rows: 5}) : - this.thumbnail.updateViewMode({columns: 1, rows: 3}); + this.thumbnail.updateViewMode({columns: 1, rows: 3}); if (document.getElementById(this.containerId + "-fileInput")) // Only allow one such input on the page return; @@ -362,7 +406,7 @@ export class DwtComponent implements OnInit, OnDestroy { WASMInput.setAttribute("id", this.containerId + "-fileInput"); WASMInput.setAttribute("type", "file"); WASMInput.onclick = _ => { - let filters = [], filter = ""; + let filters : string[] = [], filter = ""; this.formatsToImport.JPG ? filters.push("image/jpeg") : false; this.formatsToImport.PNG ? filters.push("image/png") : false; this.formatsToImport.TIF ? filters.push("image/tiff") : false; @@ -377,7 +421,7 @@ export class DwtComponent implements OnInit, OnDestroy { WASMInput.setAttribute("accept", filter); } WASMInput.onchange = evt => { - let _input = evt.target; + let _input = evt.target as HTMLInputElement; this.dwtService.load(_input.files) .then(_ => { this.closeModal(true); @@ -417,6 +461,7 @@ export class DwtComponent implements OnInit, OnDestroy { beforeDismiss: (): boolean => { switch (type) { case "acquire": + this.dwtService.selectADevice(""); this.deviceName = "Choose..."; return true; case "camera": @@ -427,32 +472,45 @@ export class DwtComponent implements OnInit, OnDestroy { } else { this.toggleVideo(); + this.dwtService.selectADevice(""); + this.deviceName = "Choose..."; return true; } } else { + this.dwtService.selectADevice(""); this.deviceName = "Choose..."; return this.VideoContainer.Viewer.unbind(); } case "barcode": - let __interval = setInterval( + if(this.barcodeReaderOptions.interval) { + clearInterval(this.barcodeReaderOptions.interval); + } + + this.barcodeReaderOptions.interval = setInterval( () => { this.barcodeReaderOptions.rectShowingTime--; - if (this.barcodeReaderOptions.rectShowingTime === 0) { + + if (this.barcodeReaderOptions.rectShowingTime <= 0) { this.barcodeReaderOptions.rectShowingTime = 3; this.barcodeReaderOptions.showRects = false; - clearInterval(__interval); + clearInterval(this.barcodeReaderOptions.interval); + this.barcodeReaderOptions.interval = null; } }, 1000); this.barcodeButtonText = "Read"; this.handleOutPutMessage("", "", true, true); + + let barcodesDiv = document.querySelector('.barcodeReaderOptions'); + if(barcodesDiv) { + this.saveBarcodesDivScrollPos = barcodesDiv.scrollTop; + } + return true; case "save": this.saveOptions.indices = []; return true; - break; default: return true; - break; } } }); @@ -509,6 +567,18 @@ export class DwtComponent implements OnInit, OnDestroy { if (!this.emptyBuffer) this.clearMessage(); this.barcodeReaderOptions.showRects = true; + this.barcodeRectsOnCurrentImage = []; + this.barcodeReaderOptions.rectShowingTime = 3; + if(this.barcodeReaderOptions.interval) { + clearInterval(this.barcodeReaderOptions.interval); + this.barcodeReaderOptions.interval = null; + } + + setTimeout(() => { + let barcodesDiv = document.querySelector('.barcodeReaderOptions'); + if(barcodesDiv) + barcodesDiv.scrollTo(0, this.saveBarcodesDivScrollPos); + }, 0); break; case "save": if (!this.emptyBuffer) @@ -529,20 +599,25 @@ export class DwtComponent implements OnInit, OnDestroy { this.modalRef.dismiss(); } handleDeviceChange(deviceType: string) { + + console.log('this.deviceName 0' + this.deviceName); if (this.deviceName === "" || this.deviceName === "Choose...") return; + this.dwtService.selectADevice(this.deviceName) .then( done => done ? this.openADevice(deviceType) : this.showMessage("Device selecting failed!"), error => typeof error === "string" ? this.showMessage(error) : this.showMessage("Device selecting failed!")); } openADevice(deviceType: string) { + this.clearMessage(); if (deviceType === "camera") { if (this.videoPlaying) this.toggleVideo(); this.toggleVideo(); } + } acquire() { this.scan(); @@ -584,6 +659,12 @@ export class DwtComponent implements OnInit, OnDestroy { this.barcodeButtonText = "Read"; return; } + + let barcodesDiv = document.querySelector('.barcodeReaderOptions'); + if(barcodesDiv) { + this.saveBarcodesDivScrollPos = barcodesDiv.scrollTop; + } + this.barcodeButtonText = "Reading..."; let formatId = 0, formatId2 = 0; this.barcodeReaderOptions.Symbologies.Aztec ? formatId += Dynamsoft.DBR.EnumBarcodeFormat.BF_AZTEC : formatId += 0; @@ -605,19 +686,24 @@ export class DwtComponent implements OnInit, OnDestroy { + Dynamsoft.DBR.EnumBarcodeFormat_2.BF2_RM4SCC + Dynamsoft.DBR.EnumBarcodeFormat_2.BF2_PLANET : formatId2 += 0; - this.barcodeRectsOnCurrentImage.splice(0, this.barcodeRectsOnCurrentImage.length); this.dwtService.readBarcode({ formatId: formatId, formatId2: formatId2, zones: this.zones }); } hideBarcodeTextResults() { this.barcodeButtonText = "Read"; this.handleOutPutMessage("", "", true, true); + + setTimeout(() => { + let barcodesDiv = document.querySelector('.barcodeReaderOptions'); + if(barcodesDiv) + barcodesDiv.scrollTo(0, this.saveBarcodesDivScrollPos); + }, 0); } handleOutPutMessage(message: string, type: string, bReset: boolean, bNoScroll: boolean) { let _noScroll = false, _type = "info"; if (type) _type = type; if (_type === "httpResponse") { - let msgWindow = window.open("", "Response from server", "height=500,width=750,top=0,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no"); + let msgWindow = window.open("", "Response from server", "height=500,width=750,top=0,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no") as Window; msgWindow.document.writeln(message); } else { if (bNoScroll) @@ -633,6 +719,10 @@ export class DwtComponent implements OnInit, OnDestroy { } } handleOptionChange() { + + if (this.deviceName === "" || this.deviceName === "Choose...") + return; + for (let i = 0; i < this.cameraOptions.length; i++) { if (this.cameraOptions[i].name === this.currentOption) { this.cameraOptions[i].current = true; @@ -644,24 +734,28 @@ export class DwtComponent implements OnInit, OnDestroy { for (let j = 0; j < this.currentOptionItems.length; j++) { if (this.currentOptionItems[j].checked) { this.currentItem = this.currentOptionItems[j].value; - this.setUpPlayVideo({ prop: this.currentOption, value: this.currentItem }); + this.setupPlayVideo({ prop: this.currentOption, value: this.currentItem }); this.playVideo(); break; } } } handleItemPicked() { + + if (this.deviceName === "" || this.deviceName === "Choose...") + return; + for (let j = 0; j < this.currentOptionItems.length; j++) { if (this.currentItem === this.currentOptionItems[j].value) { this.currentOptionItems[j].checked = true; - this.setUpPlayVideo({ prop: this.currentOption, value: this.currentItem }); + this.setupPlayVideo({ prop: this.currentOption, value: this.currentItem }); this.playVideo(); } else { this.currentOptionItems[j].checked = false; } } } - setUpPlayVideo(config?) { + setupPlayVideo(config?) { let _dwt = this.DWTObject; if (this.VideoContainer) _dwt = this.VideoContainer; @@ -839,7 +933,6 @@ export class DwtComponent implements OnInit, OnDestroy { } else { selectedIndices.splice(selectedIndices.indexOf(index), 1); } - selectedIndices.sort(); this.DWTObject.SelectImages(selectedIndices); } handleOutPutFormatChange(format) { diff --git a/src/main.ts b/src/main.ts index c7b673c..e73044b 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,12 +1,24 @@ -import { enableProdMode } from '@angular/core'; -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { enableProdMode, importProvidersFrom } from '@angular/core'; +import { bootstrapApplication } from '@angular/platform-browser'; -import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; +import { DwtService } from './app/dwt.service'; +import { AppComponent } from './app/app.component'; +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { BrowserModule } from '@angular/platform-browser'; +import { FormsModule } from '@angular/forms'; if (environment.production) { enableProdMode(); } -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); +bootstrapApplication(AppComponent, { + providers: [ + importProvidersFrom([ + DwtService, + NgbModule, + BrowserModule, + FormsModule + ]) + ] +}).catch(err => console.error(err)); diff --git a/src/styles.css b/src/styles.css index 616f107..e70b577 100644 --- a/src/styles.css +++ b/src/styles.css @@ -13,3 +13,9 @@ a#dwt-btn-install:hover { margin-top: 0; margin-bottom: 0; } + +.close { + position: absolute; + top: 15px; + right: 15px; +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 2338536..350a982 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,17 +1,14 @@ -/* - This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScript’s language server to improve development experience. - It is not intended to be used to perform a compilation. - - To learn more about this file see: https://angular.io/config/solution-tsconfig. -*/ { - "files": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" - } -] + "extends": "./tsconfig.base.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] } + From 6ce084b040602c12a75714d535b8ffdfec6955c7 Mon Sep 17 00:00:00 2001 From: Ellie-dynamsoft Date: Wed, 7 May 2025 13:15:46 +0800 Subject: [PATCH 10/10] update to web-twain 19.1 --- package.json | 26 ++++++++++++++------------ src/app/dwt.service.ts | 17 +++++++++++------ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 070daf6..7aeb4d4 100644 --- a/package.json +++ b/package.json @@ -8,24 +8,26 @@ }, "private": true, "dependencies": { - "@angular/common": "^19.2.2", - "@angular/compiler": "^19.2.2", - "@angular/core": "^19.2.2", - "@angular/forms": "^19.2.2", - "@angular/platform-browser": "^19.2.2", - "@angular/router": "^19.2.2", - "@angular/elements": "^19.2.2", - "@angular/build": "^19.2.3", - "@angular-devkit/build-angular": "^19.2.3", + "@angular/common": "19.2.2", + "@angular/compiler": "19.2.2", + "@angular/core": "19.2.2", + "@angular/forms": "19.2.2", + "@angular/platform-browser": "19.2.2", + "@angular/router": "19.2.2", + "@angular/elements": "19.2.2", + "@angular/build": "19.2.3", + "@angular-devkit/build-angular": "19.2.3", "@ng-bootstrap/ng-bootstrap":"18.0.0", - "dwt": "19.0.0", + "@angular/localize": "19.2.2", + "@angular/animations": "19.2.2", + "dwt": "19.1.0", "rxjs": "~7.8.1", "tslib": "^2.5.2", "bootstrap": "^5.3.3" }, "devDependencies": { - "@angular/cli": "^19.2.2", - "@angular/compiler-cli": "^19.2.2", + "@angular/cli": "19.2.2", + "@angular/compiler-cli": "19.2.2", "@types/node": "^22.13.10", "codelyzer": "^6.0.2", "protractor": "~7.0.0", diff --git a/src/app/dwt.service.ts b/src/app/dwt.service.ts index be273ad..bf1ba15 100644 --- a/src/app/dwt.service.ts +++ b/src/app/dwt.service.ts @@ -120,6 +120,17 @@ export class DwtService { this._DWTObject = _DWTObject; /*this._DWTObject.IfShowProgressBar = false; this._DWTObject.IfShowCancelDialogWhenImageTransfer = false;*/ + + // from v19.0 + this._DWTObject.Addon.PDF.SetReaderOptions({ + convertMode: Dynamsoft.DWT.EnumDWT_ConvertMode.CM_RENDERALL, + renderOptions: { + renderAnnotations: true, + resolution: 200 + }, + preserveUnmodifiedOnSave: true + }); + /** * The event OnBufferChanged is used here for monitoring the image buffer. */ @@ -405,12 +416,6 @@ export class DwtService { */ load(files?: FileList): Promise { return new Promise((res, rej) => { - this._DWTObject.Addon.PDF.SetReaderOptions({ - convertMode: Dynamsoft.DWT.EnumDWT_ConvertMode.CM_AUTO, - renderOptions: { - resolution: 200 - } - }); this._DWTObject.IfShowFileDialog = true; this._DWTObject.RegisterEvent("OnPostLoad", ( directory: string,