如何简单扫描整理
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
相关文章推荐
- 数据结构复习3
- Windows 64位下安装Redis详细教程
- VS错误解决集合
- Linux安装软件总结 (二.几种安装命令介绍)
- Android Studio 快捷键
- Android布局详解(一)
- ]SQL语句执行顺序
- Unity3D研究院之两种方式播放游戏视频
- JVM内存管理:深入垃圾收集器与内存分配策略
- devstack 安装openstack,使用xen作虚拟化,local.conf
- Aspose.Words使用教程之如何重命名合并字段
- 贪吃蛇 android版 里面自己实现了简单的事件系统
- Unity NGUI UILabel文字变色 及相关问题
- Web.xml配置详解
- SVN中Revert changes from this revision 跟Revert to this revision
- 关于DevExpress的XtraTreeList使用方法总结
- 移动端或者网页端下拉加载
- Debian安装autoconf
- URI、URL、URN
- Mac 下面,添加android adb命令(一般环境变量的添加方法)