




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6/6知识管理系统DataSolution研发日记之三文档解决方案知识管理系统DataSolution研发日记之三文档解决方案
前面两篇文章已经展示了DataSolution的设计目标和为达到此目标而设计的应用程序,这一篇继续细化对它的介绍,讲解DataSolution如何对文件进行扫描,转换,存储,检索。本机磁盘的文件格式通常是doc/docx,pdf,pst/ost/eml,htm/mht,txt/rtf,这几种格式是电脑中常用的格式。要达到在同一个编辑器Editor中可以对它们进行编辑,再整理,需要选择一种通用的格式,把其它的格式转化为这种通用格式,对这种格式进行编辑。DOC/DOCX格式功能强大,有很多开源类型库对它进行读写,RTF格式也包含了丰富数据资料,重要的一点是RTF格式,是一种开放的格式。可以到微软的网站上下载《MicrosoftOfficeWord2021RichTextFormat(RTF)Specification》,以熟悉这种文件格式。开放格式的好处之一是,在后续的进一步开发中,可以找到很多现有的功能和代码,包括开放的源码。所以,DataSolution选择RTF格式作为文件存储的标准格式。
下一个目标就是要找到RTF格式的编辑工具,通过Google可以找到很多RTF格式的编辑器,对RTF格式进行直接编辑,存储和转换。因为是开放格式,微软的.NETFramework自带了RichTextBox,可用于RTF格式的编辑。不过,这个控件还需要强化,可以到CodeP上找到一些工具和文章。
这两个关键的步骤解决了,下面就是设计数据库和设计数据读写代码。创建Document数据库,文档表的脚本如下CREATETABLE[dbo].[DOCUMENT]([RECNUM][int]IDENTITY(1,1)NOTNULL,[SUBJECT][nvarchar](2000)NULL,[BODY_TYPE][nvarchar](50)NULL,[BODY][nvarchar](max)NULL,[CREATE_DATE][datetime]NULL,[CREATE_BY][nvarchar](50)NULL,[REVISED_Date][datetime]NULL,[REVISED_BY][nvarchar](50)NULL,[CATEGORY][int]NULL,[COMPUTER][nvarchar](200)NULL,[PATH][nvarchar](2000)NULL,CONSTRAINT[PK_DOCUMENT]PRIMARYKEYCLUSTERED([RECNUM]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]
Body就是存储文档的表字段,设计它为NVARCHAR(MAX)类型,CATEGORY用于文档的分类查找,SUBJECT可存放关键字或是标题,BODY_TYPE用于全文搜索,存储文档类型扩展名。COMPUTER和PATH用于在本机扫描中,指定原始文档的路径,可用于追踪。
DataSolution系统选择LLBLGenFramework作为数据库访问层的代码生成器,生成解决(方案)的代码如下图
来看一下,对文档进行保存的一段代码,它是标准的LLBLGenFramework的routine代码publicDocumentEntitySaveDocument(DocumentEntitydoc){using(DataAccessAdapteradapter=GetDataAccessAdapter()){try{adapter.StartTransaction(IsolationLevel.ReadCommitted,"SaveDocument");adapter.SaveEntity(doc,true,false);adapter.Commit();}catch{adapter.Rollback();throw;}}returndoc;}
所谓routine代码,就是代码可以由模板生成的,就好比上下班打卡一样,是很平常的简单的行为。
注意这里的throw代码,它没有写成这样catch(Exceptionex){adapter.Rollback();throwex;}
在《.NET框架程序设计》一书中,解释了这两个throw的区别,它们会产生不同的stacktrace,异常的起始点不同。
基础层面的问题解决了,下面的应用程序就水到渠成,以不同的方式导入文档到数据库中。
BatchImport批次导入指定目录的文件到数据库中
DocScanner批次导入指定格式的文件到数据库中
PDFWatcher专用于PDF文件格式的转换,导入,因为是Watcher,所以你肯定会想到是个FileSystemWatcher
DocLoader适用于单个文档的转换,导入,一次只处理一个文档
再来看数据库中的文档的展示,DocumentExplorer会展现导入进数据库的原始文件,在这里可以进行预览,删除,分类。分类之后,这个文档就好比打上了合格的标签一样,可以在以后的程序中进一步使用。否则,不分类的文件都会只停留在这里,后继的步骤无法处理。这是个文档流程上的的.Policy,如果不喜欢这个步骤,可以去掉。
DocumentBrowser分类查看文档
左边是树型结构,右边是从属于这个分类的文档。如果要对扫描进数据库中的文件进行分类,可以这样操作
在DocumentExplorer中选中一个或多个文件,点击右键CategoryDocument
在DocumentBrowser的左边的树中,右键PasteDocument
之后就看到了效果,在.NET结点下面,展示了所Paste的文档及其属性
DocumentBrowser左边的树是文档的分类,可对它对进新增子节点,新增加一个分类的效果如下图
Category是取自数据库中的类别表,它的脚本定义如下CREATETABLE[dbo].[CATEGORY]([RECNUM][int]IDENTITY(1,1)NOTNULL,[NAME][nvarchar](200)NULL,CONSTRAINT[PK_CATEGORY]PRIMARYKEYCLUSTERED([RECNUM]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]
这颗文档分类树,它的结构定义是放到本地的XML文件中,上图中所看到的树的格式定义如下
如上图所示,tag就是从数据库中获取的分类定义,依据这个标识,以检索分类的文档。在DocumentBrowser窗体的打开与关闭时,它会持久化树的结构定义,代码如下protectedoverridevoidOnClosed(EventArgse){base.OnClosed(e);TreeViewSerializerserializer=newTreeViewSerializer();serializer.SerializeTreeView(this.treeView,treeFile);}protectedoverridevoidOnLoad(EventArgse){treeView.ImageList=this.imageList;TreeNoderoot=treeView.Nodes[0];if(File.Exists(treeFile)){treeView.Nodes.Clear();TreeViewSerializerserializer=newTreeViewSerializer();serializer.DeserializeTreeView(this.treeView,treeFile);treeView.ExpandAll();}}
如果你对如何把树节点定义保存到文件系统中感兴趣,可以用关键字TreeViewSerializer在CodeProject中查找,这里的代码就是取自其中一篇文章的代码。
还有另一个地方,会用到树型结构分类,在Editor编辑器的打开文件对话框中,如下图所示
这里的效果,与DocumentBrowser的效果是完全一样的。原来以为是可以用CustomOpenFileDialog来解决OpenFile对话框的PlaceBar的问题,也就是上图中看到的左边的树的分类,也是如下图中红色边框包围的地方
要达到重写红色区域,Windows有规定的路径,并且会验证这个路径,这个办法没有通过,无奈之下才用的自定义对话框。之前见到过的软件,SharePointDesigner重写过这个PlaceBar区域,可惜没有领悟它的实现原理。
写到这里,还没有完成,这里还需要一点OFFICE二次开发的知识,在OFFICE软件中,写入一个插件,可以把正在浏览的文档,直接导入到我的文档数据库中,如下图所示
这里已经安装了两个插件,NitroPDFProfessional和Acrobat,用于把当前DOC/DOCX文档转换为PDF文件。所以,还需要写一个把当前的DOC/DOCX文档转存到文档数据库中的插件。
在把PDF转化为可以编辑的RTF格式过程中,遇到了不少的麻烦。把DOC/DOCX转换成PDF,这个行为,有很多开源代码可以借用,但是,倒过来,把PDF转换成DOC/DOCX,这个组件却不好找。有一种方案是把PDF转化为TIFF,然后再用OCR软件系统(ABBYYFineReader9)来转成DOC/DOCX文件。我们做程序员的穷,没有那么多银子买昂贵的SDKLicense,转向寻找Crack或是Patch之类的,也没有结果。这些业界领先的技术,连Trial版本都不会出现在网上,根本没有机会Trial一把,或是把它放到虚拟机里面,永远以Trial的方式来使用。有的组件,比如PDFFocus.NET,可以试用一把,可是转换出来的文件,要么加上了Trial的水印,要么只能转换前三页,后面的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 酒店人事经理的年终总结
- 酒店消防安全培训资料
- 殡葬行业5G智慧园区建设-深度研究
- 语义网络分析-深度研究
- 2025-2030中国健康观察行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国保险广告行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国供料系统行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国交互式患者护理系统(IPC)软件行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国互联网数据中心(IDC)IT行业研发创新与应用深化发展分析研究报告
- 2025-2030中国乳品添加剂行业调研分析及发展趋势预测研究报告
- 中医养生技术ppt
- 煤矿电气设备防爆检查细则
- 国家电网有限公司十八项电网重大反事故措施
- 凝结水泵调试报告
- 美国分散式污水处理的历史、现状与未来
- 空中乘务职业教育专业教学资源库申报书
- 中国联通光传送网 WDM OTN 安全白皮书
- ISO27001信息安全管理体系整套资料汇编
- 高速公路交安工程监理实施细则
- 2023学年完整公开课版魔鬼状物法
- 本特利3300 XL 8mm 电涡流传感器选型手册
评论
0/150
提交评论