|
最近在做一個項目,需要利用Word做為打印模板,不過客戶給出的報表樣式中有些數(shù)據(jù)是豎排輸出的,但大部分的文檔示例中,對此均未提及。經過摸索發(fā)現(xiàn)豎排文字,其實與橫排文字的控制輸出是一致的,只需做設置即可。實現(xiàn)步驟如下: 1.創(chuàng)建打印模板文件(*.dot) 此為關鍵步驟,在需要豎排的地方,先文字的字體、樣式設置后,然后設置文字方向,再選擇該段文字,為其插入一個書簽(BookMark),并為該書簽命名。 2.利用C#打開,替換該書簽即可,代碼如下: 注意使用以下代碼時,需要引入Word庫 Word.ApplicationClass App = null; //Word應用程序對象 Word.Document doc = null; //Word文檔對象 object missing = System.Reflection.Missing.Value; object miss=Type.Missing; if (App==null) App = new Word.ApplicationClass();//創(chuàng)建word對象 App.Visible = false; //設置word不可見 //根據(jù)模板創(chuàng)建新文檔,不過這個模板文件的名稱放置在app.config文件中 object oTemplate = ConfigurationSettings.AppSettings["TemplateOfLetter"];//獲取文件名 doc = App.Documents.Add(ref oTemplate, ref missing,ref missing, ref missing);//創(chuàng)建新文檔 doc.Activate();//激活文檔 Object objBookMark = "姓名";//姓 名 創(chuàng)建書簽對象 string name="張三"; doc.Bookmarks.get_Item(ref objBookMark).Range.Text =name;//替換該書簽,可為任意值了 //打印輸出 doc.PrintOut( ref missing,ref missing,ref missing,ref missing,ref missing,ref missing, ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing, ref missing,ref missing,ref missing,ref missing,ref missing); //關閉新創(chuàng)建的文檔 object SaveChanges = Word.WdSaveOptions.wdDoNotSaveChanges;//創(chuàng)建關閉選項 if (doc!=null) doc.Close( ref SaveChanges, ref missing, ref missing); //退出Word if (App!=null) App.Application.Quit(ref miss, ref miss, ref miss); App=null; doc = null; 3.注意事項 a)在控制Word時,應注意釋放已占用的word對象,所以上述代碼最好寫在try/catch/finally中,把資源釋放代碼寫在finally中 b)如果在word中用多個文字需要豎排,最好使用表格或文本框對象,強烈建議使用文本框對象來放置豎排文本,這樣不會影響頁面設置,而單純的豎排文字方向會導致整個頁面全部文字變成豎排,不利用其他文本的放置 c)如果需要一次性生成多個文檔并打印輸出的話,可以考慮使用多線程技術,并利用進度欄進行進度顯示,該部分內容不在本主題的討論范圍。 d)關于效率問題,操作word進行文檔輸出,其效率并不算高,但好在word的使用范圍廣,不需要在客戶的機器上另行安裝其他報表工具,且用戶有能力對報表模板進行樣式及不涉及數(shù)據(jù)輸出等小范圍的頁面調整,并且用戶較為熟悉,打印控制也較為方便,如果不是對效率有太高的要求,使用Word做為打印模板是比較合適,自已的程序的測試數(shù)據(jù),生成3879個文件并打印輸出,用時3223秒,基本上是0.9秒生成并輸出一個,考慮到打印機的速度(目前打印機,能達到30張/s的都算是很快的了),這樣的效率是完全可以接受的。 |
|
|