为了快速提高用户的扫描效率并做好PDF分类,用户在扫描大量PDF前可用白纸将需要分类的PDF给隔开,在用下面的代码扫描时,即可自动输出多份PDF。
旧版链接:How to use a blank page as a separator
这是2016年之前的版本,当前版本已经改掉了一些API,不再适用,现对其进行稍微修改即可。下面是完整的代码
新版代码:
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
<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="dwtcontrolContainer" ></div>
<input type="button" value="Acquire" onclick="AcquireImage();" />
<script type="text/javascript">
function Dynamsoft_OnReady() {
DWObject = Dynamsoft.DWT.GetWebTwain('dwtcontrolContainer');
}
function AcquireImage() {
if (DWObject) {
DWObject.RegisterEvent('OnPostAllTransfers', CheckBlankPage); // Register OnPostAllTransfers event. This event fires when all pages have been scanned and transferred
if (DWObject.UseLocalService) {
DWObject.SelectSource(function () {
var OnAcquireImageSuccess = OnAcquireImageFailure = function () {
DWObject.CloseSource();
};
DWObject.OpenSource();
DWObject.IfDisableSourceAfterAcquire = true;
DWObject.AcquireImage(OnAcquireImageSuccess, OnAcquireImageFailure);
}, function () {
console.log('SelectSource failed!');
});
}
}
}
function CheckBlankPage() { //Function for checking a blank page, called when OnPostAllTransfers is triggered
if (DWObject) {//Ensure there is a DWObject
var startindex = 0;
console.log('DWObject.HowManyImagesInBuffer', DWObject.HowManyImagesInBuffer)
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
let arr = []
for (var j = 0; j < DWObject.SelectedImagesCount; j++) { //loop to select all images from previous blank to current
// console.log(1, j, j + startindex)
// DWObject.SelectImages([j, j + startindex]);
arr.push(j + startindex)
}
console.log('arr1', arr)
DWObject.SelectImages(arr);
if (DWObject.SelectedImagesCount > 0) { //save images as long as there are some in the selection
console.log('非最后一份')
DWObject.IfShowFileDialog = false;
var randomId = (Math.floor(Math.random() * 1000 + 1)).toString();
DWObject.SaveSelectedImagesAsMultiPagePDF('C:\\ProgramData\\epson\\'+randomId + ".pdf", (suc) => {
console.log('suc', suc)
},
(errorCode, errorString) => {
console.log('errorCode', errorCode, errorString)
});//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
console.log('最后一份')
DWObject.SelectedImagesCount = (i - startindex + 1); // set how many images are selected
let arr = []
for (var j = 0; j < DWObject.SelectedImagesCount; j++) { //loop to select all images from previous blank to current
// console.log(2, j, j + startindex)
// DWObject.SelectImages([j, j + startindex]);
arr.push(j + startindex)
}
console.log('arr2', arr)
DWObject.SelectImages(arr);
if (DWObject.SelectedImagesCount > 0) { //save images as long as there are some in the selection
DWObject.IfShowFileDialog = false;
DWObject.SaveSelectedImagesAsMultiPagePDF("C:\\ProgramData\\epson\\李四.pdf", (suc) => {
console.log('suc2', suc)
},
(errorCode, errorString) => {
console.log('errorCode2', errorCode, errorString)
});//PLEASE CHANGE THIS FILE PATH
}
}
}
}
}
</script>
</body>
</html>
上面的代码是扫描自动保存的,如果需要用户手动输入名字保存每一份PDF,则需要把DWObject.IfShowFileDialog设置为true,SaveSelectedImagesAsMultiPagePDF函数的第一个参数改为默认名称即可,不需要绝对路径了。