提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:吉炜炜|2024-11-29 10:14:38.430|阅读 156 次
概述:在本教程中,我们将探讨如何利用Dynamic Web TWAIN SDK的强大功能来创建基于 React 的文档扫描 Web 应用程序。本指南将引导您完成设置React项目、集成 SDK 以及实现功能的过程,使用户能够在用户友好的 Web 界面中扫描、上传和管理文档。
#慧都22周年庆大促·界面/图表报表/文档/IDE/IOT/测试等千款热门软控件火热促销中>>
在当今的数字时代,高效的文档管理对于企业和个人都至关重要。将文档扫描功能直接集成到 Web 应用程序中可以显著简化工作流程,使用户能够轻松地数字化和管理文档。在本教程中,我们将探讨如何利用Dynamic Web TWAIN SDK的强大功能来创建基于 React 的文档扫描 Web 应用程序。本指南将引导您完成设置React项目、集成 SDK 以及实现功能的过程,使用户能够在用户友好的 Web 界面中扫描、上传和管理文档。
先决条件
构建 React 文档扫描 Web 应用程序的步骤
在以下部分中,我们将首先创建 React 项目的基础结构,然后无缝集成动态 Web TWAIN SDK 以实现强大的文档扫描和管理功能。
要创建新的 React 项目,请选择以下方法之一:
npm install -g create-react-app create-react-app document-scan
npx create-react-app document-scan
yarn create react-app document-scan
将文档扫描与 Dynamic Web TWAIN SDK 集成
首先,安装所需的软件包:
npm install dwt@latest npm install @babel/core @babel/preset-env npm i ncp -g
Dynamic Web TWAIN SDK 包含用于扫描仪通信的平台特定服务应用程序和 JavaScript 库,位于node_modules/dwt/dist文件夹中。使用ncp这些资源将这些资源复制到public您的 React 项目的文件夹中:
ncp node_modules/dwt/dist public/dwt-resources
接下来,在中创建一个 React 组件DynamsoftSDK.js:
import React from 'react';
import Dynamsoft from 'dwt';
export default class DWT extends React.Component {
constructor(props) {
super(props);
this.state = {
sourceList: [],
scanners: [],
currentScanner: "Looking for devices.."
};
this.selectRef = React.createRef();
}
DWObject = null;
containerId = 'dwtcontrolContainer';
width = "100%";
height = "600";
componentDidMount() {
Dynamsoft.DWT.RegisterEvent('OnWebTwainReady', () => {
this.DWObject = Dynamsoft.DWT.GetWebTwain(this.containerId);
if (this.DWObject) {
this.DWObject.GetDevicesAsync(Dynamsoft.DWT.EnumDWT_DeviceType.TWAINSCANNER | Dynamsoft.DWT.EnumDWT_DeviceType.TWAINX64SCANNER).then((sources) => {
const sourceNames = sources.map(source => source.displayName);
this.setState({ scanners: sourceNames, sourceList: sources });
}).catch((error) => {
console.error("Error fetching devices:", error);
});
}
});
this.loadDWT();
}
loadDWT() {
Dynamsoft.DWT.ResourcesPath = "dwt-resources";
Dynamsoft.DWT.ProductKey = 'DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==';
Dynamsoft.DWT.Containers = [{ ContainerId: this.containerId, Width: this.width, Height: this.height }];
Dynamsoft.DWT.Load();
}
onSourceChange(value) {
this.setState({ currentScanner: value });
}
getSelectedIndex = () => {
const selectedIndex = this.selectRef.current.selectedIndex;
console.log("Selected Index:", selectedIndex);
return selectedIndex
}
acquireImage() {
const selectedIndex = this.selectRef.current.selectedIndex;
if (!this.state.sourceList || this.state.sourceList.length === 0) {
alert("No scanner detected. Please connect a scanner and try again.");
return;
}
this.DWObject.IfShowUI = false;
this.DWObject.SelectDeviceAsync(this.state.sourceList[selectedIndex]).then(() => {
return this.DWObject.OpenSourceAsync()
}).then(() => {
return this.DWObject.AcquireImageAsync({
IfDisableSourceAfterAcquire: true
})
}).then(() => {
if (this.DWObject) {
this.DWObject.CloseSource();
}
})
.catch(
(e) => {
console.error(e)
}
)
}
loadImagesOrPDFs() {
this.DWObject.IfShowFileDialog = true;
this.DWObject.Addon.PDF.SetResolution(200);
this.DWObject.Addon.PDF.SetConvertMode(1/*Dynamsoft.DWT.EnumDWT_ConvertMode.CM_RENDERALL*/);
this.DWObject.LoadImageEx("", 5 /*Dynamsoft.DWT.EnumDWT_ImageType.IT_ALL*/,
() => { },
(errorCode, errorString) => alert(errorString));
}
render() {
return (
<div style={{ width: "30%", margin: "0 auto" }}>
<select ref={this.selectRef} style={{ width: "100%" }} tabIndex="1" value={this.state.currentScanner} onChange={(e) => this.onSourceChange(e.target.value)}>
{
this.state.scanners.length > 0 ?
this.state.scanners.map((_name, _index) =>
<option value={_name} key={_index}>{_name}</option>
)
:
<option value="Looking for devices..">Looking for devices..</option>
}
</select>
<button tabIndex="2" style={{ marginRight: "4%", width: "48%" }}
onClick={() => this.acquireImage()}
disabled={this.state.scanners.length > 0 ? "" : "disabled"}
>Scan</button>
<button tabIndex="3" style={{ margin: "2% 0", width: "48%" }}
onClick={() => this.loadImagesOrPDFs()}
disabled={this.state.scanners.length > 0 ? "" : "disabled"}
>Load</button>
<div id={this.containerId}></div>
</div >
);
}
}
解释
将组件集成到 App.js
一旦你的组件准备好了,就将其集成到App.js:
import logo from './logo.svg';
import DWTLogo from './icon-dwt.svg';
import DynamsoftLogo from './logo-dynamsoft-white-159X39.svg';
import './App.css';
import DWT from './DynamsoftSDK';
function App() {
return (
<div className="App">
<header className="App-header">
<a href="//www.dynamsoft.com/web-twain/overview/" target="_blank" rel="noopener noreferrer" ><img src={DWTLogo} className="dwt-logo" alt="Dynamic Web TWAIN Logo" /></a>
<div style={{ width: "10px" }}></div>
<a href="//reactjs.org/" target="_blank" rel="noopener noreferrer" ><img src={logo} className="App-logo" alt="logo" /></a>
<div style={{ width: "18%" }}></div>
<a href="//www.dynamsoft.com" target="_blank" rel="noopener noreferrer" ><img src={DynamsoftLogo} className="ds-logo" alt="Dynamsoft Logo" /></a>
</header>
<main className="App-main">
<DWT
productKey="LICENSE-KEY"
/>
</main>
</div>
);
}
export default App;
运行应用程序
现在一切都已设置完毕,请使用以下命令运行该应用程序:
npm start
这将在您的默认 Web 浏览器中启动该应用程序,从而可以直接在您的 React 应用程序中扫描和管理文档。
获取更多产品资讯或产品试用及优惠,请联系
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@hmdbvip.cn
文章转载自:慧都网



