您的位置:首页 > 其它

如何简单扫描整理

2015-08-27 16:16 218 查看

背景

2.开发的原因是因为需要扫描A、B、C。。多种文档然后放入不同的文件夹并且修改文件名。有些打印机具有编程功能,可以设定文件夹名称,但是还是需要人工修改文件名,扫描过程中还必须停下来。

3.想过很多ORC的方式来解决如何区分A\B\C文件的办法,但是速度慢并且效果差。

4.最后解决办法很简单,扫完A之后扫描一张纯色的图片,然后随机几个点判断是否是这个颜色,如果是则确定A文档已扫描完成,然后扫描B,同理。

5.在用高拍仪、摄像头的时候会因为现场光源影响图片的扫描结果,所以需要设定一个颜色区间。

6.效果奇好,识别达到100%

功能

1.把要扫描的文档扫描到一个文件夹里面

2.设定图片关联的数据,用程序进行处理

3.输出结果

关键代码

1.动作锦囊

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Threading;
using System.Diagnostics;
using System.Data;
using REP = DAL.ImgScan.Repository;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace DAL.ImgScan.Service
{
public class Facade
{
public static List<REP.ParamInfo> Run(string[] pathes, BackgroundWorker bWork)
{
REP.GeneralSetting generalRec = XMLModual.ReadGeneralConfig(pathes[1]);
List<REP.ParamInfo> errLogs = new List<REP.ParamInfo>();
switch (generalRec.CatalogType)
{
case "隔页图":
{
errLogs = CatalogByImg(pathes, bWork);
break;
}
case "文件夹":
{
errLogs = CatalogByFolder(pathes, bWork);
break;
}
}

#region 完成
return errLogs;
#endregion
}

private static List<REP.ParamInfo> CatalogByImg(string[] pathes, BackgroundWorker bWork)
{
List<REP.ParamInfo> errLogs = new List<REP.ParamInfo>();
int iCurProc = 10;

#region 解析XML
bWork.ReportProgress(iCurProc, "读取配置");
List<REP.Action> acRecs = XMLModual.ReadActionConfig(pathes[1]);
REP.GeneralSetting generalRec = XMLModual.ReadGeneralConfig(pathes[1]);
REP.AdvanceSetting advRec = XMLModual.ReadAdvanceConfig(pathes[1]);
//动作排个序
acRecs.Sort(new REP.ActionComparer());
#endregion

#region 读取数据
bWork.ReportProgress(iCurProc, "解析对照表");
List<REP.RowRecord> rowRecs = null;
switch (generalRec.MappingTableType)
{
case "MDB":
{
REP.DBRep dbModual = new REP.DBRep(pathes[2]);
rowRecs = dbModual.GetFullRecords(generalRec);
break;
}
case "EXCEL":
{
rowRecs = REP.NPOIRep.GetFullRecs(pathes[2], generalRec);
break;
}
default:
rowRecs = new List<REP.RowRecord>();
break;
}
#endregion

#region 图片准备
bWork.ReportProgress(iCurProc, "读取图片");
REP.NPOIRep.GetImgListByImg(ref rowRecs, pathes[0], advRec, bWork);//解析图片
bWork.ReportProgress(iCurProc, "保存图片列表缓存");
Common.ExportLog(rowRecs, advRec);
bWork.ReportProgress(iCurProc, "检查图片");
errLogs = ActionModual.CheckFileExist(rowRecs, acRecs, advRec);
if (errLogs.Count != 0)
{
return errLogs;
}
#endregion

#region 执行操作
foreach (var rowRec in rowRecs)
{
bWork.ReportProgress(iCurProc, "处理:" + rowRec.value[advRec.oid]);
if (rowRec.imgFiles.Count == 0)
{
errLogs.Add(new REP.ParamInfo("没有图片", rowRec.value[advRec.oid]));
}
try
{
ActionModual.ExcuteAction(rowRec, acRecs, generalRec, advRec, pathes[3]);
}
catch (Exception ex)
{
errLogs.Add(new REP.ParamInfo(ex.Message, rowRec.value[advRec.oid]));
}

}
#endregion

#region 完成
bWork.ReportProgress(iCurProc, "完成");
return errLogs;
#endregion
}

private static List<REP.ParamInfo> CatalogByFolder(string[] pathes, BackgroundWorker bWork)
{
List<REP.ParamInfo> errLogs = new List<REP.ParamInfo>();
int iCurProc = 10;
#region 解析XML
bWork.ReportProgress(iCurProc, "读取配置");
List<REP.Action> acRecs = XMLModual.ReadActionConfig(pathes[1]);
REP.GeneralSetting generalRec = XMLModual.ReadGeneralConfig(pathes[1]);
REP.AdvanceSetting advRec = XMLModual.ReadAdvanceConfig(pathes[1]);
//动作排个序
acRecs.Sort(new REP.ActionComparer());
#endregion

#region 读取数据
bWork.ReportProgress(iCurProc, "解析对照表");
List<REP.RowRecord> rowRecs = null;
switch (generalRec.MappingTableType)
{
case "MDB":
{
REP.DBRep dbModual = new REP.DBRep(pathes[2]);
rowRecs = dbModual.GetFullRecords(generalRec);
break;
}
case "EXCEL":
{
rowRecs = REP.NPOIRep.GetFullRecs(pathes[2], generalRec);
break;
}
default:
rowRecs = new List<REP.RowRecord>();
break;
}
#endregion

#region 图片准备
bWork.ReportProgress(iCurProc, "读取图片");
try
{
REP.NPOIRep.GetImgListByFolder(ref rowRecs, pathes[0], advRec, bWork);//解析图片
}
catch (Exception ex)
{
throw ex;
}
bWork.ReportProgress(iCurProc, "保存图片列表缓存");
Common.ExportLog(rowRecs, advRec);
errLogs = ActionModual.CheckFileExist(rowRecs, acRecs, advRec);
if (errLogs.Count != 0)
{
return errLogs;
}
#endregion

#region 执行操作
foreach (var rowRec in rowRecs)
{
bWork.ReportProgress(iCurProc, "处理:" + rowRec.value[advRec.oid]);
if (rowRec.imgFiles.Count == 0)
{
errLogs.Add(new REP.ParamInfo("没有图片", rowRec.value[advRec.oid]));
}
try
{
ActionModual.ExcuteAction(rowRec, acRecs, generalRec, advRec, pathes[3]);
}
catch (Exception ex)
{
errLogs.Add(new REP.ParamInfo(ex.Message, rowRec.value[advRec.oid]));
}

}
#endregion

#region 完成
bWork.ReportProgress(iCurProc, "完成");
return errLogs;
#endregion
}
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: