知識管理系統Data Solution研發日記之三 文檔解決方案

時間:2023-04-28 07:06:44 規劃方案 我要投稿
  • 相關推薦

知識管理系統Data Solution研發日記之三 文檔解決方案

前面兩篇文章已經展示了Data Solution的設計目標和為達到此目標而設計的應用程序,這一篇繼續細化對它的介紹,講解Data Solution如何對文件進行掃描,轉換,存儲,檢索。

  本機磁盤的文件格式通常是doc/docx,pdf,pst/ost/eml,htm/mht,txt/rtf,這幾種格式是電腦中常用的格式。要達到在同一個編輯器Editor中可以對它們進行編輯,再整理,需要選擇一種通用的格式,把其它的格式轉化為這種通用格式,對這種格式進行編輯。DOC/DOCX格式功能強大,有很多開源類型庫對它進行讀寫,RTF格式也包含了豐富數據資料,重要的一點是RTF格式,是一種開放的格式?梢缘轿④浀木W站上下載《Microsoft Office Word 2003 Rich Text Format (RTF) Specification》,以熟悉這種文件格式。開放格式的好處之一是,在后續的進一步開發中,可以找到很多現有的功能和代碼,包括開放的源碼。所以,Data Solution選擇RTF格式作為文件存儲的標準格式。

