文字處理控制項TX Text Control的使用

来源:http://www.cnblogs.com/wuhuacong/archive/2016/09/14/5873492.html
-Advertisement-
Play Games

這幾天一直在研究TX Text Control的使用,由於這方面的資料相對比較少,主要靠下載版本的案例代碼進行研究,以及官方的一些博客案例進行學習,使用總結了一些心得,特將其總結出來,供大家分享學習。本篇隨筆主要介紹TX Text Control V20的相關使用心得。 ...


這幾天一直在研究TX Text Control的使用,由於這方面的資料相對比較少,主要靠下載版本的案例代碼進行研究,以及官方的一些博客案例進行學習,使用總結了一些心得,特將其總結出來,供大家分享學習。本篇隨筆主要介紹TX Text Control V20的相關使用心得。

1、TX Text Control控制項介紹

TX Text Control是一款功能類似於 MS Word 的文字處理控制項,包括文檔創建、編輯、列印、郵件合併、格式轉換、拆分合併、導入導出、批量生成等功能。廣泛應用於企業文檔管理,網站內容發佈,電子病歷中病案模板創建、病曆書寫、修改歷史、連續列印、病案歸檔等功能的實現。

這個控制項主要的功能就是可以作為Word以及其他文檔的編輯器使用,雖然展示WORD內容的控制項也有一些,如我們可以利用DevExpress裡面的RTF文檔編輯器來實現,同樣運行的很好,結合Aspose.Word後臺的文檔處理,我們可以做到類似報表的數據生成,而且可以把生成後的文檔進行顯示、編輯等操作處理。

TX Text Control雖然作為文檔編輯各方面都表現不錯,不過其MailMerge郵件合併功能還是經常使用的一個功能,就是把我們的數據和文檔模板來一個合併,然後顯示最終的文檔內容,這種可以用來做一些類似發票、郵件、員工信息等的數據處理和顯示,MailMerge郵件合併可以綁定主從表的數據,能夠符合大多數的要求。

我本來想用它做一個類似電子病歷一樣的功能模塊,不說在文檔裡面,我們很難做到一些下拉列表的處理( 官方博客裡面有一個簡單的案例,不過不好用),一般情況下,如果我們只是做文檔展示、數據合併等常規的操作,還是很不錯的。

這個控制項的功能介紹,可以參考葡萄城裡面的網頁介紹(http://www.gcpowertools.com.cn/products/textcontrol_winform_features.htm),這個控制項的相關開發人員使用然後分享經驗的文章很少,能在網上搜到的大多數是葡萄城人員對這個控制項的Demo代碼進行一個簡單粘貼說明,沒有進一步的深入介紹和應用場景的介紹。雖然葡萄城列舉了幾個電子病歷的公司產品案例,不過這幾家公司的電子病歷產品是很難下載到,也無從知道真假或者使用情況。

這幾天我把這個控制項的各種特性做了一些學習,並重新把官網的文檔編輯例子進行了全新開發,參考著做了一個完全一樣的編輯器版本,也基本上對它的各個屬性、方法處理有了一個更加深入的瞭解。

我們先通過一個軟體界面來瞭解整個軟體的一些功能(這個是我仿照官方案例做的一個程式)。

這個控制項預設安裝後,會帶有很多Demo案例,具體可以參考目錄C:\Users\Administrator\Documents\TX Text Control 20.0.NET for Windows Forms\Samples\ 進行瞭解。

 

2、TX Text Control控制項的漢化

這個控制項界面預設是英文版本的,控制項的相關菜單以及提示都是英文,因此我們需要對資源做一些中文本地化處理才能正確顯示。

官方沒有提供中文漢化包,只提供一個標準的英文資源,如下所示。

我們需要做的就是將它們進行中文翻譯,然後重新編譯(使用buildres.bat腳本編譯)為中文資源dll。

我們先使用VS編輯工具,把這些英文資源記錄轉換為英文(這是一個比較繁瑣的工作,官方網站上有一些舊版本的中文包可供參考,以及最新的V20軟體(編輯器軟體)下載下來運行參考)。

我們逐一進行中文處理,可以使用百度、Google的翻譯,以及軟體界面的參考哦。

以管理員方式運行VS的命令行,然後執行命令進行編譯資源即可。

buildres.bat zh-CN

編譯成功後,在目錄裡面,會增加兩個資源程式集。

txdocumentserver.resources.dll

txtextcontrol.resources.dll

然後我們把它複製到運行目錄下,並放在zh-CN的目錄裡面即可。有了這些中文化的資源程式集,我們就可以利用它進行對控制項的內置菜單提示進行中文化了。

中文化操作和其他常規的做法一樣,我們在Main函數裡面,添加如下代碼即可。

Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-CN");

運行程式,我們使用右鍵菜單,發現裡面的資源都已經正常漢化了,其他相關的內置菜單和界面也都可以看到正常漢化。

 

3、TX Text Control的使用

有了漢化,只是我們正常使用控制項的第一步,我們需要在程式裡面整合控制項,那麼就需要對它進行使用,以及對控制項的屬性、事件進行處理,才能得到最佳的應用效果。

我們在VS工具欄裡面加入對應的控制項,可以看到有以下相關的控制項對象可供使用,一般情況下我們使用TextControl,然後在其基礎上創建其他RulerBar、ButtonBar、StatusBar即可,而如果我們需要合併數據(很常用)就需要加入MailMerge控制項對象。

添加控制項後,我們可以對控制項的相關基礎的複製、粘貼、剪切等操作可以直接利用控制項的API即可實現。

        private void menuEdit_Undo_Click(object sender, EventArgs e)
        {
            _textControl.Undo();
        }

        private void menuEdit_Redo_Click(object sender, EventArgs e)
        {
            _textControl.Redo();
        }

        private void menuEdit_Cut_Click(object sender, EventArgs e)
        {
            _textControl.Cut();
        }

其中查找、替換對話框也是可以通過API進行調出。

        private void menuEdit_Find_Click(object sender, EventArgs e)
        {
            _textControl.Find();
        }

        private void menuEdit_Replace_Click(object sender, EventArgs e)
        {
            _textControl.Replace();
        }

利用這些最基礎的API是常規的操作。

而利用插入相關的對象,如圖片、文本框等,就需要做一些簡單的編碼,方便把對象加入到TextControl對象裡面。

        private void menuInsert_Image_Click(object sender, EventArgs e)
        {
            TXTextControl.Image imageNew = new TXTextControl.Image();
            _textControl.Images.Add(imageNew, TXTextControl.HorizontalAlignment.Left, -1, TXTextControl.ImageInsertionMode.DisplaceText);
        }
        private void menuInsert_TextFrame_Click(object sender, EventArgs e)
        {
            try
            {
                // Force Exception if standard version:
                _textControl.TextFrames.GetItem();
                Size sizeTextFrame = new Size(2268, 2268);   // 4 x 4 cm

                TXTextControl.TextFrame textFrameNew = new TXTextControl.TextFrame(sizeTextFrame);
                _textControl.TextFrames.Add(textFrameNew, TXTextControl.HorizontalAlignment.Left, -1, TXTextControl.TextFrameInsertionMode.DisplaceCompleteLines);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, ProductName);
            }
        }

