From dbf58170a7e664a8edbc7034de514f2a09da5fa2 Mon Sep 17 00:00:00 2001 From: Doby2333 Date: Thu, 6 Nov 2025 15:09:21 +0800 Subject: [PATCH 01/38] update: chrome 142 issue faq --- ...chromium-142-local-network-access-issue.md | 66 +++++++++++++------ 1 file changed, 47 insertions(+), 19 deletions(-) diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index 7d105bb9..fbd567a8 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -7,7 +7,7 @@ keywords: Dynamic Web TWAIN, Error Troubleshooting, CORS, unknown address space, breadcrumbText: Error message - Permission was denied for this request to access the unknown address space description: CORS unknown address space date: 2025-11-04 17:21:42 +0800 -last_modified: 2025-11-05 17:26:42 +0800 +last_modified: 2025-11-06 15:06:00 +0800 --- # Error Troubleshooting @@ -25,18 +25,36 @@ Starting in **Chromium-based browsers v142+** (released Oct 28, 2025)—includin You may experience one or more of the following: -***1. Service installer repeatedly prompted*** +#### **1) Browser repeatedly prompts to download the service** +The browser asks the user to download/install the Dynamsoft Web TWAIN Service even though it is already installed. -The browser prompts you to download/install the service even though it is already installed. ![DWT_installer.png](/assets/imgs/DWT_installer.png) -***2. Initialization succeeds, but scan/load shows blank images*** +#### **2) Initialization succeeds, but scanning / loading returns blank** +Initialization appears successful, but scanned or loaded images are blank. + +The browser console (F12 → Console) may show a CORS denial similar to: -The browser console (F12 → Console) shows a CORS rejection similar to: ```shell -Access to fetch at 'https://127.0.0.1:18623/fa/VersionInfo?ts=1761893667670' from origin 'https://your-domain.com' has been blocked by CORS policy: Permission was denied for this request to access the `unknown` address space. +Access to fetch at 'https://127.0.0.1:18623/fa/VersionInfo?ts=1761893667670' +from origin 'https://your-domain.com' has been blocked by CORS policy: +Permission was denied for this request to access the `unknown` address space. ``` +--- + +#### Version-Specific Behavior +The observed behavior depends on Chromium browser version and Dynamic Web TWAIN (DWT) version: + +| Browser Version | DWT Version | Resulting Symptom | +|-----------------|------------------|-----------------------------| +| Chromium 142 | ≤ 18.4.2 | Download Prompt | +| Chromium 142 | ≥ 18.5.0 | Blank images after scanning | +| Chromium 144 (*) | Any | Download Prompt | + +> (*) **Chromium 144 has not been officially released.** +> Behavior is based on pre-release testing and may change once the final release becomes available. + ### Root Cause Chromium 142 introduces a new [Local Network Access security policy](https://chromestatus.com/feature/5152728072060928) requirement. @@ -67,26 +85,36 @@ Please refer to: ***3. Developer Notes*** -**a) Check Permission Programmatically** +**a) If Running Inside an `iframe`** -```javascript -let status = await navigator.permissions.query({ name: "local-network-access" }); -console.log(status.state); -``` +> [!IMPORTANT] +> If Dynamic Web TWAIN is running inside an iframe from a different origin (cross-origin), you must explicitly grant local-network access in the iframe. +> If the iframe is same-origin, no additional configuration is required. -If not granted, guide users to: +To enable access, specify the `allow` attribute. +For security reasons, it is recommended to allow only the necessary origin rather than using a wildcard. -Chrome → Settings → Privacy and Security → Site Settings → Local network access +```html + + -**b) If Running Inside an `iframe`** + + +``` -> [!IMPORTANT] -> If your site is embedded in an iframe, you MUST explicitly allow local-network access. +**b) (Optional Enhancement) Permission Check for Improved UX** -Please explicitly allow `local-network-access` in the attributes of the iframe: -```html - +You can optionally query Local Network Access permission at runtime. +This isn’t required, but implementing a check can help you proactively notify users and provide clearer guidance if permission is missing. +```javascript +let status = await navigator.permissions.query({ name: "local-network-access" }); +console.log(status.state); ``` +If the permission is not granted, consider displaying a user-friendly message directing them to: + +> Chrome → Settings → Privacy and Security → Site Settings → Local network access + +This approach provides a more polished user experience, especially during onboarding or troubleshooting. ### Roadmap From facdf3facfc5bd84a442f26bce649f8c06cfe3d3 Mon Sep 17 00:00:00 2001 From: Doby2333 Date: Thu, 6 Nov 2025 17:24:59 +0800 Subject: [PATCH 02/38] enhance: add user guidance for Local Network Access permission in Chromium 142+ --- ...chromium-142-local-network-access-issue.md | 34 +++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index fbd567a8..c3f76420 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -107,8 +107,38 @@ For security reasons, it is recommended to allow only the necessary origin rathe You can optionally query Local Network Access permission at runtime. This isn’t required, but implementing a check can help you proactively notify users and provide clearer guidance if permission is missing. ```javascript -let status = await navigator.permissions.query({ name: "local-network-access" }); -console.log(status.state); +// Before initializing Dynamsoft WebTWAIN (DWT), you can remind users +// that Chrome may ask for Local Network Access permission. +(async () => { + try { + const result = await navigator.permissions.query({ name: "local-network-access" }); + console.log(`LNA permission state: ${result.state}`); + + const state = result.state; // 'denied', 'prompt', 'granted' + + if (state === "denied") { + const currentSite = encodeURIComponent(window.location.origin); + const settingsUrl = `chrome://settings/content/siteDetails?site=${currentSite}`; + console.log(`Local network access is currently denied.\n\nPlease go to:\n${settingsUrl}\nand enable 'Local network access' permission for this site.`); + // Optionally show a UI guide or help link here. + } else if (state === "prompt") { + alert("To connect with the local scanning service, Chrome will ask for 'Local network access' permission.\n\nPlease click 'Allow' when prompted."); + // Proceed to init DWT after this message. + // e.g., Dynamsoft.DWT.Load() or CreateDWTObjectEx or your init DWT function + } else if (state === "granted") { + console.log("Local network access already granted."); + // Initialize DWT or proceed directly. + // e.g., Dynamsoft.DWT.Load() or CreateDWTObjectEx or your init DWT function + } else { + console.log("Unexpected LNA state:", state); + } + + } catch (e) { + console.log("This browser does not support Chromium LNA Permissions API yet."); + // Fallback: directly initialize DWT + // Dynamsoft.DWT.Load() or CreateDWTObjectEx or your init DWT function + } +})(); ``` If the permission is not granted, consider displaying a user-friendly message directing them to: From 7a9fda8958d1472fa1f6b03b7c2d1f62b84e90b6 Mon Sep 17 00:00:00 2001 From: Doby2333 Date: Tue, 11 Nov 2025 16:30:19 +0800 Subject: [PATCH 03/38] update: refine version-specific behavior for Chromium 142+ in troubleshooting guide --- _articles/faq/chromium-142-local-network-access-issue.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index c3f76420..51c4e808 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -48,9 +48,10 @@ The observed behavior depends on Chromium browser version and Dynamic Web TWAIN | Browser Version | DWT Version | Resulting Symptom | |-----------------|------------------|-----------------------------| -| Chromium 142 | ≤ 18.4.2 | Download Prompt | -| Chromium 142 | ≥ 18.5.0 | Blank images after scanning | -| Chromium 144 (*) | Any | Download Prompt | +|Chromium 142+ | < 18.1 | Not Tested, but LNA is Required | +| Chromium 142 | ≥ 18.1 and ≤ 18.4.2 | Download Prompt | +| Chromium 142 | ≥ 18.5 | Blank Images after Scanning | +| Chromium 144+ (*) | Any | Download Prompt | > (*) **Chromium 144 has not been officially released.** > Behavior is based on pre-release testing and may change once the final release becomes available. From ba2746d8344fbc2c38d92b19a46861f48d8116eb Mon Sep 17 00:00:00 2001 From: Doby2333 Date: Wed, 12 Nov 2025 09:48:08 +0800 Subject: [PATCH 04/38] update: refine version-specific behavior details for Chromium 142 in troubleshooting guide --- .../faq/chromium-142-local-network-access-issue.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index 51c4e808..3738c4e2 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -46,12 +46,11 @@ Permission was denied for this request to access the `unknown` address space. #### Version-Specific Behavior The observed behavior depends on Chromium browser version and Dynamic Web TWAIN (DWT) version: -| Browser Version | DWT Version | Resulting Symptom | -|-----------------|------------------|-----------------------------| -|Chromium 142+ | < 18.1 | Not Tested, but LNA is Required | -| Chromium 142 | ≥ 18.1 and ≤ 18.4.2 | Download Prompt | -| Chromium 142 | ≥ 18.5 | Blank Images after Scanning | -| Chromium 144+ (*) | Any | Download Prompt | +| Browser Version | DWT Version | Resulting Symptom | +|-------------------|------------------|-----------------------------| +| Chromium 142 | < 18.5.0 | Download Prompt | +| Chromium 142 | ≥ 18.5.0 | Blank Images after Scanning | +| Chromium 144+ (*) | Any | Download Prompt | > (*) **Chromium 144 has not been officially released.** > Behavior is based on pre-release testing and may change once the final release becomes available. From 941248e151b185c00d4418207ad3a9a3942a1a72 Mon Sep 17 00:00:00 2001 From: Doby2333 Date: Thu, 13 Nov 2025 09:46:19 +0800 Subject: [PATCH 05/38] delete: remove outdated FAQ articles on Service and WebAssembly Editions --- ...nce-in-service-and-webassembly-editions.md | 21 ----------------- .../faq/use-webassembly-to-support-webcam.md | 23 ------------------- 2 files changed, 44 deletions(-) delete mode 100644 _articles/faq/difference-in-service-and-webassembly-editions.md delete mode 100644 _articles/faq/use-webassembly-to-support-webcam.md diff --git a/_articles/faq/difference-in-service-and-webassembly-editions.md b/_articles/faq/difference-in-service-and-webassembly-editions.md deleted file mode 100644 index 1a7c63cc..00000000 --- a/_articles/faq/difference-in-service-and-webassembly-editions.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -layout: default-layout -noTitleIndex: true -needAutoGenerateSidebar: true -title: What's the difference between the Desktop Service Edition and WebAssembly Edition? -keywords: Dynamic Web TWAIN, Licensing and Purchase, difference, service, webassembly -breadcrumbText: What's the difference between the Desktop Service Edition and WebAssembly Edition? -description: What's the difference between the Desktop Service Edition and WebAssembly Edition? -date: 2021-12-04 02:34:30 +0800 -last_modified: 2022-10-21 14:05:54 +0800 ---- - -# Licensing and Purchase - -## What's the difference between the Desktop Service Edition and WebAssembly Edition? - -Desktop Service Edition means Dynamic Web TWAIN operates through the [Dynamsoft Service](/_articles/extended-usage/dynamsoft-service-configuration.md){:target="_blank"} which is a quiet, background system service that handles the communication between connected physical document scanners and the browser client. - -WebAssembly Edition means Dynamic Web TWAIN operates completely within the browser with the help of Web Worker and WebAssembly. No additional installation is required for each end user. - -In short, if you need to support document scanning from USB/network document scanners, you would need to use the Desktop Service edition. Otherwise, if you are looking to capture document from webcams or mobile cameras, you may use the WebAssembly edition. diff --git a/_articles/faq/use-webassembly-to-support-webcam.md b/_articles/faq/use-webassembly-to-support-webcam.md deleted file mode 100644 index d84b57ab..00000000 --- a/_articles/faq/use-webassembly-to-support-webcam.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: default-layout -noTitleIndex: true -needAutoGenerateSidebar: true -title: Can I use the WebAssembly Edition of SDK to support webcams instead of using the Webcam Capture addon for Desktop Service Edition? -keywords: Dynamic Web TWAIN, Addon, webassembly, webcam capture -breadcrumbText: Can I use the WebAssembly Edition of SDK to support webcams instead of using the Webcam Capture addon for Desktop Service Edition? -description: Can I use the WebAssembly Edition of SDK to support webcams instead of using the Webcam Capture addon for Desktop Service Edition? -date: 2021-12-01 01:09:41 +0800 -last_modified: 2022-06-10 04:40:03 +0800 ---- - -# Addon - -## Can I use the WebAssembly Edition of SDK to support webcams instead of using the Webcam Capture addon for Desktop Service Edition? - -Yes. The WebAssembly Edition does not require installation of the local Dynamsoft Service. If the need is to capture documents from webcams or mobile cameras only, the WebAssembly Edition can be used. - -> Note - that the WebAssembly Edition is not supported by the Internet Explorer browser. - -Also, not all Dynamic Web TWAIN features are fully available in the WebAssembly Edition. For more details, please check [here](/_articles/indepth/development/upgrade.md#expand-your-application-to-mobile-platforms){:target="_blank"}. - -You will also need some advanced features of modern WASM browsers for the WebAssembly Edition. Please check WASM browsers for more information. From e6c48651eb992135d4fa042b26972d7c0cff4681 Mon Sep 17 00:00:00 2001 From: Doby2333 Date: Thu, 13 Nov 2025 10:00:54 +0800 Subject: [PATCH 06/38] delete: remove unused FAQ article on verifying scanner compatibility --- .../faq/verify-if-device-is-supported.md | 68 ------------------- 1 file changed, 68 deletions(-) delete mode 100644 _articles/faq/verify-if-device-is-supported.md diff --git a/_articles/faq/verify-if-device-is-supported.md b/_articles/faq/verify-if-device-is-supported.md deleted file mode 100644 index 960c4a6e..00000000 --- a/_articles/faq/verify-if-device-is-supported.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -layout: default-layout -noTitleIndex: true -needAutoGenerateSidebar: true -title: How can I verify if my physical document scanner works with the Dynamic Web TWAIN SDK? -keywords: Dynamic Web TWAIN, Capture/ Image Source, verify scanner, compatible -breadcrumbText: How can I verify if my physical document scanner works with the Dynamic Web TWAIN SDK? -description: How can I verify if my physical document scanner works with the Dynamic Web TWAIN SDK? -date: 2021-12-08 03:01:32 +0800 -last_modified: 2022-10-21 14:05:54 +0800 ---- - -# Capture/Image Source - -## How can I verify if my physical document scanner works with the Dynamic Web TWAIN SDK? - -Dynamsoft supports the following types of scanners - -- TWAIN Scanners (for Windows) -- ICA Scanners (for macOS) -- SANE Scanners (for Linux) - -There are two ways to check if a physical document scanner is compatible: - -1) Verify via Dynamsoft's Online Demo - -The fastest and most convenient way is to check using our online demo, which is built based on the Dynamic Web TWAIN SDK. If your scanner shows in the source list and can scan documents properly, it means it works well with our SDK. - -![source check using demo](/assets/imgs/source-check-using-demo.png) - -2) Use Native Program to Verify - -### For Windows - -Use the tool called Twacker which is developed by the TWAIN Working Group to verify if a scanner is TWAIN compatible on a Windows machine. - -1. Download and install - (Note: Please download the version of TWACKER that matches your driver architecture, not your operating system architecture. In most cases, it would be 32-bit.) - - 32-bit - - 64-bit -2. Open the program -3. Select your device from File -> Select Source... - (Note: If your device is not listed, please check if the driver is installed. Or, try running Twacker as admin to see if it shows up.) -4. Try scanning a document via Acquire... - -![source check using Twacker](/assets/imgs/source-check-using-twacker.png) - -If scanning is successful without any errors, then your device should be TWAIN compliant. You can also try other commands to see how it works. If your scanner doesn't work with TWACKER, please check your scanner model online and make sure you have installed the (latest) TWAIN driver from its manufacturer. - -### For macOS - -Use the ImageCapture app (provided by Apple Inc.) to verify if a scanner is ICA compatible on a macOS machine. - -1. Find the Image Capture application - - ![source check using mac](/assets/imgs/source-check-using-mac.png) - -2. Open the application -3. Acquire an image and see how it works - - ![source check using mac 2](/assets/imgs/source-check-using-mac-2.png) - -For more info, please check out the official guide. - -### For Linux - -Use the XSane app to verify if a scanner is SANE compatible on a Linux machine. -Please check out the official guide and this document for more detail. From 4ae533b09bd415b5b028034256405102135ef136 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Thu, 13 Nov 2025 11:30:49 +0800 Subject: [PATCH 07/38] fix links to ThumbnailViewerEvent --- _articles/info/api/WebTwain_Viewer.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/_articles/info/api/WebTwain_Viewer.md b/_articles/info/api/WebTwain_Viewer.md index 007ef2ca..b8365ac2 100644 --- a/_articles/info/api/WebTwain_Viewer.md +++ b/_articles/info/api/WebTwain_Viewer.md @@ -624,16 +624,16 @@ The following table shows the events available to a ThumbnailViewer object. | Event Name | Arguments | Description | | :------------- | :------------------------------------------------ | :------------------------------------------------------------------- | -| `click` | event: [ThumbnailViewerEvent](/_articles/info/api.html#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon primary mouse click | -| `dblclick` | event: [ThumbnailViewerEvent](/_articles/info/api.html#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon primary mouse double click | -| `contextmenu` | event: [ThumbnailViewerEvent](/_articles/info/api.html#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon secondary mouse click | -| `mousemove` | event: [ThumbnailViewerEvent](/_articles/info/api.html#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon mouse movements within the `ThumbnailViewer` | -| `mousedown` | event: [ThumbnailViewerEvent](/_articles/info/api.html#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon pressing down the primary mouse button | -| `mouseup` | event: [ThumbnailViewerEvent](/_articles/info/api.html#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon releasing the primary mouse button | +| `click` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon primary mouse click | +| `dblclick` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon primary mouse double click | +| `contextmenu` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon secondary mouse click | +| `mousemove` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon mouse movements within the `ThumbnailViewer` | +| `mousedown` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon pressing down the primary mouse button | +| `mouseup` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon releasing the primary mouse button | | `resize` | width:number, height:number | Triggered when the width or height of the `ThumbnailViewer` object changes | | `pageRendered` | index: number | Triggered when a page becomes rendered. | -| `mouseout` | event: [ThumbnailViewerEvent](/_articles/info/api.html#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon the mouse leaving the `ThumbnailViewer`; **only supported on desktop browsers** | -| `mouseover` | event: [ThumbnailViewerEvent](/_articles/info/api.html#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon mouse hovering over the `ThumbnailViewer`; **only supported on desktop browsers** | +| `mouseout` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon the mouse leaving the `ThumbnailViewer`; **only supported on desktop browsers** | +| `mouseover` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon mouse hovering over the `ThumbnailViewer`; **only supported on desktop browsers** | | `keydown` | keyboardEvent: KeyboardEvent | Triggered upon pressing a key; **only supported on desktop browsers** | | `keyup` | keyboardEvent: KeyboardEvent | Triggered upon releasing a key; **only supported on desktop browsers** | From a7928742860a0aaaa74c5fdde7703e5604603ae3 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 14 Nov 2025 16:21:36 +0800 Subject: [PATCH 08/38] revamp requirements part in introduction --- _articles/introduction/index.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/_articles/introduction/index.md b/_articles/introduction/index.md index d086c0b7..332638b1 100644 --- a/_articles/introduction/index.md +++ b/_articles/introduction/index.md @@ -43,9 +43,14 @@ DWT add-ons provide additional features: * [Barcode Reader add-on](/_articles/info/api/Addon_BarcodeReader.md) to read barcodes in documents. * [PDF Rasterizer add-on](/_articles/info/api/Addon_PDF.md) to load external PDFs. -## System Requirements +## Requirements -DWT supports most major operating [systems](/_articles/introduction/system-requirements.md), browsers, and printers using standard drivers. Learn more about hardware requirements [here](/_articles/introduction/imaging-hardware.md). Other environments not officially listed may still support DWT, but Dynamsoft does not officially support these environments as they are not tested. If you have questions about unofficially supported environments, please contact our [support team](/_articles/about/getsupport.md) for more information. +You can find supported systems, browsers, and hardware in the following page: + +* [System requirements](/_articles/introduction/system-requirements.md) +* [Hardware requirements](/_articles/introduction/imaging-hardware.md) + +In addition, [local network access permission](https://www.dynamsoft.com/web-twain/docs/faq/chromium-142-local-network-access-issue.html) and [HTTPS](https://www.dynamsoft.com/web-twain/docs/faq/http-insecure-websites-in-chromium-browser.html) are also required by latest browsers. ## API Reference From c2fa1def8e3b0ec983f6abb50a3698a471742819 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 14 Nov 2025 16:21:55 +0800 Subject: [PATCH 09/38] revamp image hardware --- _articles/introduction/imaging-hardware.md | 43 ++++++++-------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/_articles/introduction/imaging-hardware.md b/_articles/introduction/imaging-hardware.md index 54f8e7af..8b713d43 100644 --- a/_articles/introduction/imaging-hardware.md +++ b/_articles/introduction/imaging-hardware.md @@ -9,28 +9,23 @@ description: Dynamic Web TWAIN supports image capture from TWAIN Scanners, ICA S # Imaging Hardware -Dynamic Web TWAIN's main feature is interacting with imaging devices like scanners and cameras. In this section, we'll look at the supported devices. +Dynamic Web TWAIN's main feature is interacting with imaging devices like scanners and cameras via different scanning APIs like TWAIN, ICA, SANE and DirectShow. As long as the scanner is supported by these APIs, Dynamic Web TWAIN can use them. + +In this section, we'll look at these APIs. - [Imaging Hardware](#imaging-hardware) - - [TWAIN Scanners](#twain-scanners) - - [Facts about TWAIN](#facts-about-twain) - - [ICA Scanners](#ica-scanners) - - [Facts about ICA](#facts-about-ica) - - [SANE Scanners](#sane-scanners) - - [Facts about SANE](#facts-about-sane) - - [DirectShow **Cameras**](#directshow-cameras) + - [TWAIN](#twain) + - [ICA](#ica) + - [SANE](#sane) + - [DirectShow](#directshow) -## TWAIN Scanners +## TWAIN ![Hardware-Scanners-Cameras-1](/assets/imgs/Hardware-Scanners-Cameras-1.png) -`TWAIN Scanners` refer to image scanners and document scanners that have drivers following the TWAIN standard. - -### Facts about TWAIN - * TWAIN is an application programming interface (API) and communication protocol that regulate communication between software and digital imaging devices, such as image scanners and digital cameras. -* TWAIN is supported on Microsoft Windows, Linux, and macOS X. However, based on our experience and the experience of many customers, TWAIN only works well on Windows. On Linux, [SANE](#sane-scanners) is the better and preferred alternative; on macOS, [ICA](#ica-scanners) is the better and preferred alternative. +* TWAIN is supported on Microsoft Windows, Linux, and macOS X. However, based on our experience and the experience of many customers, TWAIN only works well on Windows. On Linux, [SANE](#sane) is the better and preferred alternative; on macOS, [ICA](#ica) is the better and preferred alternative. * TWAIN is actively maintained by the non-profit [TWAIN Working Group](https://www.twain.org/). Members of the group consist of scanner vendors and imaging software vendors, including FUJITSU, Panasonic, Epson, HP, ExactCODE, LEADTOOLS, and of course, Dynamsoft. @@ -38,29 +33,21 @@ Dynamic Web TWAIN's main feature is interacting with imaging devices like scanne See more: [How to use TWACKER to check if your device is TWAIN Compliant?](/_articles/faq/how-to-use-TWACKER-to-check-if-your-device-is-TWAIN-Compliant.md){:target="_blank"} -## ICA Scanners +## ICA ![Hardware-Scanners-Cameras-2](/assets/imgs/Hardware-Scanners-Cameras-2.png) -`ICA Scanners` refer to image scanners that have drivers designed in accordance with the [ImageCaptureCore Framework](https://developer.apple.com/documentation/imagecapturecore). - -### Facts about ICA - -* ICA is a framework from Apple designed to "Browse for media devices and control them programmatically from your app." +* ICA is a framework ([ImageCaptureCore Framework](https://developer.apple.com/documentation/imagecapturecore)) from Apple designed to "Browse for media devices and control them programmatically from your app." * ICA is supported on macOS X. See more: [How to test if your scanner supports ICA scanning on Mac OS?](/_articles/faq/how-to-test-if-your-scanner-supports-ICA-scanning-on-Mac-OS.md){:target="_blank"} -## SANE Scanners +## SANE ![Hardware-Scanners-Cameras-3](/assets/imgs/Hardware-Scanners-Cameras-3.png) -`SANE Scanners` refer to image scanners that have drivers designed in accordance with the [SANE API](http://www.sane-project.org/). - -### Facts about SANE - -* SANE stands for "Scanner Access Now Easy" and is an application programming interface (API) that provides standardized access to any raster image scanner hardware. +* [SANE](http://www.sane-project.org/) stands for "Scanner Access Now Easy" and is an application programming interface (API) that provides standardized access to any raster image scanner hardware. * SANE is supported on multiple Linux distributions. @@ -68,10 +55,10 @@ See more: [How to test if your scanner supports ICA scanning on Mac OS?](/_artic See more: [How to test if your device is SANE compliant?](/_articles/faq/how-to-test-if-your-device-is-SANE-compliant.md){:target="_blank"} -## DirectShow **Cameras** +## DirectShow ![Hardware-Scanners-Cameras-4](/assets/imgs/Hardware-Scanners-Cameras-4.png) -`DirectShow Cameras` refer to the cameras which can be accessed via the [Microsoft DirectShow architecture](https://docs.microsoft.com/en-us/windows/win32/directshow/introduction-to-directshow). These cameras are either built into desktops / laptops or connected via USB. +Cameras can be accessed via the [Microsoft DirectShow architecture](https://docs.microsoft.com/en-us/windows/win32/directshow/introduction-to-directshow). These cameras are either built into desktops / laptops or connected via USB. See more: [Is my Camera DirectShow Compliant?](/_articles/faq/how-to-test-if-your-camera-is-DirectShow-compliant.md){:target="_blank"} \ No newline at end of file From ccbdb8951307b03fb36fb7102c4771bfb6098b53 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 14 Nov 2025 16:26:09 +0800 Subject: [PATCH 10/38] add link to supported devices by sane --- _articles/introduction/imaging-hardware.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_articles/introduction/imaging-hardware.md b/_articles/introduction/imaging-hardware.md index 8b713d43..34494510 100644 --- a/_articles/introduction/imaging-hardware.md +++ b/_articles/introduction/imaging-hardware.md @@ -53,6 +53,8 @@ See more: [How to test if your scanner supports ICA scanning on Mac OS?](/_artic * As of version 16.1.1, `Dynamic Web TWAIN` supports SANE v1.0.25. +* You can find the list of supported device [here](https://www.sane-project.org/sane-supported-devices.html). + See more: [How to test if your device is SANE compliant?](/_articles/faq/how-to-test-if-your-device-is-SANE-compliant.md){:target="_blank"} ## DirectShow From 1ecd8059d5161526383c39eacfd3208dc95083c3 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 14 Nov 2025 16:27:18 +0800 Subject: [PATCH 11/38] Update imaging-hardware.md --- _articles/introduction/imaging-hardware.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_articles/introduction/imaging-hardware.md b/_articles/introduction/imaging-hardware.md index 34494510..a9937cd1 100644 --- a/_articles/introduction/imaging-hardware.md +++ b/_articles/introduction/imaging-hardware.md @@ -9,7 +9,7 @@ description: Dynamic Web TWAIN supports image capture from TWAIN Scanners, ICA S # Imaging Hardware -Dynamic Web TWAIN's main feature is interacting with imaging devices like scanners and cameras via different scanning APIs like TWAIN, ICA, SANE and DirectShow. As long as the scanner is supported by these APIs, Dynamic Web TWAIN can use them. +Dynamic Web TWAIN's main feature is interacting with imaging devices like scanners and cameras via different APIs like TWAIN, ICA, SANE and DirectShow. As long as the scanner is supported by these APIs, Dynamic Web TWAIN can use them. In this section, we'll look at these APIs. @@ -53,7 +53,7 @@ See more: [How to test if your scanner supports ICA scanning on Mac OS?](/_artic * As of version 16.1.1, `Dynamic Web TWAIN` supports SANE v1.0.25. -* You can find the list of supported device [here](https://www.sane-project.org/sane-supported-devices.html). +* You can find the list of supported devices [here](https://www.sane-project.org/sane-supported-devices.html). See more: [How to test if your device is SANE compliant?](/_articles/faq/how-to-test-if-your-device-is-SANE-compliant.md){:target="_blank"} From 7a52fbd61bc2b8b84672a0b026d25f0dcda28d5b Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 14 Nov 2025 16:30:59 +0800 Subject: [PATCH 12/38] add local network access to the note of dwt initialization --- _articles/general-usage/initialization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_articles/general-usage/initialization.md b/_articles/general-usage/initialization.md index eebde7a5..25bf0479 100644 --- a/_articles/general-usage/initialization.md +++ b/_articles/general-usage/initialization.md @@ -60,7 +60,7 @@ For demonstration purposes, save the sample in an HTML file (e.g. `helloWorld.ht Otherwise, click [here](/_articles/general-usage/server-deployment.md) to learn how to deploy DWT on your web server. -> If your environment does not have **Dynamic Web TWAIN Service** installed, a prompt will appear to ask you to install the service. You can learn more about what the service does [here](/_articles/faq/what-does-dynamsoft-service-do-on-end-user-machine.md). +> If your environment does not have **Dynamic Web TWAIN Service** installed or local network access is not granted, a prompt will appear to ask you to install the service. You can learn more about what the service does [here](/_articles/faq/what-does-dynamsoft-service-do-on-end-user-machine.md). Below is more detail on what happens during initialization and how to retrieve the `WebTwain` object. From 34346206191bd9a200524342bf5647b87386ada2 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 14 Nov 2025 16:35:47 +0800 Subject: [PATCH 13/38] remove contents in imaging-hardware --- _articles/introduction/imaging-hardware.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/_articles/introduction/imaging-hardware.md b/_articles/introduction/imaging-hardware.md index a9937cd1..b3b90e3f 100644 --- a/_articles/introduction/imaging-hardware.md +++ b/_articles/introduction/imaging-hardware.md @@ -13,12 +13,6 @@ Dynamic Web TWAIN's main feature is interacting with imaging devices like scanne In this section, we'll look at these APIs. -- [Imaging Hardware](#imaging-hardware) - - [TWAIN](#twain) - - [ICA](#ica) - - [SANE](#sane) - - [DirectShow](#directshow) - ## TWAIN ![Hardware-Scanners-Cameras-1](/assets/imgs/Hardware-Scanners-Cameras-1.png) From e121f0e74a240459dfb089b593789656271a721e Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 14 Nov 2025 16:35:59 +0800 Subject: [PATCH 14/38] fix grammar mistakes in introduction --- _articles/introduction/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_articles/introduction/index.md b/_articles/introduction/index.md index 332638b1..ad03395a 100644 --- a/_articles/introduction/index.md +++ b/_articles/introduction/index.md @@ -45,7 +45,7 @@ DWT add-ons provide additional features: ## Requirements -You can find supported systems, browsers, and hardware in the following page: +You can find supported systems, browsers, and hardware in the following pages: * [System requirements](/_articles/introduction/system-requirements.md) * [Hardware requirements](/_articles/introduction/imaging-hardware.md) From fb0dbae8d899a33feb463ff5a79c5adaa1e51011 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Fri, 14 Nov 2025 16:47:44 +0800 Subject: [PATCH 15/38] Update imaging-hardware.md --- _articles/introduction/imaging-hardware.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_articles/introduction/imaging-hardware.md b/_articles/introduction/imaging-hardware.md index b3b90e3f..c9e2a6c9 100644 --- a/_articles/introduction/imaging-hardware.md +++ b/_articles/introduction/imaging-hardware.md @@ -9,7 +9,7 @@ description: Dynamic Web TWAIN supports image capture from TWAIN Scanners, ICA S # Imaging Hardware -Dynamic Web TWAIN's main feature is interacting with imaging devices like scanners and cameras via different APIs like TWAIN, ICA, SANE and DirectShow. As long as the scanner is supported by these APIs, Dynamic Web TWAIN can use them. +Dynamic Web TWAIN's main feature is interacting with imaging devices like scanners and cameras via different APIs like TWAIN, ICA, SANE and DirectShow. As long as the scanners are supported by these APIs, Dynamic Web TWAIN can use them. In this section, we'll look at these APIs. From 188db6940a942a83d7a2235c8b3a3e4757499b7e Mon Sep 17 00:00:00 2001 From: dynamsoft-h <172081603+dynamsoft-h@users.noreply.github.com> Date: Fri, 14 Nov 2025 19:49:51 -0800 Subject: [PATCH 16/38] fix: topchanged event description and entry --- _articles/info/api/WebTwain_Viewer.md | 35 +++++++++++++-------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/_articles/info/api/WebTwain_Viewer.md b/_articles/info/api/WebTwain_Viewer.md index b8365ac2..c7a326ad 100644 --- a/_articles/info/api/WebTwain_Viewer.md +++ b/_articles/info/api/WebTwain_Viewer.md @@ -568,11 +568,11 @@ objThumbnailViewer.on("click", function(thumbnailViewerEvent, domEvent) { }); // Log the width of the thumbnail container that the user clicked on (secondary mouse button) objThumbnailViewer.on("contextmenu",function(thumbnailViewerEvent, domEvent) { - console.log("Width of selected thumbnail container: " + thumbnailViewerEvent.pageWidth); + console.log("Width of selected thumbnail container: " + thumbnailViewerEvent.pageWidth); }); // Log the index of the image when rendered objThumbnailViewer.on("pageRendered", function(index) { - console.log("Index of rendered page: " + index); + console.log("Index of rendered page: " + index); }); ``` @@ -622,22 +622,21 @@ For the `CheckboxSettings` and `PageNumberSettings` interface, please refer to t The following table shows the events available to a ThumbnailViewer object. -| Event Name | Arguments | Description | -| :------------- | :------------------------------------------------ | :------------------------------------------------------------------- | -| `click` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon primary mouse click | -| `dblclick` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon primary mouse double click | -| `contextmenu` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon secondary mouse click | -| `mousemove` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon mouse movements within the `ThumbnailViewer` | -| `mousedown` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon pressing down the primary mouse button | -| `mouseup` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon releasing the primary mouse button | -| `resize` | width:number, height:number | Triggered when the width or height of the `ThumbnailViewer` object changes | -| `pageRendered` | index: number | Triggered when a page becomes rendered. | -| `mouseout` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon the mouse leaving the `ThumbnailViewer`; **only supported on desktop browsers** | -| `mouseover` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon mouse hovering over the `ThumbnailViewer`; **only supported on desktop browsers** | -| `keydown` | keyboardEvent: KeyboardEvent | Triggered upon pressing a key; **only supported on desktop browsers** | -| `keyup` | keyboardEvent: KeyboardEvent | Triggered upon releasing a key; **only supported on desktop browsers** | - -By default, scrolling the scroll bar on the `ThumbnailViewer` does not trigger the `topchanged` event. +| Event Name | Arguments | Description | +| :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | +| `click` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon primary mouse click | +| `dblclick` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon primary mouse double click | +| `contextmenu` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon secondary mouse click | +| `mousemove` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon mouse movements within the `ThumbnailViewer` | +| `mousedown` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon pressing down the primary mouse button | +| `mouseup` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon releasing the primary mouse button | +| `topchanged` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon scrolling through the thumbnail viewer, **except if using the scroll bar** | +| `resize` | width:number, height:number | Triggered when the width or height of the `ThumbnailViewer` object changes | +| `pageRendered` | index: number | Triggered when a page becomes rendered. | +| `mouseout` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon the mouse leaving the `ThumbnailViewer`; **only supported on desktop browsers** | +| `mouseover` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon mouse hovering over the `ThumbnailViewer`; **only supported on desktop browsers** | +| `keydown` | keyboardEvent: KeyboardEvent | Triggered upon pressing a key; **only supported on desktop browsers** | +| `keyup` | keyboardEvent: KeyboardEvent | Triggered upon releasing a key; **only supported on desktop browsers** | The method [`unbind()`](/_articles/info/api/WebTwain_Viewer.md#unbind) will dispose all created ThumbnailViewer objects. From 1e6533c8906142fcfab4cf8c017b93386188cf44 Mon Sep 17 00:00:00 2001 From: dynamsoft-h <172081603+dynamsoft-h@users.noreply.github.com> Date: Fri, 14 Nov 2025 19:50:46 -0800 Subject: [PATCH 17/38] fix: broken link typo for stable release notes --- _articles/faq/upgrade-to-latest-version.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_articles/faq/upgrade-to-latest-version.md b/_articles/faq/upgrade-to-latest-version.md index 597fc182..44030675 100644 --- a/_articles/faq/upgrade-to-latest-version.md +++ b/_articles/faq/upgrade-to-latest-version.md @@ -22,7 +22,7 @@ Please refer to the upgrade guide and the release notes below to update your app [Dynamic Web TWAIN Development - Upgrade Guide](/_articles/indepth/development/upgrade.md){:target="_blank"} -[Dynamic Web TWAIN Schedule - Stable Release](/_articles/info/schedule/stable.md){:target="_blank"} +[Dynamic Web TWAIN Schedule - Stable Release](/_articles/info/schedule/Stable.md){:target="_blank"} Once you are ready to upgrade, please send an email to sales@dynamsoft.com requesting the upgrade be done. From 50643014dc8f3c1e242e0eefa1303ab1ca7b81e8 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Tue, 18 Nov 2025 10:06:06 +0800 Subject: [PATCH 18/38] Revert "fix: topchanged event description and entry" This reverts commit 188db6940a942a83d7a2235c8b3a3e4757499b7e. --- _articles/info/api/WebTwain_Viewer.md | 35 ++++++++++++++------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/_articles/info/api/WebTwain_Viewer.md b/_articles/info/api/WebTwain_Viewer.md index c7a326ad..b8365ac2 100644 --- a/_articles/info/api/WebTwain_Viewer.md +++ b/_articles/info/api/WebTwain_Viewer.md @@ -568,11 +568,11 @@ objThumbnailViewer.on("click", function(thumbnailViewerEvent, domEvent) { }); // Log the width of the thumbnail container that the user clicked on (secondary mouse button) objThumbnailViewer.on("contextmenu",function(thumbnailViewerEvent, domEvent) { - console.log("Width of selected thumbnail container: " + thumbnailViewerEvent.pageWidth); + console.log("Width of selected thumbnail container: " + thumbnailViewerEvent.pageWidth); }); // Log the index of the image when rendered objThumbnailViewer.on("pageRendered", function(index) { - console.log("Index of rendered page: " + index); + console.log("Index of rendered page: " + index); }); ``` @@ -622,21 +622,22 @@ For the `CheckboxSettings` and `PageNumberSettings` interface, please refer to t The following table shows the events available to a ThumbnailViewer object. -| Event Name | Arguments | Description | -| :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | -| `click` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon primary mouse click | -| `dblclick` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon primary mouse double click | -| `contextmenu` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon secondary mouse click | -| `mousemove` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon mouse movements within the `ThumbnailViewer` | -| `mousedown` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon pressing down the primary mouse button | -| `mouseup` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon releasing the primary mouse button | -| `topchanged` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon scrolling through the thumbnail viewer, **except if using the scroll bar** | -| `resize` | width:number, height:number | Triggered when the width or height of the `ThumbnailViewer` object changes | -| `pageRendered` | index: number | Triggered when a page becomes rendered. | -| `mouseout` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon the mouse leaving the `ThumbnailViewer`; **only supported on desktop browsers** | -| `mouseover` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="\_blank"} | Triggered upon mouse hovering over the `ThumbnailViewer`; **only supported on desktop browsers** | -| `keydown` | keyboardEvent: KeyboardEvent | Triggered upon pressing a key; **only supported on desktop browsers** | -| `keyup` | keyboardEvent: KeyboardEvent | Triggered upon releasing a key; **only supported on desktop browsers** | +| Event Name | Arguments | Description | +| :------------- | :------------------------------------------------ | :------------------------------------------------------------------- | +| `click` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon primary mouse click | +| `dblclick` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon primary mouse double click | +| `contextmenu` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon secondary mouse click | +| `mousemove` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon mouse movements within the `ThumbnailViewer` | +| `mousedown` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon pressing down the primary mouse button | +| `mouseup` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon releasing the primary mouse button | +| `resize` | width:number, height:number | Triggered when the width or height of the `ThumbnailViewer` object changes | +| `pageRendered` | index: number | Triggered when a page becomes rendered. | +| `mouseout` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon the mouse leaving the `ThumbnailViewer`; **only supported on desktop browsers** | +| `mouseover` | event: [ThumbnailViewerEvent](/_articles/info/api/interfaces.md#thumbnailviewerevent), domEvent: [MouseEvent](https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent){:target="_blank"} | Triggered upon mouse hovering over the `ThumbnailViewer`; **only supported on desktop browsers** | +| `keydown` | keyboardEvent: KeyboardEvent | Triggered upon pressing a key; **only supported on desktop browsers** | +| `keyup` | keyboardEvent: KeyboardEvent | Triggered upon releasing a key; **only supported on desktop browsers** | + +By default, scrolling the scroll bar on the `ThumbnailViewer` does not trigger the `topchanged` event. The method [`unbind()`](/_articles/info/api/WebTwain_Viewer.md#unbind) will dispose all created ThumbnailViewer objects. From c1224a3c226a402ea2547ffc365ac5b2f9e452a4 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Tue, 18 Nov 2025 10:09:06 +0800 Subject: [PATCH 19/38] fix: remove the mention of the topchanged event and move unbind up --- _articles/info/api/WebTwain_Viewer.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/_articles/info/api/WebTwain_Viewer.md b/_articles/info/api/WebTwain_Viewer.md index b8365ac2..0e2195a6 100644 --- a/_articles/info/api/WebTwain_Viewer.md +++ b/_articles/info/api/WebTwain_Viewer.md @@ -618,6 +618,8 @@ objThumbnailViewer.on("pageRendered", function(index) { **Usage notes** +The method [`unbind()`](/_articles/info/api/WebTwain_Viewer.md#unbind) will dispose all created ThumbnailViewer objects. + For the `CheckboxSettings` and `PageNumberSettings` interface, please refer to the APIs [`updateCheckboxStyle()`](/_articles/info/api/WebTwain_Viewer.md#updatecheckboxstyle) and [`updatePageNumberStyle()`](/_articles/info/api/WebTwain_Viewer.md#updatepagenumberstyle). The following table shows the events available to a ThumbnailViewer object. @@ -637,9 +639,6 @@ The following table shows the events available to a ThumbnailViewer object. | `keydown` | keyboardEvent: KeyboardEvent | Triggered upon pressing a key; **only supported on desktop browsers** | | `keyup` | keyboardEvent: KeyboardEvent | Triggered upon releasing a key; **only supported on desktop browsers** | -By default, scrolling the scroll bar on the `ThumbnailViewer` does not trigger the `topchanged` event. - -The method [`unbind()`](/_articles/info/api/WebTwain_Viewer.md#unbind) will dispose all created ThumbnailViewer objects. --- From 00bf246efc8f36634d3eb0d2769325918761d2c1 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Tue, 18 Nov 2025 17:54:27 +0800 Subject: [PATCH 20/38] add details to chromium 142 faq's roadmap --- .../chromium-142-local-network-access-issue.md | 14 ++++++++++++++ .../local-network-access/prompt-blocked.jpg | Bin 0 -> 45459 bytes .../service-installation-dialog.png | Bin 0 -> 29930 bytes 3 files changed, 14 insertions(+) create mode 100644 assets/imgs/local-network-access/prompt-blocked.jpg create mode 100644 assets/imgs/local-network-access/service-installation-dialog.png diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index 3738c4e2..0a5e4875 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -149,3 +149,17 @@ This approach provides a more polished user experience, especially during onboar ### Roadmap Dynamsoft plans to add a feature that automatically detects local service connectivity and permission status. If the connection is blocked, users will be prompted with a message and directed to this FAQ page. + +Here are the details: + +* When local network access is blocked, prompt the user with the following dialog: + + ![prompt blocked](/assets/imgs/local-network-access/prompt-blocked.jpg) + +* Add a sentence about the permission in the service installation dialog, since we cannot determine whether the connection failure is due to the service not being installed or the access being blocked. + + ![prompt blocked](/assets/imgs/local-network-access/service-installation-dialog.png) + + Clicking "Guide" will open the dialog shown above. + +This design will be integrated in v19.3. For old versions, we can include an extra js file, which can be retrieved by contacting [support](support@dynamsoft.com). \ No newline at end of file diff --git a/assets/imgs/local-network-access/prompt-blocked.jpg b/assets/imgs/local-network-access/prompt-blocked.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ffea0be5493370f1fb3d29ea4d2355e8ed56a618 GIT binary patch literal 45459 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Ä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 Date: Tue, 18 Nov 2025 17:59:21 +0800 Subject: [PATCH 21/38] fix mail link --- _articles/faq/chromium-142-local-network-access-issue.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index 0a5e4875..9c8d16a7 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -162,4 +162,4 @@ Here are the details: Clicking "Guide" will open the dialog shown above. -This design will be integrated in v19.3. For old versions, we can include an extra js file, which can be retrieved by contacting [support](support@dynamsoft.com). \ No newline at end of file +This design will be integrated in v19.3. For old versions, we can include an extra js file, which can be retrieved by contacting [support](mailto://support@dynamsoft.com). \ No newline at end of file From 9f311ceff35b56065174ac385463c14f3141f30b Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 24 Nov 2025 11:14:48 +0800 Subject: [PATCH 22/38] update LNA notes about browser versions --- _articles/faq/chromium-142-local-network-access-issue.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index 9c8d16a7..9063c81b 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -44,16 +44,18 @@ Permission was denied for this request to access the `unknown` address space. --- #### Version-Specific Behavior + The observed behavior depends on Chromium browser version and Dynamic Web TWAIN (DWT) version: | Browser Version | DWT Version | Resulting Symptom | |-------------------|------------------|-----------------------------| | Chromium 142 | < 18.5.0 | Download Prompt | | Chromium 142 | ≥ 18.5.0 | Blank Images after Scanning | -| Chromium 144+ (*) | Any | Download Prompt | +| Chromium 145+ (*) | Any | Download Prompt | -> (*) **Chromium 144 has not been officially released.** +> (*) **Chromium 145, which can also block websocket, has not been officially released.** > Behavior is based on pre-release testing and may change once the final release becomes available. +> Edge 143 and Firefox Nightly will have local network permission control as well. ### Root Cause From 31c3c22972630ad405aafb8232074bed696e01ad Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 24 Nov 2025 11:22:03 +0800 Subject: [PATCH 23/38] update LNA FAQ's modified date --- _articles/faq/chromium-142-local-network-access-issue.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index 9063c81b..c8a05089 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -7,7 +7,7 @@ keywords: Dynamic Web TWAIN, Error Troubleshooting, CORS, unknown address space, breadcrumbText: Error message - Permission was denied for this request to access the unknown address space description: CORS unknown address space date: 2025-11-04 17:21:42 +0800 -last_modified: 2025-11-06 15:06:00 +0800 +last_modified: 2025-11-24 11:06:00 +0800 --- # Error Troubleshooting From 378e676c3471dff5a7a4bbb1748850acf254b11a Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Tue, 25 Nov 2025 14:21:03 +0800 Subject: [PATCH 24/38] fix the spellings of properties in thumbnail viewer --- _articles/info/api/WebTwain_Viewer.md | 2 +- _articles/info/api/interfaces.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/_articles/info/api/WebTwain_Viewer.md b/_articles/info/api/WebTwain_Viewer.md index 0e2195a6..a5c053a8 100644 --- a/_articles/info/api/WebTwain_Viewer.md +++ b/_articles/info/api/WebTwain_Viewer.md @@ -592,7 +592,7 @@ var thumbnailViewerSettings = { allowResizing: false, pageBackground: "transparent", pageBorder: "1px solid rgb(238, 238, 238)", - hoverBackground: "rgb(239, 246, 253)", + hoverPageBackground: "rgb(239, 246, 253)", hoverPageBorder: "1px solid rgb(238, 238, 238)", placeholderBackground: "rgb(251, 236, 136)", selectedPageBorder: "1px solid rgb(125,162,206)", diff --git a/_articles/info/api/interfaces.md b/_articles/info/api/interfaces.md index f110fc9e..2fa85694 100644 --- a/_articles/info/api/interfaces.md +++ b/_articles/info/api/interfaces.md @@ -1151,13 +1151,13 @@ interface ThumbnailViewer { * 'Invalid property value' will be reported when the specified value type is wrong or the parameter name is spelled incorrectly. * Allow any CSS rules */ - hoverBackground: string; + hoverPageBackground: string; /** * Set the image border when the mouse is hovered. * 'Invalid property value' will be reported when the specified value type is wrong or the parameter name is spelled incorrectly. * Allow any CSS rules */ - hoverBorder: string; + hoverPageBorder: string; /** * Set the background when dragging the image. The default value is yellow. * 'Invalid property value' will be reported when the specified value type is wrong or the parameter name is spelled incorrectly. @@ -1169,13 +1169,13 @@ interface ThumbnailViewer { * 'Invalid property value' will be reported when the specified value type is wrong or the parameter name is spelled incorrectly. * Allow any CSS rules */ - selectedImageBorder: string; + selectedPageBorder: string; /** * Set the background of the selected image. * 'Invalid property value' will be reported when the specified value type is wrong or the parameter name is spelled incorrectly. * Allow any CSS rules */ - selectedImageBackground: string; + selectedPageBackground: string; } ``` From 0398fb0fa4445da99d378974b06f878fd59f2847 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Wed, 26 Nov 2025 15:36:24 +0800 Subject: [PATCH 25/38] add WIA and eSCL in imaging-hardware.md --- _articles/introduction/imaging-hardware.md | 15 ++++++++++++++- assets/imgs/Hardware-Scanners-WIA.png | Bin 0 -> 72675 bytes 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 assets/imgs/Hardware-Scanners-WIA.png diff --git a/_articles/introduction/imaging-hardware.md b/_articles/introduction/imaging-hardware.md index c9e2a6c9..5f74f651 100644 --- a/_articles/introduction/imaging-hardware.md +++ b/_articles/introduction/imaging-hardware.md @@ -9,7 +9,7 @@ description: Dynamic Web TWAIN supports image capture from TWAIN Scanners, ICA S # Imaging Hardware -Dynamic Web TWAIN's main feature is interacting with imaging devices like scanners and cameras via different APIs like TWAIN, ICA, SANE and DirectShow. As long as the scanners are supported by these APIs, Dynamic Web TWAIN can use them. +Dynamic Web TWAIN's main feature is interacting with imaging devices like scanners and cameras via different APIs like TWAIN, ICA, SANE, WIA, eSCL and DirectShow. As long as the scanners are supported by these APIs, Dynamic Web TWAIN can use them. In this section, we'll look at these APIs. @@ -51,6 +51,19 @@ See more: [How to test if your scanner supports ICA scanning on Mac OS?](/_artic See more: [How to test if your device is SANE compliant?](/_articles/faq/how-to-test-if-your-device-is-SANE-compliant.md){:target="_blank"} +## WIA + +![Hardware-Scanners-WIA](/assets/imgs/Hardware-Scanners-WIA.png) + +Windows Image Acquisition (WIA) is the still image acquisition platform in the Windows family of operating systems starting with Windows Millennium Edition (Windows Me) and Windows XP. + +Most multi-function printers are supported by WIA without the need to install extra drivers. But for advanced scanners, TWAIN is still a better choice. + +## eSCL + +eSCL (also named Mopria) is a RESTful interface. The network scanners broadcast themselves via Bonjour and the client can find them and send HTTP requests to scan documents. It is a driverless solution. The supported devices are limited, mostly multi-function printers (MFPs). + + ## DirectShow ![Hardware-Scanners-Cameras-4](/assets/imgs/Hardware-Scanners-Cameras-4.png) diff --git a/assets/imgs/Hardware-Scanners-WIA.png b/assets/imgs/Hardware-Scanners-WIA.png new file mode 100644 index 0000000000000000000000000000000000000000..ae98aa22a8166414e008c934b08a8ecf590f58f6 GIT binary patch literal 72675 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