知識管理系統Data Solution研發日記之三 文檔解決方案

  下一個目標就是要找到RTF格式的編輯工具,通過Google可以找到很多RTF格式的編輯器,對RTF格式進行直接編輯,存儲和轉換。因為是開放格式,微軟的.NET Framework自帶了RichTextBox,可用于RTF格式的編輯。不過,這個控件還需要強化,可以到CodeProject.com上找到一些工具和文章。

  

  這兩個關鍵的步驟解決了,下面就是設計數據庫和設計數據讀寫代碼。創建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用于在本機掃描中,指定原始文檔的路徑,可用于追蹤。

  Data Solution系統選擇LLBL Gen Framework作為數據庫訪問層的代碼生成器,生成解決方案的代碼如下圖

  

  來看一下,對文檔進行保存的一段代碼,它是標準的LLBL Gen Framework的routine代碼 public DocumentEntity SaveDocument(DocumentEntity doc) { using (DataAccessAdapter adapter = GetDataAccessAdapter()) { try { adapter.StartTransaction(IsolationLevel.ReadCommit ted, "SaveDocument"); adapter.SaveEntity(doc, true, false); adapter.Commit(); } catch { adapter.Rollback(); throw; } } return doc; }

  所謂routine代碼,就是代碼可以由模板生成的,就好比上下班打卡一樣,是很平常的簡單的行為。

  注意這里的throw代碼,它沒有寫成這樣 catch(Exception ex) { adapter.Rollback(); throw ex; }

  在《.NET框架程序設計》一書中,解釋了這兩個throw的區別,它們會產生不同的stack trace,異常的起始點不同。

  基礎層面的問題解決了,下面的應用程序就水到渠成,以不同的方式導入文檔到數據庫中。

  Batch Import 批次導入指定目錄的文件到數據庫中

  

  Doc Scanner 批次導入指定格式的文件到數據庫中

  

  PDF Watcher 專用于PDF文件格式的轉換,導入,因為是Watcher,所以你肯定會想到是個FileSystemWatcher

  

  Doc Loader 適用于單個文檔的轉換,導入,一次只處理一個文檔

  

  再來看數據庫中的文檔的展示,Document Explorer會展現導入進數據庫的原始文件,在這里可以進行預覽,刪除,分類。分類之后,這個文檔就好比打上了合格的標簽一樣,可以在以后的程序中進一步使用。否則,不分類的文件都會只停留在這里,后繼的步驟無法處理。這是個文檔流程上的的Policy,如果不喜歡這個步驟,可以去掉。

  

  Document Browser 分類查看文檔

  

  左邊是樹型結構,右邊是從屬于這個分類的文檔。如果要對掃描進數據庫中的文件進行分類,可以這樣操作

  在Document Explorer中選中一個或多個文件,點擊右鍵Category Document

  

  在Document Browser的左邊的樹中,右鍵Paste Document

  

  之后就看到了效果,在.NET結點下面,展示了所Paste的文檔及其屬性

  

  Document Browser左邊的樹是文檔的分類,可對它對進新增子節點,新增加一個分類的效果如下圖

  

  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就是從數據庫中獲取的分類定義,依據這個標識,以檢索分類的文檔。在Document Browser窗體的打開與關閉時,它會持久化樹的結構定義,代碼如下 protectedoverridevoid OnClosed(EventArgs e) { base.OnClosed(e); TreeViewSerializer serializer = new TreeViewSerializer(); serializer.SerializeTreeView(this.treeView, treeFile); } protectedoverridevoid OnLoad(EventArgs e) { treeView.ImageList = this.imageList; TreeNode root=treeView.Nodes[0]; if (File.Exists(treeFile)) { treeView.Nodes.Clear(); TreeViewSerializer serializer = new TreeViewSerializer(); serializer.DeserializeTreeView(this.treeView, treeFile); treeView.ExpandAll(); } }

  如果你對如何把樹節點定義保存到文件系統中感興趣,可以用關鍵字TreeViewSerializer在CodeProject中查找,這里的代碼就是取自其中一篇文章的代碼。

  還有另一個地方,會用到樹型結構分類,在Editor編輯器的打開文件對話框中,如下圖所示

  

  這里的效果,與Document Browser的效果是完全一樣的。原來以為是可以用Custom Open File Dialog來解決Open File對話框的Place Bar的問題,也就是上圖中看到的左邊的樹的分類,也是如下圖中紅色邊框包圍的地方

  

  要達到重寫紅色區域,Windows有規定的路徑,并且會驗證這個路徑,這個辦法沒有通過,無奈之下才用的自定義對話框。之前見到過的軟件,SharePoint Designer重寫過這個Place Bar區域,可惜沒有領悟它的實現原理。

  寫到這里,還沒有完成,這里還需要一點OFFICE 二次開發的知識,在OFFICE軟件中,寫入一個插件,可以把正在瀏覽的文檔,直接導入到我的文檔數據庫中,如下圖所示

  

  這里已經安裝了兩個插件,Nitro PDF Professional和Acrobat,用于把當前DOC/DOCX文檔轉換為PDF文件。所以,還需要寫一個把當前的DOC/DOCX文檔轉存到文檔數據庫中的插件。

  在把PDF轉化為可以編輯的RTF格式過程中,遇到了不少的麻煩。把DOC/DOCX轉換成PDF,這個行為,有很多開源代碼可以借用,但是,倒過來,把PDF轉換成DOC/DOCX,這個組件卻不好找。有一種方案是把PDF轉化為TIFF,然后再用OCR軟件系統(ABBYY FineReader 9)來轉成DOC/DOCX文件。我們做程序員的窮,沒有那么多銀子買昂貴的SDK License,轉向尋找Crack或是Patch之類的,也沒有結果。這些業界領先的技術,連Trial版本都不會出現在網上,根本沒有機會Trial一把,或是把它放到虛擬機里面,永遠以Trial的方式來使用。有的組件,比如PDF Focus.NET,可以試用一把,可是轉換出來的文件,要么加上了Trial的水印,要么只能轉換前三頁,后面的都不能轉換;蛘哂械氖茿ctiveX版本的控件,OCX方式注冊到系統中,總有這樣那樣的問題。杯具,想想以后要離開對Microsoft .NET Framework的依賴,離開對SQL Server的依賴,以這次的經驗來看,這日子是沒法過了。盡管我已經解決了這里的所有問題,仍然不愿意面對,在非數據庫開發的領域,技術和知識是很值錢的。因為我們已經習慣了在數據庫領域的開發,技術和知識是一文不值的,只有做出的產品才值錢,悲劇。

【知識管理系統Data Solution研發日記之三 文檔解決方案】相關文章:

備件管理系統的解決方案范文(精選5篇)12-29

備品備件管理系統解決方案(通用11篇)12-30

Jordan offers new hosting solution05-04

異地財務管理系統解決方案08-20

文檔管理實訓報告07-06

項目文檔管理辦法06-08

文檔管理制度03-23

電信機房環境視頻監控系統解決方案03-15

網吧管理系統03-12

研發管理制度04-25

国产v亚洲v天堂无码网站,综合亚洲欧美日韩一区二区,精品一级毛片A久久久久,欧美一级待黄大片视频
午夜AV手机在线免费观看 | 亚洲中文欧美日韩 | 亚洲开心五月在线 | 日本不卡在线一区二区三 | 日本特级婬片免费 | 真实国产乱子伦激情对白视频 |