您希望在网页中连接扫描仪,在网页中进行文档扫描。当您一次性扫描多个文档时,每个文档之间有一页空白页将它们分开,此时您希望在扫描完全部文档后单独保存每组文档。
使用Dynamic Web TWAIN SDK,可以快速实现网页文档扫描的同时利用空白页进行文档分隔。
申请下载链接:https://www.damingsoft.com/products/dwt-register.aspx
安装完成后可以在C:\Program Files (x86)\Dynamsoft\Dynamic Web TWAIN SDK {版本号} Trial\Samples\Getting Started中找到一个UseEvent.html的sample页面。双击打开它即可实现最简单的网页扫描。
如果您想自己构建一个网页扫描页面,可参考文档:https://www.damingsoft.com/docs/dwt/Dev-Guide/Build-the-Hello-World-Scan-Page.html
为了做到这一点,我们将扫描所有文档,然后使用接口IsBlankImageExpress(index)来检测它是否为空白。 如果该页为空白,我们将从缓冲区中删除它并保存上一组文档。 为了完成此任务,我们将使用事件OnPostAllTransfers,它在所有扫描完成后触发,以检查是否有任何页面为空。
此时,我们可以打开UseEvent.html,将其代码稍加改动。function Dynamsoft_OnReady改动如下:
function Dynamsoft_OnReady() {
DWObject = Dynamsoft.WebTwainEnv.GetWebTwain('dwtcontrolContainer'); // Get the Dynamic Web TWAIN object that is embeded in the div with id 'dwtcontrolContainer'
//DWObject.Width = 270; // Set the width of the Dynamic Web TWAIN Object
//DWObject.Height = 400; // Set the height of the Dynamic Web TWAIN Object
if (DWObject) {
DWObject.RegisterEvent('OnPostAllTransfers', CheckBlankPage); // Register OnPostAllTransfers event. This event fires when all pages have been scanned and transferred
}
}
添加function CheckBlankPage:
function CheckBlankPage() { //Function for checking a blank page, called when OnPostAllTransfers is triggered
if (DWObject) {//Ensure there is a DWObject
var startindex = 0;
for (var i = 0; i < DWObject.HowManyImagesInBuffer; i++) {//Go through each image in the buffer.
if (DWObject.IsBlankImageExpress(i)) {
DWObject.RemoveImage(i);// remove the blank page from the buffer.
if (i != 0) {
i--; //decrement i for the removed image
DWObject.SelectedImagesCount = (i - startindex + 1); // set how many images are selected
for (var j = 0; j < DWObject.SelectedImagesCount; j++) { //loop to select all images from previous blank to current
DWObject.SetSelectedImageIndex(j, j + startindex);
}
if (DWObject.SelectedImagesCount > 0) { //save images as long as there are some in the selection
DWObject.IfShowFileDialog = true;
var randomId = (Math.floor(Math.random() * 1000 + 1)).toString();
DWObject.SaveSelectedImagesAsMultiPagePDF(randomId + ".pdf");//PLEASE CHANGE THIS FILE PATH
}
startindex = i + 1; //set the start index for next search 1 higher than current page
}
}
else if (i == DWObject.HowManyImagesInBuffer - 1) {//the last few images are not blank
DWObject.SelectedImagesCount = (i - startindex + 1); // set how many images are selected
for (var j = 0; j < DWObject.SelectedImagesCount; j++) { //loop to select all images from previous blank to current
DWObject.SetSelectedImageIndex(j, j + startindex);
}
if (DWObject.SelectedImagesCount > 0) { //save images as long as there are some in the selection
DWObject.IfShowFileDialog = true;
DWObject.SaveSelectedImagesAsMultiPagePDF("AllInOne.pdf");//PLEASE CHANGE THIS FILE PATH
}
}
}
}
}
如果您的应用程序很难检测到空白页面(空白页边缘周围有一些非空白点),或者您使用的是彩色页面,则可能需要使用页面标准偏差。 您可以改为使用以下代码段:
function CheckBlankPage(){ //Function for checking a blank page, called when OnPostAllTransfers is triggered
if(DWObject){//Ensure there is a DWObject
for(var i = 0; i < DWObject.HowManyImagesInBuffer;i++){//Go through each image in the buffer.
if(DWObject.IsBlankImageExpress(i)){}//Make Blank Image run, but do not use the result
if(DWObject.BlankImageCurrentStdDev < 15.0){//set a standard deviation for the program to use
//...... same as above code
}
}
}
}
通过以上方法,您可以轻松地实现网页文档扫描,并使用文档间空白页进行文档分隔。
当然,有的应用场景中分隔文档的标志不是空白页而是文档中的条码或者二维码。这也是文档分离的方法之一,并可以通过Dynamic Web TWAIN及其附加组件Barcode Reader来实现。我们会在之后的文章中介绍。