Po7)Y>974_LzMt=QU05t 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 Q`v3p{07*qoM6N<$f;JN4^#A|> literal 0 HcmV?d00001 From f6022db96ebd7b404671c435cc8ec4e78fdab756 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Wed, 26 Nov 2025 15:53:18 +0800 Subject: [PATCH 26/38] add other causes in the LNA FAQ --- _articles/faq/chromium-142-local-network-access-issue.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index c8a05089..45da3f34 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -164,4 +164,8 @@ Here are the details: Clicking "Guide" will open the dialog shown above. -This design will be integrated in v19.3. For old versions, we can include an extra js file, which can be retrieved by contacting [support](mailto://support@dynamsoft.com). \ No newline at end of file +This design will be integrated in v19.3. For old versions, we can include an extra js file, which can be retrieved by contacting [support](mailto://support@dynamsoft.com). + +## Other Causes + +There are other causes of service not being connected. You can find them in [another FAQ](/_articles/faq/service-prompting-to-install-repeatedly.md). From 061e92293f273ea120bbc985d50aec2633b44cef Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Wed, 26 Nov 2025 15:59:50 +0800 Subject: [PATCH 27/38] mention preserveUnmodifiedOnSave in the PDF rasterizer FAQ --- _articles/faq/when-is-pdf-rasterizer-needed.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/_articles/faq/when-is-pdf-rasterizer-needed.md b/_articles/faq/when-is-pdf-rasterizer-needed.md index 3867a76a..de644605 100644 --- a/_articles/faq/when-is-pdf-rasterizer-needed.md +++ b/_articles/faq/when-is-pdf-rasterizer-needed.md @@ -16,4 +16,6 @@ last_modified: 2025-01-15 14:58:40 +0800 Third-party generated PDF files may house multiple images, text, or annotations in a single PDF page. As these elements must be rendered within the Dynamic Web TWAIN, it will utilize the PDF rasterizer addon. -When importing a PDF file generated by Dynamic Web TWAIN, or if each page of a third-party PDF holds nothing but a single, unadulterated image, there's no need for the PDF rasterizer addon. +When importing a PDF file generated by Dynamic Web TWAIN, or if each page of a third-party PDF holds nothing but a single image, there's no need for the PDF rasterizer addon. + +If you need to append images to an existing PDF and want to keep the original pages instead of rasterized images in the saved PDF, you need to enable the [`preserveUnmodifiedOnSave`](/_articles/info/api/interfaces.md#:~:text=preserveUnmodifiedOnSave){:target="_blank"} property. From a6e343d70da1333ce3e1675cff51b8da0cbf61b2 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Wed, 26 Nov 2025 16:00:42 +0800 Subject: [PATCH 28/38] update modified date --- _articles/faq/chromium-142-local-network-access-issue.md | 2 +- _articles/faq/when-is-pdf-rasterizer-needed.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index 45da3f34..e4495656 100644 --- a/_articles/faq/chromium-142-local-network-access-issue.md +++ b/_articles/faq/chromium-142-local-network-access-issue.md @@ -7,7 +7,7 @@ keywords: Dynamic Web TWAIN, Error Troubleshooting, CORS, unknown address space, breadcrumbText: Error message - Permission was denied for this request to access the unknown address space description: CORS unknown address space date: 2025-11-04 17:21:42 +0800 -last_modified: 2025-11-24 11:06:00 +0800 +last_modified: 2025-11-26 15:46:00 +0800 --- # Error Troubleshooting diff --git a/_articles/faq/when-is-pdf-rasterizer-needed.md b/_articles/faq/when-is-pdf-rasterizer-needed.md index de644605..1b92bae7 100644 --- a/_articles/faq/when-is-pdf-rasterizer-needed.md +++ b/_articles/faq/when-is-pdf-rasterizer-needed.md @@ -7,7 +7,7 @@ keywords: Dynamic Web TWAIN, Addon, pdf rasterizer breadcrumbText: When do I need PDF Rasterizer Addon? Can I load existing PDF files into the Dynamic Web TWAIN SDK without the PDF Rasterizer addon? description: When do I need PDF Rasterizer Addon? Can I load existing PDF files into the Dynamic Web TWAIN SDK without the PDF Rasterizer addon? date: 2021-12-01 01:09:41 +0800 -last_modified: 2025-01-15 14:58:40 +0800 +last_modified: 2025-11-26 15:58:40 +0800 --- # Addon From fbd07281d6788d1900d14f4356987318c4c3a056 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Wed, 26 Nov 2025 17:14:12 +0800 Subject: [PATCH 29/38] Update imaging-hardware.md --- _articles/introduction/imaging-hardware.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/_articles/introduction/imaging-hardware.md b/_articles/introduction/imaging-hardware.md index 5f74f651..7f9df1f7 100644 --- a/_articles/introduction/imaging-hardware.md +++ b/_articles/introduction/imaging-hardware.md @@ -45,9 +45,9 @@ See more: [How to test if your scanner supports ICA scanning on Mac OS?](/_artic * SANE is supported on multiple Linux distributions. -* As of version 16.1.1, `Dynamic Web TWAIN` supports SANE v1.0.25. +* `Dynamic Web TWAIN` supports SANE v1.0.25+. -* You can find the list of supported devices [here](https://www.sane-project.org/sane-supported-devices.html). +* You can find the list of supported devices [here](http://www.sane-project.org/sane-supported-devices.html). See more: [How to test if your device is SANE compliant?](/_articles/faq/how-to-test-if-your-device-is-SANE-compliant.md){:target="_blank"} @@ -55,13 +55,17 @@ See more: [How to test if your device is SANE compliant?](/_articles/faq/how-to- ![Hardware-Scanners-WIA](/assets/imgs/Hardware-Scanners-WIA.png) -Windows Image Acquisition (WIA) is the still image acquisition platform in the Windows family of operating systems starting with Windows Millennium Edition (Windows Me) and Windows XP. +* Windows Image Acquisition (WIA) is the still image acquisition platform in the Windows family of operating systems starting with Windows Millennium Edition (Windows Me) and Windows XP. -Most multi-function printers are supported by WIA without the need to install extra drivers. But for advanced scanners, TWAIN is still a better choice. +* Most multi-function printers are supported by WIA without the need to install extra drivers. But for advanced scanners, TWAIN is still a better choice. ## eSCL -eSCL (also named Mopria) is a RESTful interface. The network scanners broadcast themselves via Bonjour and the client can find them and send HTTP requests to scan documents. It is a driverless solution. The supported devices are limited, mostly multi-function printers (MFPs). +* eSCL (also named Mopria) is a RESTful interface. The network scanners broadcast themselves via Bonjour and the client can find them and send HTTP requests to scan documents. + +* It is a driverless solution. + +* The supported devices are mostly multi-function printers (MFPs). You can find the list of supported scanners [here](https://mopria.org/certified-products). ## DirectShow From d367826200902b64d6b72aa0e7ed11afabadfa9a Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 1 Dec 2025 14:51:56 +0800 Subject: [PATCH 30/38] set noTitleIndex and needGenerateH3Content for OCR guide --- _articles/info/api/Addon_OCR.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_articles/info/api/Addon_OCR.md b/_articles/info/api/Addon_OCR.md index db5233bd..ba5e757a 100644 --- a/_articles/info/api/Addon_OCR.md +++ b/_articles/info/api/Addon_OCR.md @@ -1,6 +1,8 @@ --- layout: default-layout needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true title: Dynamic Web TWAIN SDK API Reference - OCR Addon APIs keywords: Dynamic Web TWAIN, Documentation, API Reference, OCR Addon APIs breadcrumbText: OCR Addon From e35c179ccb0ba1a8c28d25155edc2204c68c63f4 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 1 Dec 2025 14:52:19 +0800 Subject: [PATCH 31/38] update OCR system requirement --- _articles/extended-usage/ocr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_articles/extended-usage/ocr.md b/_articles/extended-usage/ocr.md index 2d1d7600..d285b08a 100644 --- a/_articles/extended-usage/ocr.md +++ b/_articles/extended-usage/ocr.md @@ -13,7 +13,7 @@ Dynamic Web TWAIN provides an OCR add-on to extract text in your scanned images. ## Requirements -* Windows 10+ +* Windows 10 versions >= 1809 and all versions of Windows 11 * A license with the OCR module ## How to Use From ad3797736f060d2f2302fc0e63a55d6932be56c6 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 1 Dec 2025 14:52:54 +0800 Subject: [PATCH 32/38] update latest version 19.3 --- _includes/version-list.html | 2 +- assets/js/setLatestVersion.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_includes/version-list.html b/_includes/version-list.html index 800d82b5..6aaca7f3 100644 --- a/_includes/version-list.html +++ b/_includes/version-list.html @@ -1,6 +1,6 @@

    -
  • Latest Version (19.2)
  • +
  • Latest Version (19.3)
  • Version 19.0
  • Version 18.5.1
  • Version 18.4
  • diff --git a/assets/js/setLatestVersion.js b/assets/js/setLatestVersion.js index af40f3a1..6eb15b16 100644 --- a/assets/js/setLatestVersion.js +++ b/assets/js/setLatestVersion.js @@ -1,4 +1,4 @@ -var versionNoteLatestVersion = "19.2" +var versionNoteLatestVersion = "19.3" $(function() { $("#versionNoteLatestVersion").text(" (" + versionNoteLatestVersion + ")") From a70ad78503cd1e43ab80243075f31186a19c2b33 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 1 Dec 2025 15:42:19 +0800 Subject: [PATCH 33/38] add EnableLocalNetworkMixedContent in index.md --- _articles/info/api/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/_articles/info/api/index.md b/_articles/info/api/index.md index c6fdf768..cb3c81a4 100644 --- a/_articles/info/api/index.md +++ b/_articles/info/api/index.md @@ -36,10 +36,10 @@ breadcrumbText: API Reference ### Properties -| [`Autoload`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#autoload) | [`Containers`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#containers) | [`CustomizableDisplayInfo`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#customizabledisplayinfo) | [`DeviceFriendlyName`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#devicefriendlyname) | -| [`Host`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#host) | [`IfAddMD5InUploadHeader`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#ifaddmd5inuploadheader) | [`IfConfineMaskWithinTheViewer`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#ifconfinemaskwithintheviewer) | [`JSVersion`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#jsversion) | -| [`ProductKey`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#productkey) | [`ResourcesPath`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#resourcespath) | [`ServiceInstallerLocation`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#serviceinstallerlocation) | [`UseDefaultViewer`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#usedefaultviewer) | -| [`IfCheckCORS`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#ifcheckcors) | [`IfAlwaysFocusOnPopupWindow`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#ifalwaysfocusonpopupwindow) | | +| [`AutoLoad`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#autoload) | [`Containers`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#containers) | [`CustomizableDisplayInfo`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#customizabledisplayinfo) | [`DeviceFriendlyName`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#devicefriendlyname) | +| [`EnableLocalNetworkMixedContent`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#enablelocalnetworkmixedcontent) | [`Host`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#host) | [`IfAddMD5InUploadHeader`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#ifaddmd5inuploadheader) | [`IfConfineMaskWithinTheViewer`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#ifconfinemaskwithintheviewer) | +| [`JSVersion`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#jsversion) | [`ProductKey`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#productkey) | [`ResourcesPath`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#resourcespath) | [`ServiceInstallerLocation`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#serviceinstallerlocation) | +| [`UseDefaultViewer`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#usedefaultviewer) | [`IfCheckCORS`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#ifcheckcors) | [`IfAlwaysFocusOnPopupWindow`](/_articles/info/api/Dynamsoft_WebTwainEnv.md#ifalwaysfocusonpopupwindow) | | ### Events From c52e5cafb7a6adb0dc689e2f93b89abf2f4e70c5 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 1 Dec 2025 15:59:15 +0800 Subject: [PATCH 34/38] move the noTitleIndex and needGenerateH3Content to OCR guide --- _articles/extended-usage/ocr.md | 2 ++ _articles/info/api/Addon_OCR.md | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_articles/extended-usage/ocr.md b/_articles/extended-usage/ocr.md index d285b08a..c8721f7d 100644 --- a/_articles/extended-usage/ocr.md +++ b/_articles/extended-usage/ocr.md @@ -1,6 +1,8 @@ --- layout: default-layout needAutoGenerateSidebar: true +needGenerateH3Content: true +noTitleIndex: true title: Dynamic Web TWAIN SDK Features - OCR keywords: Dynamic Web TWAIN, Documentation, OCR breadcrumbText: OCR diff --git a/_articles/info/api/Addon_OCR.md b/_articles/info/api/Addon_OCR.md index ba5e757a..db5233bd 100644 --- a/_articles/info/api/Addon_OCR.md +++ b/_articles/info/api/Addon_OCR.md @@ -1,8 +1,6 @@ --- layout: default-layout needAutoGenerateSidebar: true -needGenerateH3Content: true -noTitleIndex: true title: Dynamic Web TWAIN SDK API Reference - OCR Addon APIs keywords: Dynamic Web TWAIN, Documentation, API Reference, OCR Addon APIs breadcrumbText: OCR Addon From 7034cd8589a4ed4b9a3aa9097260ab631e4c89b1 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 1 Dec 2025 16:03:12 +0800 Subject: [PATCH 35/38] add methods table in OCR api docs --- _articles/info/api/Addon_OCR.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/_articles/info/api/Addon_OCR.md b/_articles/info/api/Addon_OCR.md index db5233bd..5a5dc8b4 100644 --- a/_articles/info/api/Addon_OCR.md +++ b/_articles/info/api/Addon_OCR.md @@ -13,6 +13,9 @@ description: Dynamic Web TWAIN SDK Documentation API Reference OCR Addon APIs Pa **Methods** +| [`GetInstalledOCRInfo()`](#getinstalledocrinfo) | [`DetectPageOrientation()`](#detectpageorientation) | [`Recognize()`](#recognize) | [`SaveToPath()`](#savetopath) | +| [`SaveAsBase64()`](#saveasbase64) | [`SaveAsBlob()`](#saveasblob) | | | + --- ## GetInstalledOCRInfo() From 1f226a5b108d19e8350602f592da00002c2c4d60 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 1 Dec 2025 16:04:12 +0800 Subject: [PATCH 36/38] add OCR API in the side menu --- _data/full_tree.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_data/full_tree.yml b/_data/full_tree.yml index 3bbcfab4..2bbee6ea 100644 --- a/_data/full_tree.yml +++ b/_data/full_tree.yml @@ -164,6 +164,8 @@ tree_list: # path: /info/api/Addon_Camera.html - name: PDF Rasterizer path: /info/api/Addon_PDF.html + - name: OCR + path: /info/api/Addon_OCR.html - name: Webcam path: /info/api/Addon_Webcam.html - name: Enumerations From 82ecebf06a6cf84bfacf924695199b69177216c7 Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 1 Dec 2025 16:15:09 +0800 Subject: [PATCH 37/38] add OCR guide to index.md --- _articles/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_articles/index.md b/_articles/index.md index af0460b9..1b6388fc 100644 --- a/_articles/index.md +++ b/_articles/index.md @@ -49,6 +49,7 @@ description: Dynamic Web TWAIN SDK Documentation Homepage - [Using the DWT RESTful API]({{site.extended-usage}}restful-api.html) - [Barcode Recognition]({{site.extended-usage}}barcode-processing.html) - [PDF Handling]({{site.extended-usage}}pdf-processing.html) +- [OCR](/_articles/extended-usage/ocr.md) - [Remote Scan](https://www.dynamsoft.com/remote-scan/docs/introduction/) - [Configuring System Messages]({{site.extended-usage}}system-message-configuration.html) From 5812e8c8bdc2075f78ac678f8e17f448941ae04d Mon Sep 17 00:00:00 2001 From: tony-xlh Date: Mon, 1 Dec 2025 16:16:02 +0800 Subject: [PATCH 38/38] update return value of GetInstalledOCRInfo --- _articles/info/api/Addon_OCR.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_articles/info/api/Addon_OCR.md b/_articles/info/api/Addon_OCR.md index 5a5dc8b4..ecaa20f8 100644 --- a/_articles/info/api/Addon_OCR.md +++ b/_articles/info/api/Addon_OCR.md @@ -30,7 +30,7 @@ GetInstalledOCRInfo(): Promise; **Return Values** -An [`OCRInfo`](/_articles/info/api/interfaces.md#ocrinfo) object. +Promise of an [`OCRInfo`](/_articles/info/api/interfaces.md#ocrinfo) object. **Availability**