這個控制項最常見的就是MailMerge進行合併數據的操作了,這個也是我們利用它來處理很多模板化文檔的目的。

MailMerge對象合併數據的操作,主要是接受集合對象或者是DataTable對象,所以我們必須將我們的數據轉換為這種格式,否則合併數據得不到要的結果。

合併數據的處理方式,最開始就是需要設計好模板,這點很重要,模板的設計還是沿用了常規Word文檔域對象的概念,需要添加一些域來做後續數據替換的對象占位符,如下是我測試的一個模板。

這個裡面主要是主從表整合的一個模板,我們需要綁定常規的主表記錄,也需要綁定明細表的集合記錄,不過最後我們都需要把數據對象轉換為集合(如DataSet),然後才能綁定到文檔對象上去。

在上面的文檔裡面,你知識看到了域對象,而沒有看到一個隱藏的一個集合記錄的開始和結束的書簽設置。關於書簽的作用和如何操作,可以瞭解我之前的隨筆文章《利用Aspose.Word控制項實現Word文檔的操作》、《利用Aspose.Word控制項和Aspose.Cell控制項,實現Word文檔和Excel文檔的模板化導出

書簽的作用很重要,否則無法正常解析集合的記錄並綁定在WORD界面上的,我們打開書簽管理對話框,可以看到上述文檔裡面有兩個位置,書簽標記的開始和結束位置。

這樣我們設計好模板後,第二步就是通過代碼生成相關對象,然後和文檔進行合併就可以了。

例如我構建一個主表和一個從表的記錄,統一把它們生成一個DataSet對象供使用。

        public static DataSet CreateDataSet()
        {
            DataSet ds = new DataSet();

            DataTable dtMain = DataTableHelper.CreateTable("Company,HandNo,Creator,CreateTime|DateTime");
            dtMain.TableName = "main";
            DataRow dr = dtMain.NewRow();
            dr["Company"] = "廣州愛奇迪軟體科技有限公司";
            dr["HandNo"] = "123456";
            dr["Creator"] = "伍華聰";
            dr["CreateTime"] = DateTime.Now;
            dtMain.Rows.Add(dr);

            DataTable dt = DataTableHelper.CreateTable("ID,ProductName,Description,Price|decimal,Quantity|int");
            dt.TableName = "ProductInfo";
            dr = dt.NewRow();
            dr["ID"] = "1";
            dr["ProductName"] = "海飛絲洗髮水";
            dr["Description"] = "海飛絲洗髮水, 550ml";
            dr["Price"] = 19.8M;
            dr["Quantity"] = 100;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["ID"] = "2";
            dr["ProductName"] = "聯想品牌電腦";
            dr["Description"] = "聯想Y700-15ISK-ISE 旗艦版";
            dr["Price"] = 6500M;
            dr["Quantity"] = 10;
            dt.Rows.Add(dr);

            dr = dt.NewRow();
            dr["ID"] = "3";
            dr["ProductName"] = "IPhone7 128G";
            dr["Description"] = "蘋果IPhone7, 128G";
            dr["Price"] = 5800M;
            dr["Quantity"] = 10;
            dt.Rows.Add(dr);

            ds.Tables.Add(dtMain);
            ds.Tables.Add(dt);
            return ds;
        }

