亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用PageOffice實現用戶自定義Word模板

發布時間:2021-12-17 17:37:22 來源:億速云 閱讀:376 作者:柒染 欄目:互聯網科技

如何使用PageOffice實現用戶自定義Word模板,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

在實際的開發過程中,針對導出生成word文檔的需求,都是用程序填充數據到word模板中來實現的。所謂模板也就是標記了數據位置和字體段落樣式的Word文件。一般來說,模板中的數據可以分為兩種:一種是一對一的,一個數據在模版中對應一個數據位置,比如一個模板只需要使用“部門、姓名、原因、天數、日期”5個數據,每個數據只需要在文件中使用一次,如下圖模板所示:

如何使用PageOffice實現用戶自定義Word模板

用戶定義模板時可以使用全部數據,也可以使用5個數據中的任意4個、3個甚至1個,但模板中數據標簽的數量總是這個集合的子集。

另一種是一對多,一個數據在同一個模版中可以使用一次,也可以使用多次。每一個數據都需要在文件中出現兩次。

如果一個項目系統中所有的模板都是固定的,那么只需要在系統開發過程中由開發人員和用戶一起把模板做好,之后,開發人員根據業務邏輯編寫程序,給模板中的數據位置填充具體的數據即可實現,但在實際的應用中,很多時候不是這樣的,最終用戶還是希望能自己隨時新建和修改模板,以滿足不斷變化的業務需求,如果每次模板的變化都需要和開發人員一起來完成,那么這個項目就永遠不會完工。
為了滿足用戶的這一需求,在項目中就需要提供一個模板制作和管理的模塊,又為了讓程序可以控制和識別用戶定義模板中的數據位置,那么就需要開發人員來制作一個約定,讓最終用戶在新建或編輯模板時必須按照約定來制作模板。那么應該如何約定呢? PageOffice提供的解決方案就是使用書簽和特殊格式的文本來對文檔中需要插入數據的位置做標記。

第一種方法使用書簽來標記數據位置。Word文檔中插入書簽的方法:把光標定位到需要標記數據位置的地方,點Word菜單中的“插入”-“書簽”,就會彈出一個標題為“書簽”的對話框,輸入新書簽的名稱,書簽名可以包含數字但中間不能有空格,用PageOffice開發的時候不推薦使用中文命名書簽名。注意:如果新插入位置或新對象采用的是已有的書簽名,原有的書簽將自動取消,所以使用書簽來標記數據位置的話,肯定是一個數據對應模板中一個位置的一對一模式。
在使用PageOffice開發的過程中,為了避免出現與用戶自己定義的書簽出現沖突,要求插入的書簽名稱必須以“PO_”開頭。注意是字母o,不是數字0。書簽名是不區分大小寫的也可以寫成“po_”。在PageOffice的概念里提到的數據區域,本質上就是書簽,但是只有“po_”開頭的書簽才叫數據區域(DataRegion),請大家注意這點。

第二種方法就是使用特殊格式的文本來標記數據位置,比如說:【合同日期】、【##合同日期##】、[合同日期]……等等。使用書簽標記數據位置有一個明顯的缺點,同一個書簽名稱在一個word文檔中只能出現一次,也就是說一個數據區域在文檔中肯定是唯一的,但是很多時候模版中需要多處位置使用同樣的數據變量,例如上面舉例使用的“合同日期”可能就需要在一個合同中多個位置出現,使用數據區域肯定是無法滿足需求的,但是使用特殊格式的文本來標記就沒有這種限制了。

在PageOffice的概念里,這種【合同日期】、【##合同日期##】、[合同日期]……等等特殊格式的文本都可以被認為是數據標簽(DataTag),同一個數據標簽可以在一份文件中多個位置出現多次,動態填充數據標簽生成文件的時候,同一個數據標簽都會被同樣的數據替換。

注意:【合同日期】和【##合同日期##】是兩個不同的數據標簽,同一個數據標簽一定要是文本格式完全一致,比如:【##合同日期##】和【##合同日期##】雖然字體顏色和大小都不一樣,但是文本內容是完全一樣的,就被認為是同一個數據標簽,所以在模版制作的時候定義數據標簽是很簡單的,只需要插入同樣格式的文本就可以了。

