Пожалуйста, помогите мне, поделившись пошаговой процедурой для достижения функциональности сканирования с помощью Twain в ASP.Net MVC5. Спасибо
Как я могу отсканировать документ с помощью ASP.net MVC 5 с помощью Twain
Ответы (2)
Решение здесь:
В ASP.Net/Core Project вы отправляете сообщение для вызова проекта winform:
var start = function () { var i = 0; var wsImpl = window.WebSocket || window.MozWebSocket; window.ws = new wsImpl('ws://localhost:8181/'); ws.onmessage = function (e) { $('#submit').hide(); $('#scanBtn').hide(); $('.loader').show(); if (typeof e.data === "string") { //IF Received Data is String } else if (e.data instanceof ArrayBuffer) { //IF Received Data is ArrayBuffer } else if (e.data instanceof Blob) { i++; var f = e.data; f.name = "File" + i; storedFiles.push(f); formdata.append(f.name, f); var reader = new FileReader(); reader.onload = function (e) { var html = "<div class=\"col-sm-2 text-center\" style=\"border: 1px solid black; margin-left: 2px;\"><img height=\"200px\" width=\"200px\" src=\"" + e.target.result + "\" data-file='" + f.name + "' class='selFile' title='Click to remove'><br/>" + i + "</div>"; selDiv.append(html); $('#submit').show(); $('#scanBtn').show(); $('.loader').hide(); } reader.readAsDataURL(f); } }; ws.onopen = function () { //Do whatever u want when connected succesfully }; ws.onclose = function () { $('.dalert').modal('show'); }; } window.onload = start; function scanImage() { ws.send("1100"); };
https://javascript.info/websocket
В Winforms Project вы сканируете документ и отправляете графические данные обратно в проект Asp.Net/Core:
общедоступный частичный класс Form1: Form { ImageCodecInfo _tiffCodecInfo; TwainSession _twain; логический _stopScan; логический _loadingCaps; Список всех сокетов; сервер WebSocketServer; public Form1() { InitializeComponent();
if (NTwain.PlatformInfo.Current.IsApp64Bit) { Text = Text + " (64bit)"; } else { Text = Text + " (32bit)"; } foreach (var enc in ImageCodecInfo.GetImageEncoders()) { if (enc.MimeType == "image/tiff") { _tiffCodecInfo = enc; break; } } this.WindowState = FormWindowState.Minimized; this.ShowInTaskbar = false; allSockets = new List<IWebSocketConnection>(); server = new WebSocketServer("ws://0.0.0.0:8181"); server.Start(socket => { socket.OnOpen = () => { Console.WriteLine("Open!"); allSockets.Add(socket); }; socket.OnClose = () => { Console.WriteLine("Close!"); allSockets.Remove(socket); }; socket.OnMessage = message => { if (message == "1100") { this.Invoke(new Action(()=> { this.WindowState = FormWindowState.Normal; })); } }; });
}
Ссылка на проект.
https://github.com/mgriit/ScanAppForWeb
Вы можете переделать этот проект, как хотите.
На данный момент ни один из браузеров не поддерживает сканирование из коробки. Вам необходимо использовать стороннюю библиотеку (не являющуюся частью основных компонентов Microsoft .NET). В приведенном ниже примере используется Scanner.js, продукт, предлагаемый нашей компанией:
Включить сканирование со сканеров TWAIN на страницы ASP.NET: шаг за шагом
В следующих шагах используется сканер .js в качестве примера; они могут отличаться для других продуктов.
1) Включите библиотеку сканирования в свой HTML-код:
<script type="text/javascript" src="//asprise.azureedge.net/scannerjs/scanner.js"></script>
2) Добавьте кнопку для запуска процесса сканирования:
function scanToJpg() {
scanner.scan(displayImagesOnPage,
{
"twain_cap_setting" : {
"ICAP_PIXELTYPE" : "TWPT_RGB", // Color
"ICAP_XRESOLUTION" : "100", // DPI: 100
"ICAP_YRESOLUTION" : "100",
"ICAP_SUPPORTEDSIZES" : "TWSS_USLETTER" // Paper size: TWSS_USLETTER, TWSS_A4, ...
},
"output_settings" :
[
{
"type" : "return-base64",
"format" : "jpg"
}
]
}
);
}
3) Обработка результатов сканирования — отображение, загрузка и т. д.
Код ниже создает элемент img
для каждого отсканированного изображения для отображения на текущей веб-странице:
/** Processes the scan result */
function displayImagesOnPage(successful, mesg, response) {
var scannedImages = scanner.getScannedImage(response, true, false); // returns an array of ScannedImage
for(var i = 0; (scannedImages instanceof Array) && i < scannedImages.length; i++) {
var scannedImage = scannedImages[i];
processScannedImage(scannedImage);
}
}
/** Images scanned so far. */
var imagesScanned = [];
/** Processes a ScannedImage */
function processScannedImage(scannedImage) {
imagesScanned.push(scannedImage);
var elementImg = createDomElementFromModel( {
'name': 'img',
'attributes': {
'class': 'scanned',
'src': scannedImage.src
}
});
document.getElementById('images').appendChild(elementImg);
}
Примеры сканирования в формат PDF и прямой загрузки см. в репозитории кода: https://github.com/Asprise/scannerjs.javascript-scanner-access-in-browsers-chrome-ie.scanner.js