先載入模板文檔

if (setting == null)
{
    setting = new TXTextControl.LoadSettings();
    setting.ApplicationFieldFormat = TXTextControl.ApplicationFieldFormat.MSWord;
}
_textControl.Load(Application.StartupPath + "\\Template\\template1.docx", TXTextControl.StreamType.WordprocessingML, setting);

整合合併數據

DataSet ds = PurchaseInfoHelper.CreateDataSet();
mailMerge1.MergeBlocks(ds);
mailMerge1.Merge(ds.Tables["main"], true);

最後就可以看到我們所需要的結果了。

當然,如果很熟悉Aspose.Word控制項的使用,我們其實也可以利用Aspose.Word控制項來做後臺的數據整合處理,Aspose.Word控制項支持很多變數定義,以及更加複雜的處理,如我把原來在框架模塊裡面的人員信息導出Word功能抽取出來,這個模塊原先是利用Aspose.Word來處理數據合併的,我不修改其中的邏輯,只是把合併後的數據展示在TX Text Control即可,如下代碼所示。

var saveFile = StaffHelper.GenerateDoc();
//載入文檔
_textControl.Load(saveFile, StreamType.MSWord);

最後就生成了我們開始介紹的軟體界面效果。

這個控制項目前使用起來還算不錯,不過對於一些數據源的處理方面,以後希望繼續增加更多的介面,繼續保持觀察,希望能將研究的成果用在具體的項目上。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本來是開始分析uboot代碼的,但是無論是教材還是網上資料都對於我最新下的 uboot原碼結構不同,對於還是小白的我不容易找到相應的文件,下麵是uboot版本中文件組織結構的改變,,,,, u-boot版本情況 網站:http://ftp.denx.de/pub/u-boot/ 1、版本號變化: 2 ...
  • Linux系統實戰項目——sudo日誌審計 由於企業內部許可權管理啟用了sudo許可權管理,但是還是有一定的風險因素,畢竟運維、開發等各個人員技術水平、操作習慣都不相同,也會因一時失誤造成誤操作,從而影響系統運行 因此,徵對sudo提權的操作,便於管理與後續維護,開啟sudo日誌審計功能對用戶執行 su ...
  • 本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程請看:Linux Shell系列教程 函數可以將一個複雜功能劃分成若幹模塊,從而使程式結構更加清晰,代碼重覆利用率更高。 高級語言都支持函數,Shell也不例外。今天就為大家介紹下Shell中函數相關用法。 一、She ...
  • 本文是Linux Shell系列教程的第(十二)篇,更多Linux Shell教程請看:Linux Shell系列教程 在上兩篇文章Linux Shell系列教程之(十)Shell for迴圈和Linux Shell系列教程之(十一)Shell while迴圈中,我們已經對Shell 迴圈語句的fo ...
  • 1. 查看svn 的用戶名,密碼: 找到用戶名,密碼文件,都是明文的,你可以看到 例:linux hjj@hjj-ubuntu:~/.subversion/auth/svn.simple$ ls 9aad7e9f713353a655cf4365926120c7 hjj@hjj-ubuntu:~/.s ...
  • 先上一張鳥哥LVM的圖.感覺這張最清楚了. 這裡到此就結束的.整合一下相關的一些步驟: ...
  • 前言 公司開發使用docker,每次登陸自己開發機總要輸入 ssh user_name@ip_string,然後再確認輸入password,手快了還經常會輸錯。作為一個懶人,肯定要找一個取巧的方式,查看了下ssh命令,由於它要進行一次跟伺服器的加密交互,所以沒有直接附帶密碼登陸的選項,只好作罷。 前 ...
  • 本文版權歸博客園和作者吳雙共同所有,歡迎轉載,轉載和爬蟲請註明博客園蝸牛原文地址 http://www.cnblogs.com/tdws/p/5874212.html。 最近打算分享一系列.NET Core實用後臺架構,所以首先介紹EF Core。目前國內各大論壇,各位大牛的分享,是按照Micros ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...