在嵌入式软件测试领域,对交叉编译代码进行单元测试是一大挑战。Parasoft C/C++test作为专业的C/C++测试工具,能够与劳特巴赫Trace32调试器深度集成。下面会详细介绍如何在C++test中配置Trace32调试器,实现对PowerPC架构程序的单元测试,涵盖环境设置、项目导入到测试执行的全过程。
本文将为大家介绍如何使用DevExpress WinForms数据网格控件实现摘要文本的格式化,欢迎下载最新版组件体验!
Parasoft C/C++test作为一款功能强大的自动化测试工具,为嵌入式开发提供了全面的测试解决方案。特别是在CCS开发环境中,C++test能够无缝集成,为F2812等DSP项目提供专业的单元测试支持。下面将介绍如何在CCS3环境下配置和使用C++test进行F2812项目的单元测试。
在嵌入式开发中,尤其是基于ARM架构的安全关键领域,单元测试是验证代码在目标硬件上运行时行为正确性的关键环节,对于保障最终产品的可靠性至关重要。下面将介绍如何利用Parasoft C/C++test开展单元测试,包括配置、执行及解决可能遇到的许可证问题,完成从静态检查到动态运行的完整测试闭环。
相关产品
Dynamic Web TWAIN 应用于Web应用程序的TWAIN扫描识别工具,支持所有主流浏览器
Dynamsoft Barcode ReaderDynamsoft Barcode Reader SDK是一款多功能的条码读取控件。
Dynamsoft Camera SDK为你的应用程序提供支持,将iPhone或Android手机变成文档扫描仪
最新文章 MORE
永利最大(官方)网站相关的文章 MORE
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@hmdbvip.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
永利最大(官方)网站 