【发布时间】:2016-08-04 08:05:49
【问题描述】:
请通过分享一步一步的过程来帮助我,以在 ASP.Net MVC5 中使用 Twain 实现扫描功能。谢谢你
【问题讨论】:
标签: c# asp.net-mvc scanning twain
请通过分享一步一步的过程来帮助我,以在 ASP.Net MVC5 中使用 Twain 实现扫描功能。谢谢你
【问题讨论】:
标签: c# asp.net-mvc scanning twain
解决方案在这里:
在 ASP.Net/Core 项目中,您发送消息以调用 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 服务器; 公共表格1() { 初始化组件();
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 页面的扫描:逐步
以下步骤以Scanner.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
【讨论】: