篇一:WPF常用知識以及本項目設計總結:http://www.cnblogs.com/baiboy/p/wpf.html
篇二:基於OneNote難點突破和批量識別:http://www.cnblogs.com/baiboy/p/wpf1.html
篇三:批量處理后的txt文件入庫處理:http://www.cnblogs.com/baiboy/p/wpf2.html
篇四:關於OneNote入庫處理以及審核:http://www.cnblogs.com/baiboy/p/wpf3.html
【小記】:大膽嘗試才能突破,某個中醫葯大學有一批圖片需要處理(OCR),然后進行數據挖掘。之前沒有接觸過OCR這個東西,但是還是應允了。在網上搜索一番,關於中文圖片識別,最終敲定為基於微軟的OneNote,其識別率相對較高。網上這個技術點的資料真心不多,后來於博客園找到一篇博文,但是那個程序還是bug百出,而且只是單處理。后來經過一番摸索逐個突破,批處理完成。然后進行界面設計,這些零碎工作完成后,便是入庫處理。由於OneNote生成的xml文件封裝好的,即不可視的。便將其代碼處理生成txt文件,再進行Oracle入庫處理。入庫前需要文件內容審核,並且在WPF開發中數據綁定和分頁中做了獨特處理。現在經過半個月的工作,本項目做個階段總結。一則知識總結便於二次開發,盡量保持程序流暢性,核心知識做以梳理;另外,相關WPF和OneNote常用技術共享,便於部分園友所需。本人技術有限,歡迎交流。項目還未結束,暫作階段文章發布,隨后相繼發布。
篇四:關於OneNote入庫處理以及審核
【開篇概述】:文本作為系列文章的最后一篇,主要對頁面進行設計布局和審核頁面的完善,其中主頁面用戶可以查詢審核通過的信息,瀏覽詳細信息。也可以作為導航到orc頁面,對批量圖片進行文字處理,處理后的文件,可以通過入庫頁面對文件信息提取。達到半自動填寫表格的狀態,由於文件信息不一定符合主觀要求或者格式不一致,所以設置了審核頁面,也是信息修改頁面,信息無誤后,選擇下面審核通過復選框即可成功入庫。后面就是交付做數據挖掘處理了。效果如圖所示
主頁面:
完整代碼:

namespace OnenoteOCRDemo { /// <summary> /// Index.xaml 的交互邏輯 /// </summary> public partial class Index : Window { public Index() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainWindow_Loaded); } page page1 = new page(); void MainWindow_Loaded(object sender, RoutedEventArgs e) { this.c1.Children.Add(page1); this.Loaded += delegate { InitData(); }; dataGrid1.LoadingRow += new EventHandler<DataGridRowEventArgs>(dataGrid1_LoadingRow); } void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e) { e.Row.Header = e.Row.GetIndex() + 1; //設置行表頭的內容值 } //查詢 private void InitData() { string sql = "select * from T_TCM_THESIS where auditflag=1 order by ID desc"; DataSet ds = MYHelper.SQLHelper.GetOrlData(sql); if (ds.Tables[0].Rows.Count > 0) { page1.ShowPages(this.dataGrid1, ds, 10); } else { System.Windows.Forms.MessageBox.Show("Erroy"); } } private void Window_Loaded(object sender, RoutedEventArgs e) { InitData(); } private void hlorc_Click(object sender, RoutedEventArgs e) { Main m = new Main(); m.Show(); } private void hltext_Click(object sender, RoutedEventArgs e) { TextData td = new TextData(); td.Show(); } //刷新 private void hlnew_Click(object sender, RoutedEventArgs e) { InitData(); } private void hyper2_Click(object sender, RoutedEventArgs e) { this.Hide(); DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; int ID = Convert.ToInt32((mySelectedElement.Row[0])); //獲取該行的FID falg f = new falg(ID,0); f.Show(); } } }
審核頁面:
完整代碼:

namespace OnenoteOCRDemo { /// <summary> /// falg.xaml 的交互邏輯 /// </summary> public partial class falg : Window { int i; public falg(int id,int n) { InitializeComponent(); txt.Text = id.ToString(); THESIS(id); i = n; if (i == 0) { btnupdate.Visibility = System.Windows.Visibility.Hidden; cbflag.Visibility = System.Windows.Visibility.Hidden; txtflag.Text="審核通過"; } } private void THESIS(int id) { string sql = "select * from T_TCM_THESIS where id="+id; DataTable dt = MYHelper.SQLHelper.GetTabOrlData(sql); if (dt.Rows.Count>0) { txtdocname.Text = dt.Rows[0]["docname"].ToString(); txtauthor.Text = dt.Rows[0]["author"].ToString(); txtcompany.Text = dt.Rows[0]["authorcompany"].ToString(); txtcontent.Text = dt.Rows[0]["content"].ToString(); txtdigest.Text = dt.Rows[0]["digest"].ToString(); txtdisease.Text = dt.Rows[0]["disease"].ToString(); txtdoctype.Text = dt.Rows[0]["doctype"].ToString(); txtenglishtitle.Text = dt.Rows[0]["englishtitle"].ToString(); txtkeyword.Text = dt.Rows[0]["keyword"].ToString(); txtmemo.Text = dt.Rows[0]["memo"].ToString(); txtpath.Text = dt.Rows[0]["path"].ToString(); txtsource.Text = dt.Rows[0]["source"].ToString(); txtsourcetype.Text = dt.Rows[0]["sourcetype"].ToString(); txtsummary.Text = dt.Rows[0]["summary"].ToString(); txttitle.Text = dt.Rows[0]["title"].ToString(); txtyears.Text = dt.Rows[0]["years"].ToString(); int flag =Convert.ToInt32(dt.Rows[0]["auditflag"].ToString()); if (flag == 1) { cbflag.IsChecked = true; } else { cbflag.IsChecked = false; } } } public void TextIsNull() { txtdocname.Text = ""; txtyears.Text = ""; txtdoctype.Text = ""; txtsummary.Text = ""; txtauthor.Text = ""; txtsource.Text = ""; txtsourcetype.Text = ""; txtmemo.Text = ""; txttitle.Text = ""; txtenglishtitle.Text = ""; txtcompany.Text = ""; txtkeyword.Text = ""; txtcontent.Text = ""; txtdigest.Text = ""; txtpath.Text = ""; txtdisease.Text = ""; cbflag.IsChecked = false; } //審核信息(更新信息) private void btnupdate_Click(object sender, RoutedEventArgs e) { int id=Convert.ToInt32( txt.Text); string docname = txtdocname.Text.ToString(); string years = txtyears.Text.ToString(); string doctype = txtdoctype.Text.ToString(); string summary = txtsummary.Text.ToString(); string author = txtauthor.Text.ToString(); string source = txtsource.Text.ToString(); string sourcetype = txtsourcetype.Text.ToString(); string memo = txtmemo.Text.ToString(); string title = txttitle.Text.ToString(); string englishtitle = txtenglishtitle.Text.ToString(); string authorcompany = txtcompany.Text.ToString(); string keyword = txtkeyword.Text.ToString(); string content = txtcontent.Text.ToString().Trim(); string digest = txtdigest.Text.ToString(); string path = txtpath.Text.ToString(); string disease = txtdisease.Text.ToString(); int auditflag; if (cbflag.IsChecked == true) { auditflag = 1; } else { auditflag =0; } try { string sql = "update T_TCM_THESIS set docname='" + docname + "',years='" + years + "',doctype='" + doctype + "',summary='" + summary + "',"; sql += "author='" + author + "',source='" + source + "',sourcetype='" + sourcetype + "',memo='" + memo + "',title='" + title + "',"; sql += "englishtitle='" + englishtitle + "',authorcompany='" + authorcompany + "',keyword='" + keyword + "',content='" + content + "',digest='" + digest + "',"; sql += "path='" + path + "',disease='" + disease + "',auditflag=" + auditflag + " where ID= "+id; int i = SQLHelper.OrlExecuteQuery(sql); if (i > 0) { System.Windows.Forms.MessageBox.Show("審核通過", "審核信息"); TextIsNull(); this.Close(); TextData td = new TextData(); td.Show(); } else { System.Windows.Forms.MessageBox.Show("審核失敗", "審核信息"); } } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.Message); } } private void btnback_Click(object sender, RoutedEventArgs e) { this.Close(); if (i == 1) { TextData td = new TextData(); td.Show(); } else { Index index = new Index(); index.Show(); } } } }
【功能以及操作描述】
- 打開主頁面可以看到,每條信息前序號的生成,通過后台對事件重寫完成,代碼如下。
void MainWindow_Loaded(object sender, RoutedEventArgs e) { this.c1.Children.Add(page1); this.Loaded += delegate { InitData(); }; dataGrid1.LoadingRow += new EventHandler<DataGridRowEventArgs>(dataGrid1_LoadingRow); } void dataGrid1_LoadingRow(object sender, DataGridRowEventArgs e) { e.Row.Header = e.Row.GetIndex() + 1; //設置行表頭的內容值 }
- 頁面自動顯示為分頁顯示,通過用戶控件進行分頁,然后對數據控件進行綁定,詳細操作見系列二文章。本功能代碼如下:
//查詢 private void InitData() { string sql = "select * from T_TCM_THESIS where auditflag=1 order by ID desc"; DataSet ds = MYHelper.SQLHelper.GetOrlData(sql); if (ds.Tables[0].Rows.Count > 0) { page1.ShowPages(this.dataGrid1, ds, 10); } else { System.Windows.Forms.MessageBox.Show("Erroy"); } }
- 點擊詳細信息按鈕,跳轉的詳細信息頁面。如何獲取DataGrid主鍵是關鍵,具體實現為:
this.Hide(); DataRowView mySelectedElement = (DataRowView)dataGrid1.SelectedItem; int ID = Convert.ToInt32((mySelectedElement.Row[0])); //獲取該行的FID falg f = new falg(ID,0); f.Show();
- 在目標頁面,通過頁面接受頁面傳值,顯示到詳細信息。
private void THESIS(int id) { string sql = "select * from T_TCM_THESIS where id="+id; DataTable dt = MYHelper.SQLHelper.GetTabOrlData(sql); if (dt.Rows.Count>0) { txtdocname.Text = dt.Rows[0]["docname"].ToString(); txtauthor.Text = dt.Rows[0]["author"].ToString(); txtcompany.Text = dt.Rows[0]["authorcompany"].ToString(); txtcontent.Text = dt.Rows[0]["content"].ToString(); txtdigest.Text = dt.Rows[0]["digest"].ToString(); txtdisease.Text = dt.Rows[0]["disease"].ToString(); txtdoctype.Text = dt.Rows[0]["doctype"].ToString(); txtenglishtitle.Text = dt.Rows[0]["englishtitle"].ToString(); txtkeyword.Text = dt.Rows[0]["keyword"].ToString(); txtmemo.Text = dt.Rows[0]["memo"].ToString(); txtpath.Text = dt.Rows[0]["path"].ToString(); txtsource.Text = dt.Rows[0]["source"].ToString(); txtsourcetype.Text = dt.Rows[0]["sourcetype"].ToString(); txtsummary.Text = dt.Rows[0]["summary"].ToString(); txttitle.Text = dt.Rows[0]["title"].ToString(); txtyears.Text = dt.Rows[0]["years"].ToString(); int flag =Convert.ToInt32(dt.Rows[0]["auditflag"].ToString()); if (flag == 1) { cbflag.IsChecked = true; } else { cbflag.IsChecked = false; } } }
- 審核頁面的具體操作也是類似, 不同之處在於對傳值頁面進行邏輯判斷,如果是審核則允許頁面信息的更新,如果查看詳細信息,則更新按鈕隱藏。
【篇末】:截止到此,本程序完全結束,本章涉及頁面傳值和數據綁定等基本信息,這方面大體與winfrom操作一致。本程序采用講涉及的知識點數十個,均一一列出整理。數據庫sql文件在項目的db文件夾中,附上完整源碼如下:
注:源碼地址鏈接總是不正確,后來打開管理--〉文件,查看源碼,找到本文件的鏈接地址粘貼即可。