雖然以上的兩點約定已經定好了,但是讓用戶在編輯模版的時候使用office自身的功能來制作和編輯模版,還是步驟繁瑣、困難重重,制作的模板也容易出現一些問題,為此,PageOffice提供了定義模板的接口,由開發人員使用程序預先定義好用戶可以使用的數據區域和數據標簽,當用戶編輯模版的時候,給用戶彈出一個數據區域和數據標簽的選擇窗口,用戶只需要選擇使用這些數據區域和數據標簽插入到word模版中,設置好數據的段落格式、字體、樣式、顏色等等。這樣以來,不但處理好了約定的問題,而且使得用戶自定義模板的操作更加簡單快捷。

一、 使用PageOffice提供的編輯模版功能:

PageOffice給開發人員提供了定義模版的接口DefineDataRegion和DefineDataTag方法,

  • PageOffice.WordWriter.WordDocument.Template.DefineDataRegion

  • PageOffice.WordWriter.WordDocument.Template.DefineDataTag

  1. 使用DefineDataRegion定義數據區域,例如Java代碼如下:

        WordDocument doc = new WordDocument();
        doc.getTemplate().defineDataRegion("Name", "[ 姓名 ]");
        doc.getTemplate().defineDataRegion("Address", "[ 地址 ]");
        doc.getTemplate().defineDataRegion("Tel", "[ 電話 ]");
        doc.getTemplate().defineDataRegion("Phone", "[ 手機 ]");
        doc.getTemplate().defineDataRegion("Sex", "[ 性別 ]");
        doc.getTemplate().defineDataRegion("Age", "[ 年齡 ]");
        doc.getTemplate().defineDataRegion("Email", "[ 郵箱 ]");
        doc.getTemplate().defineDataRegion("QQNo", "[ QQ號 ]");
        doc.getTemplate().defineDataRegion("MSNNo", "[ MSN號 ]");

或者用ASP.NET開發的話,代碼如下:

PageOffice.WordWriter.WordDocument doc = new PageOffice.WordWriter.WordDocument();
        doc.Template.DefineDataRegion("Name", "[ 姓名 ]");
        doc.Template.DefineDataRegion("Address", "[ 地址 ]");
        doc.Template.DefineDataRegion("Tel", "[ 電話 ]");
        doc.Template.DefineDataRegion("Phone", "[ 手機 ]");
        doc.Template.DefineDataRegion("Sex", "[ 性別 ]");
        doc.Template.DefineDataRegion("Age", "[ 年齡 ]");
        doc.Template.DefineDataRegion("Email", "[ 郵箱 ]");
        doc.Template.DefineDataRegion("QQNo", "[ QQ號 ]");
        doc.Template.DefineDataRegion("MSNNo", "[ MSN號 ]");

開發人員用服務器端程序定義好用戶可使用的數據區域,用戶在客戶端編輯模版的時候就可以使用這些數據區域。注意,這里的代碼中不需要寫PO_ 開頭,PageOffice會自動添加這個前綴。用戶編輯模版時看到的數據區域管理窗口,如下圖所示:

如何使用PageOffice實現用戶自定義Word模板

左側“待添加數據區域”列表是可以用戶目前可以使用的數據區域,右側“已添加數據區域”列表是文檔中已經添加的數據區域。此窗口的實現代碼已經由PageOffice封裝完畢,無需開發人員自己寫復雜的js+html代碼去實現,并且此窗口中內容的樣式是可以修改的,如果對那些樣式不太滿意,只需要對此窗口html代碼的樣式做簡單的調整即可。用戶編輯數據區域時的效果,

  1. 使用DefineDataTag定義數據標簽,例如Java的代碼如下:

		WordDocument doc = new WordDocument();
        doc.getTemplate().defineDataTag("{ 甲方 }");
		doc.getTemplate().defineDataTag("{ 乙方 }");
		doc.getTemplate().defineDataTag("{ 擔保人 }");
		doc.getTemplate().defineDataTag("【 合同日期 】");
		doc.getTemplate().defineDataTag("【 合同編號 】");

