使用DWT (Dynamic Web TWAIN) 的2D Barcode插件可以轻松使用JavaScript API读取PDF417二维码信息。这里演示如何在网页中实现一个美国驾照条形码信息自动识别的Web应用。

参考文章:How to Build a Web App to Read PDF417 Barcode with DWT

步骤说明

  1. 扫描或者加载一张美国驾照图片。

  2. 从DWT的native服务进程中获取识别结果。

  3. 在Web客户端获取结果并填充到对应项中。

使用DWT SDK实现Web应用

在Resources目录中放置Barcode.zip和Barcodex64.zip。

创建index.html:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<!DOCTYPE html>
<html>
<head>
    <title>Use Dynamic Web TWAIN to Read Barcode</title>
    <style> 
        #mainWindow {
            width:600px;
            margin:0px auto;
            padding:15px;
            background-color:#eee;
        }
    </style>
    <script type="text/javascript" src="Resources/dynamsoft.webtwain.initiate.js"> </script>
    <script type="text/javascript" src="Resources/dynamsoft.webtwain.config.js"> </script>
</head>
  
<body>
    <div id="mainWindow">
    <H1> Dynamic Web TWAIN - Driver's Licenses</H1>
    <input type="button" value="Scan" onclick="AcquireImage();" />
    <input type="button" value="Load" onclick="LoadImage();" />
    <input type="button" value="Read Driver License" onclick="ReadBarcode();" /> <br/>
  
    First Name: <input type="text" id="FirstName" />
    Last Name: <input type="text" id="LastName"/> <br />
    City: <input type="text" id="City" />
    Address: <input type="text" id="Address" />
    License Number: <input type="text" id="LicenseNumber" /> <br />
    State: <input type="text" id="State" />
    Zip: <input type="text" id="Zip" />
  
    <!-- dwtcontrolContainer is the default div id for Dynamic Web TWAIN control.
         If you need to rename the id, you should also change the id in the dynamsoft.webtwain.config.js accordingly. -->
    <div id="dwtcontrolContainer"></div>
  
    <script type="text/javascript">
        Dynamsoft.WebTwainEnv.RegisterEvent('OnWebTwainReady', Dynamsoft_OnReady); // Register OnWebTwainReady event. This event fires as soon as Dynamic Web TWAIN is initialized and ready to be used
  
        var DWObject;
        var text;
  
        function Dynamsoft_OnReady() {
            DWObject = Dynamsoft.WebTwainEnv.GetWebTwain('dwtcontrolContainer'); // Get the Dynamic Web TWAIN object that is embeded in the div with id 'dwtcontrolContainer'
  
        }
  
        function AcquireImage() {
            if (DWObject) {
                DWObject.SelectSource();
                DWObject.OpenSource();
                DWObject.IfDisableSourceAfterAcquire = true;    // Scanner source will be disabled/closed automatically after the scan.
                DWObject.AcquireImage();
            }
        }
  
        //Callback functions for async APIs
        function OnSuccess() {
            console.log('successful');
        }
  
        function OnFailure(errorCode, errorString) {
            alert(errorString);
        }
  
        function LoadImage() {
            if (DWObject) {
                DWObject.IfShowFileDialog = true; // Open the system's file dialog to load image
                DWObject.LoadImageEx("", EnumDWT_ImageType.IT_ALL, OnSuccess, OnFailure); // Load images in all supported formats (.bmp, .jpg, .tif, .png, .pdf). OnSuccess or OnFailure will be called after the operation
            }
        }
  
        function GetField(keyword) {
  
            var k = text.search(keyword);
            var n = text.indexOf(":", k);
            var m = text.indexOf("\n", n);
            var subtext = text.substring(n+1, m);
            return subtext;
        }
  
        function GetBarcodeInfo(sImageIndex, result) {//This is the function called when barcode is read successfully
            //Retrieve barcode details
            var count = result.GetCount();
            if (count == 0) {
                alert("The barcode for the selected format is not found.");
                return;
            else {
                for (i = 0; i < count; i++) {
                    text = result.GetContent(i);
                    var x = result.GetX1(i);
                    var y = result.GetY1(i);
                    var format = result.GetFormat(i);
                    var barcodeText = ("barcode[" + (i + 1) + "]: " "\n" + text + "\n");
                    //barcodeText += ("format: PDF 417" + "\n");
                    //barcodeText += ("x: " + x + " y:" + y + "\n");
                    //var strBarcodeString = text + "\r\n" + (format == 4 ? "Code 39" : "Code 128");
                    //DWObject.AddText(DWObject.CurrentImageIndexInBuffer, x, y, strBarcodeString, -1, 94700, 0, 1);
                    // alert(barcodeText);   // get driver license info
  
                    alert(text);
                    if (text.search("Given Name") == -1)
                        document.getElementById("FirstName").value = GetField("First Name");
                    else
                        document.getElementById("FirstName").value = GetField("Given Name");
                    document.getElementById("LastName").value = GetField("Last Name");
                    document.getElementById("LicenseNumber").value = GetField("License Number");
                    document.getElementById("State").value = GetField("State");
                    document.getElementById("City").value = GetField("City");
                    document.getElementById("Address").value = GetField("Address");
                    document.getElementById("Zip").value = GetField("Zip");
  
                }
            }
        }
  
        function ReadBarcode() {
  
            if (DWObject) {
                if (DWObject.Addon.Barcode.GetLocalVersion() == "9, 6, 2, 303") {
                    if (DWObject.HowManyImagesInBuffer == 0) {
                        alert("Please scan or load an image first.");
                        return;
                    }
  
                    result = DWObject.Addon.Barcode.Read(
                            DWObject.CurrentImageIndexInBuffer, 1024, GetBarcodeInfo, OnFailure);
                }
                else {
                    DWObject.Addon.Barcode.Download("\\Resources\\Barcode.zip",ReadBarcode,OnFailure);
                }
            }
        }
    </script>
    </div>
</body>
</html>

把整个工程部署到server就可以运行测试了。

视频


源码

https://github.com/DynamsoftRD/pdf417-barcode-reader

?
1
git clone https://github.com/DynamsoftRD/pdf417-barcode-reader.git

PDF417美国驾照条形码信息自动识别相关推荐

  1. 如何在Android设备上识别读取美国驾照信息

    根据美国机动车管理者协会(AAMVA https://www.aamva.org/DL-ID-Card-Design-Standard/)的规定,美国驾照使用PDF417编码,如下图: Google ...

  2. winfrom 实现条形码批量打印以及将条形码信息生成PDF文件

    最近,老大让给客户做个邮包管理程序.其中,包括一些基本信息的增.删.查和改,这些倒不是很难搞定它分分钟的事.其主要难点就在于如何生成条形码.如何批量打印条形码以及将界面条形码信息批量生成以其各自的 b ...

  3. winfrom 实现条形码批量打印以及将条形码信息生成PDF文件

    最近,老大让给客户做个邮包管理程序.其中,包括一些基本信息的增.删.查和改,这些倒不是很难搞定它分分钟的事.其主要难点就在于如何生成条形码.如何批量打印条形码以及将界面条形码信息批量生成以其各自的 b ...

  4. 【历史上的今天】9 月 7 日:世界上第一部电子电视;惠普联合创始人出生;上亿美国人隐私信息泄露

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 9 月 7 日,在科技历史上,今天的许多风雨都藏在不言之中:惠普的联合创始人诞生,为硅谷神话奠基:第 ...

  5. VB如何自动保存_VB开发的身份证个人信息自动识别软件

    今天我们共同来看一下用VB编写的实用小工具--身份证自动提取性别.年龄.出生日期等个人信息的软件. 身份证是我们每个公民都有的,根据它可以唯一识别出具体是某个人. 程序实现功能: 当用户单击" ...

  6. curl指定代理_如何使用cURL指定用户代理

    curl指定代理 Over the years I've shared how to perform a number of actions with cURL: how to send POST d ...

  7. 美国访问学者生活之行-公交及考驾照

    到美国的访问学者和博士后,生活中离不开衣食住行,本篇知识人网小编借用一位访问学者的经历,谈谈行的问题.因为篇幅较长,所以分成了两篇加以介绍.本篇主要谈公交及考驾照的情况. 公交(Public Tran ...

  8. C++Builder下利用TImage制作二维条码PDF417打印控件(一)

    PDF417二维条码的应用 现代社会,由于条码的使用,极大地提高了数据采集和信息处理的速度,提高了工作效率,为管理的科学化和现代化作出了很大贡献. 受信息容量的限制,一维条码必须依赖于后台的数据库才能 ...

  9. 转:条形码技术在供应链管理中的作用

    一次完整商务过程包括由生产厂家将产品生产出来,通过运输.仓储.加工.配送到用户.消费者的物流全过程.其中分为以下几个方面:生产厂家将生产的单个产品进行包装,并将多个产品集中在大的包装箱内;然后,经过运 ...

最新文章

  1. 程序员的自我修养--链接、装载与库笔记:目标文件里有什么
  2. 无法加载mspdb140.dll
  3. python 冒泡排序算法(超级详细)
  4. 哈利波特检索_语料库ing说: 难怪哈利波特与混血王子那么好看
  5. 安装ISO系统(原版系统)系统终极方法
  6. GitHub 上最受欢迎的 5 大 Java 项目
  7. reids和memcache的区别和一些常见的问题
  8. RequireJS使用小结1——for Effective JavaScript Module Loading
  9. (17)机器学习_集成学习
  10. VBoxGuestAdditions.iso无法在virtualbox中正确安装
  11. 布谷鸟过滤器java使用_Redis布隆过滤器与布谷鸟过滤器
  12. 计算机软件期刊是不是中文核心,2020计算机测量与控制是什么期刊_计算机测量与控制是核心期刊吗_计算机测量与控制官网...
  13. 胡润研究院发布《2018胡润区块链富豪榜》
  14. 肽核酸(PNA)偶联穿膜肽(CCPs)(KFF)3K形成CCPs-PNA|肽核酸的使用方法
  15. linux最多多少主分区,Linux为什么最多能分4个四个主分区
  16. PS系列之 -- 通道抠图进阶 : 用通道抠取头发
  17. 【自动控制原理】根轨迹Root Locus-笔记
  18. 安装Polygon库
  19. 免费CDN加速服务 jsDelivr 支持npm,GitHub,WordPress
  20. scylladb docker 运行试用

热门文章

  1. 操作系统简述复习笔记
  2. 项目无法启动,Disconnected from the target VM
  3. OpenGL 凹凸贴图实例
  4. 常见物联网无线组网方式
  5. 英伟达显示器停止服务器,NVIDIA 451.67版显卡驱动发布:修复23个Bug、拯救144Hz HDMI显示器...
  6. 2021北航计算机考研人数,惊了!2021考研人数422万?!淘汰率或超过70%?8所高校报考人数汇总...
  7. C7:如何使用JEPG Simulation进行ColorTuning?
  8. Git+Vscode+ToroiseGit+码云
  9. 2021年焊工(初级)新版试题及焊工(初级)考试技巧
  10. 12.2 两个重要级数