diff --git a/_articles/extended-usage/ocr.md b/_articles/extended-usage/ocr.md index 2d1d7600..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 @@ -13,7 +15,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 diff --git a/_articles/faq/chromium-142-local-network-access-issue.md b/_articles/faq/chromium-142-local-network-access-issue.md index 7d105bb9..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-05 17:26:42 +0800 +last_modified: 2025-11-26 15:46:00 +0800 --- # Error Troubleshooting @@ -25,18 +25,38 @@ 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.5.0 | Download Prompt | +| Chromium 142 | ≥ 18.5.0 | Blank Images after Scanning | +| Chromium 145+ (*) | Any | Download Prompt | + +> (*) **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 Chromium 142 introduces a new [Local Network Access security policy](https://chromestatus.com/feature/5152728072060928) requirement. @@ -67,27 +87,85 @@ 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 +// 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: + +> Chrome → Settings → Privacy and Security → Site Settings → Local network access + +This approach provides a more polished user experience, especially during onboarding or troubleshooting. ### 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](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). 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/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. 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. 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. diff --git a/_articles/faq/when-is-pdf-rasterizer-needed.md b/_articles/faq/when-is-pdf-rasterizer-needed.md index 3867a76a..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 @@ -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. 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. 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) diff --git a/_articles/info/api/Addon_OCR.md b/_articles/info/api/Addon_OCR.md index db5233bd..ecaa20f8 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() @@ -27,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** diff --git a/_articles/info/api/WebTwain_Viewer.md b/_articles/info/api/WebTwain_Viewer.md index 007ef2ca..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)", @@ -618,28 +618,27 @@ 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. | 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** | -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. --- 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 diff --git a/_articles/info/api/interfaces.md b/_articles/info/api/interfaces.md index f68cf9f3..51373c7d 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; } ``` diff --git a/_articles/introduction/imaging-hardware.md b/_articles/introduction/imaging-hardware.md index 54f8e7af..7f9df1f7 100644 --- a/_articles/introduction/imaging-hardware.md +++ b/_articles/introduction/imaging-hardware.md @@ -9,28 +9,17 @@ 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 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. -- [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) +In this section, we'll look at these APIs. -## 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,40 +27,51 @@ 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. -* 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](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"} -## DirectShow **Cameras** +## 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 mostly multi-function printers (MFPs). You can find the list of supported scanners [here](https://mopria.org/certified-products). + + +## 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 diff --git a/_articles/introduction/index.md b/_articles/introduction/index.md index d086c0b7..ad03395a 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 pages: + +* [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 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 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 @@