或者用ASP.NET開發的代碼如下:

        PageOffice.WordWriter.WordDocument doc = new PageOffice.WordWriter.WordDocument();
        doc.Template.DefineDataTag("{ 甲方 }");
        doc.Template.DefineDataTag("{ 乙方 }");
        doc.Template.DefineDataTag("{ 擔保人 }");
        doc.Template.DefineDataTag("【 合同日期 】");
        doc.Template.DefineDataTag("【 合同編號 】");

開發人員用服務器端程序定義好用戶可使用的數據標簽,用戶在客戶端編輯模版的時候就可以使用這些數據標簽。用戶編輯模版時看到的數據標簽管理窗口,如下圖所示:

如何使用PageOffice實現用戶自定義Word模板

同數據區域一樣,對此窗口的實現代碼,PageOffice也已經封裝完畢,無需開發人員自己寫復雜的js+html代碼去實現,并且此窗口中內容的樣式是可以修改的,如果對那些樣式不太滿意,只需要簡單的調整一下此窗口html代碼中的樣式即可。開發人員只管編寫程序給數據標簽賦值對應的數據,用戶自己定義模版的樣式、數據位置和數據的多少,用戶可以使用全部的數據區域,也可以只使用部分, PageOffice在生成文件的時候,會自動忽略沒有使用的數據標簽,而不需要開發人員做任何代碼的調整。

與數據區域的管理不同的是,由于數據標簽在文件中不是唯一的,所以不管在文件中添加了多少個數據標簽,在數據標簽管理窗口中的數據標簽都是不會減少的。

二. 使用PageOffice.WordWriter 命名空間中的對象填充數據到Word模版,動態生成文檔:

  • PageOffice.WordWriter.WordDocument.OpenDataRegion 方法

  • PageOffice.WordWriter.WordDocument.OpenDataTag 方法

開發人員只需要使用上面的兩個方法,針對word模版編寫程序,給所有的數據區域和數據標簽賦值相應的數據即可,無需關心模版中到底使用了多少個數據區域和數據標簽,那些Word模版中從來沒有使用過的數據區域和數據標簽,PageOffice會自動忽略,而無需開發人員做任何代碼的修改,從而完美實現用戶自定義模板的需求。

Java開發的賦值代碼如下:

WordDocument doc = new WordDocument();
        doc.openDataRegion("Name").setValue("張三");        
        doc.openDataRegion("Age").setValue("21");  
		……
        doc.openDataTag("{ 甲方公司名稱 }").setValue("微軟中國總部"); 
        doc.openDataTag("{ 乙方公司名稱 }").setValue( "北京幻想科技公司"); 
		……
        poCtrl.setWriter(doc);

ASP.NET開發的賦值代碼如下,

        PageOffice.WordWriter.WordDocument doc = new PageOffice.WordWriter.WordDocument();
        doc.OpenDataRegion("Name").Value = "張三";        
        doc.OpenDataRegion("Age").Value = "21";
		……
        doc.OpenDataTag("{ 甲方公司名稱 }").Value = "微軟中國總部";
        doc.OpenDataTag("{ 乙方公司名稱 }").Value = "北京幻想科技公司";
		……
        PageOfficeCtrl1.SetWriter(doc);

關于如何使用PageOffice實現用戶自定義Word模板問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

闵行区| 开原市| 卢氏县| 晋江市| 崇义县| 丰镇市| 互助| 措美县| 开远市| 普宁市| 广灵县| 新疆| 崇州市| 章丘市| 喀喇沁旗| 海门市| 苍溪县| 九寨沟县| 鹤峰县| 图片| 太谷县| 文化| 耿马| 仁寿县| 仪陇县| 浦县| 台前县| 临安市| 清苑县| 太白县| 双桥区| 大冶市| 台南市| 年辖:市辖区| 邵东县| 巩义市| 黑水县| 邵武市| 梁河县| 凌海市| 宁国市|