畢業(yè)設(shè)計-基于Java_Web架構(gòu)的打印研究及其應(yīng)用_第1頁
畢業(yè)設(shè)計-基于Java_Web架構(gòu)的打印研究及其應(yīng)用_第2頁
畢業(yè)設(shè)計-基于Java_Web架構(gòu)的打印研究及其應(yīng)用_第3頁
畢業(yè)設(shè)計-基于Java_Web架構(gòu)的打印研究及其應(yīng)用_第4頁
畢業(yè)設(shè)計-基于Java_Web架構(gòu)的打印研究及其應(yīng)用_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、成都航空職業(yè)技術(shù)學(xué)院成都航空職業(yè)技術(shù)學(xué)院 高職高專畢業(yè)論文(設(shè)計) 題 目 基于 B/S 架構(gòu)打印的研究與應(yīng)用 指導(dǎo)教師 職稱 講師 學(xué)生姓名 學(xué)號 專 業(yè) 軟件技術(shù) 班級 院 (系) 計算機(jī)工程系 完成時間 2011 年 5 月 3 日 2 目 錄 摘 要 .I ABSTRACT.II 第一章緒論.1 第一節(jié)基于 B/S 的打印研究的興起 .1 第二節(jié)報表打印的現(xiàn)狀.2 第三節(jié)B/S 報表打印的提出及意義 .2 第二章實現(xiàn) B/S 打印和應(yīng)用的相關(guān)技術(shù) .3 第一節(jié)Applet 技術(shù).3 第二節(jié)XML 技術(shù).4 一、XML 概論 .4 二、XML 解析技術(shù) .5 第三節(jié)Spring 概論 .

2、6 第四節(jié)Struts 概述.7 第三章B/S 打印的解決方案.9 第一節(jié)總體設(shè)計.9 一、總體框架.9 二、設(shè)計需求.10 三、設(shè)計要求.10 第二節(jié)打印機(jī)的控制.11 第三節(jié)數(shù)字簽名.14 第四節(jié)XML 格式文件.16 3 第四章B/S 打印在 Web 系統(tǒng)中的應(yīng)用.18 第一節(jié)開發(fā)環(huán)境和運行環(huán)境.18 一、開發(fā)環(huán)境.18 二、運行環(huán)境.19 第二節(jié)模型的建立.19 一、用例圖.19 二、順序圖.19 三、協(xié)作圖.21 四、系統(tǒng)狀態(tài)圖 4.5.21 五、活動圖.22 六、主要類圖.23 第三節(jié)Web 系統(tǒng)的實現(xiàn).23 第四節(jié)系統(tǒng)的演示界面.25 總結(jié)語 .27 參考文獻(xiàn) .28 I 基于

3、B/S 架構(gòu)的打印研究與應(yīng)用 摘 要 實現(xiàn) B/S 報表打印的難點是頁面的排版問題,既要適應(yīng)瀏覽器的風(fēng)格,又 要符合打印的要求??紤]采用 XML 文檔描述格式信息。在運行時解釋 xml 文檔 進(jìn)行格式設(shè)置或是編譯成 java.swing 對象,直接轉(zhuǎn)換成圖形,然后由 Applet 通過數(shù)字簽名后調(diào)用打印機(jī),把數(shù)據(jù)打印在物理紙上,也可以通過預(yù)覽顯示效 果。這個 B/S 報表打印設(shè)計應(yīng)用在一個超市管理系統(tǒng)中,為報表的打印提供數(shù) 據(jù)。 關(guān)鍵詞: XML;Applet; B/S ;數(shù)字簽名 II STUDY AND APPLICATION OF PRINTING REPORT BASED ON B/S

4、 FRAMEWORK ABSTRACT To set the page in type is difficulty of printing report based on B/S Framework, which should not only be suitable for the browser,but also meet the requirement of printing.Considering that the available methods of programming now is complex and not efficient in working,there wil

5、l be a better way to separate the content to the format with XML.The document of XML will be explained and compiled at runtime,then to display for user by Applet call,print the data on the paper,and you could preview the performance first.This print design is applied to the Sumpermarket Information

6、Management,to get the data. KEY WORDS: B/S ;XML;Applet;Digital Signature 1 第一章 緒論 第一節(jié) 基于 B/S 的打印研究的興起 近年來,隨著網(wǎng)絡(luò)技術(shù)不斷發(fā)展,尤其是基于 Web 的信息發(fā)布和檢索技術(shù)、 Java 計算技術(shù)以及網(wǎng)絡(luò)分布式對象技術(shù)的飛速發(fā)展,導(dǎo)致了很多應(yīng)用系統(tǒng)的體系結(jié) 構(gòu)從 CS 結(jié)構(gòu)向更加靈活的 BS 多級分布結(jié)構(gòu)演變,使得軟件系統(tǒng)的網(wǎng)絡(luò)體系結(jié) 構(gòu)跨入一個新階段。在局域網(wǎng)及互聯(lián)網(wǎng)建立 B/S 結(jié)構(gòu)的網(wǎng)絡(luò)應(yīng)用,并通過 Internet / Intranet 模式下數(shù)據(jù)庫應(yīng)用,相對易于把握、成本也是較低的。它

7、是一次性到位 的開發(fā),能實現(xiàn)不同的人員,從不同的地點,以不同的接入方式(比如以不同的接入方式(比如 LAN, WAN, Internet/Intranet 等)訪問和操作共同的數(shù)據(jù)庫;它能有效地保護(hù)數(shù)據(jù)平臺和管等)訪問和操作共同的數(shù)據(jù)庫;它能有效地保護(hù)數(shù)據(jù)平臺和管 理訪問權(quán)限,服務(wù)器數(shù)據(jù)庫也很安全。在理訪問權(quán)限,服務(wù)器數(shù)據(jù)庫也很安全。在 BS 體系結(jié)構(gòu)系統(tǒng)中,用戶通過瀏覽器體系結(jié)構(gòu)系統(tǒng)中,用戶通過瀏覽器 向分布在網(wǎng)絡(luò)上的許多服務(wù)器發(fā)出請求,服務(wù)器對瀏覽器的請求進(jìn)行處理,將用戶向分布在網(wǎng)絡(luò)上的許多服務(wù)器發(fā)出請求,服務(wù)器對瀏覽器的請求進(jìn)行處理,將用戶 所需信息返回到瀏覽器。而其余如數(shù)據(jù)請求、加工、

8、結(jié)果返回以及動態(tài)網(wǎng)頁生成、所需信息返回到瀏覽器。而其余如數(shù)據(jù)請求、加工、結(jié)果返回以及動態(tài)網(wǎng)頁生成、 對數(shù)據(jù)庫的訪問和應(yīng)用程序的執(zhí)行等工作全部由對數(shù)據(jù)庫的訪問和應(yīng)用程序的執(zhí)行等工作全部由 Web Server 完成。隨著完成。隨著 Windows 將瀏覽器技術(shù)植入操作系統(tǒng)內(nèi)部,這種結(jié)構(gòu)已成為當(dāng)今應(yīng)用軟件的首選將瀏覽器技術(shù)植入操作系統(tǒng)內(nèi)部,這種結(jié)構(gòu)已成為當(dāng)今應(yīng)用軟件的首選 體系結(jié)構(gòu)。體系結(jié)構(gòu)。顯然 BS 結(jié)構(gòu)應(yīng)用程序相對于傳統(tǒng)的 CS 結(jié)構(gòu)應(yīng)用程序是一個非常 大的進(jìn)步。 但是任何事物都是有兩面性的,B/S 結(jié)構(gòu)同樣也存在著一些不足之處。比如瀏瀏 覽器的精確打印覽器的精確打印一直是在 B/S 項目開

9、發(fā)很難解決的問題,大部分的開發(fā)者往往采用 第三方控件,或者購買別人的組件,我們可以通過研究設(shè)計,掌握在 B/S 下的最佳 打印方案。 該研究最終通過 Java 和 xml 結(jié)合來解決 B/S 構(gòu)架下的精確打印。那 你也可能要問:我們?yōu)槭裁匆蛴“。看蛴∈裁磧?nèi)容??? 大家都知道報表就是用表格、圖表等格式來動態(tài)顯示數(shù)據(jù),可以用公式表示為: “報表報表 多樣的格式多樣的格式 動態(tài)的數(shù)據(jù)動態(tài)的數(shù)據(jù)” 。它是一種信息統(tǒng)計和采集的工具,也為評。它是一種信息統(tǒng)計和采集的工具,也為評 價企業(yè)經(jīng)營業(yè)績和改善經(jīng)營管理提供重要信息,為國家經(jīng)濟(jì)管理機(jī)構(gòu)進(jìn)行宏觀調(diào)控價企業(yè)經(jīng)營業(yè)績和改善經(jīng)營管理提供重要信息,為國家經(jīng)濟(jì)管

10、理機(jī)構(gòu)進(jìn)行宏觀調(diào)控 與管理提供必要信息;為投資者和貸款者進(jìn)行決策提供有用信息,與管理提供必要信息;為投資者和貸款者進(jìn)行決策提供有用信息,等等。由此可見, 2 報表發(fā)揮著很大的作用,然而,有的報表卻不僅僅是以電子文檔的格式來呈現(xiàn)給相 關(guān)人員,有時候,我們還是需要一些紙質(zhì)的信息集,所以,報表的打印也是必不可 少的。比如:購物票據(jù),銀行打印的取款憑證等等。 第二節(jié) 報表打印的現(xiàn)狀 報表打印在 C/S 時代,確實非常簡單,VB,VC,Delphi,PB 等都有很好用的 打印 API,有的甚至用報表控件方式,實現(xiàn)打印更是分分秒秒的事情,但今天是 B/S 的天下,報表都是在網(wǎng)頁瀏覽器中顯示,但當(dāng)今的瀏覽器

11、打印功能一般非常弱, 要做到精確分頁打印,幾乎不可能,所以當(dāng)前的報表工具,一般不會使用瀏覽器的 打印菜單來打印報表,都有自己的解決方案。 歸納來說,當(dāng)今 Java 報表工具采用的打印技術(shù)不外乎三類:AppletApplet 打印,導(dǎo)打印,導(dǎo) 出成出成 pdf/excelpdf/excel 打印,控件打印打印,控件打印。這三種打印技術(shù)各有優(yōu)缺點。根據(jù)需要和所學(xué)知 識,我選用的是 Applet 打印技術(shù)。 Applet 打印前需要安裝 jre,雖然啟動慢,但是使用它很安全。因為 Applet 是 在一個受限的環(huán)境中運行,當(dāng)你訪問一個陌生網(wǎng)站時,處于安全考慮,你可能會下 載運行 Applet,而阻止

12、控件運行。Applet 打印,除了可以設(shè)置打印機(jī),設(shè)置紙張 頁面大小等常規(guī)打印功能外,往往也集成與打印不相關(guān)的功能,比如,打印前修改, 按行分頁,自由定位,這些本來由設(shè)計器完成的功能,挪到打印功能上,掩蓋了上 面指出的 Applet 的種種不足。 第三節(jié) B/S 報表打印的提出及意義 開發(fā) B/S 結(jié)構(gòu)的應(yīng)用程序最頭疼的問題可能就是報表打印了,由于只能采用瀏 覽器來作為用戶界面進(jìn)行交互,所以不能精確控制客戶端的打印機(jī)。而很多 B/S 結(jié) 構(gòu)的應(yīng)用程序常常需要完成非常復(fù)雜的報表打印任務(wù)。 3 第二章 實現(xiàn) B/S 打印和應(yīng)用的相關(guān)技術(shù) 經(jīng)過研究得出,在解決這個問題我需要用到以下知識: Apple

13、t,Spring,Struts,XML 以及 Java 語言。下面是有關(guān)這些知識的概括。 第一節(jié) Applet 技術(shù) Applet 概念 Java Applet 就是用 Java 語言編寫的一些小應(yīng)用程序,它們可以直接嵌入到網(wǎng) 頁或者其他特定的容器中,并能夠產(chǎn)生特殊的效果。 Applet 必須運行于某個特定的“容器”,這個容器可以是瀏覽器本身,也可以是 通過各種插件,或者包括支持 Applet 的移動設(shè)備在內(nèi)的其他各種程序來 運行。與 一般的 Java 應(yīng)用程序不同,Applet 不是通過 main 方法來運行的。在運行時 Applet 通常會與用戶進(jìn)行互動,顯示動態(tài)的畫面,并且還會 遵循嚴(yán)格

14、的安全檢查,阻止 潛在的不安全因素(例如根據(jù)安全策略,限制 Applet 對客戶端文件系統(tǒng)的訪問) 。 在 Java Applet 中,可以實現(xiàn)圖形繪制,字體和顏色控制,動畫和聲音的插入, 人機(jī)交互及網(wǎng)絡(luò)交流等功能。 Applet 還提供了名為抽象窗口工具箱(Abstract Window Toolkit, AWT)的窗口環(huán)境開發(fā)工具。 AWT 利用用戶計算機(jī)的 GUI 元 素,可以建立標(biāo)準(zhǔn)的圖形用戶界面,如窗口、按鈕、滾動條等等。 Applet 的語言特點 從 Applet 類擴(kuò)展而創(chuàng)建的用戶 Applet 新類。 類定義舉例:public class Hello extends Apple

15、t Applet 依賴于瀏覽器的調(diào)用。 通過Applet標(biāo)記嵌入在 HTML 文件中。 HTML 中 Applet 標(biāo)記的主要屬性 Code=Applet 文件標(biāo)識。 Codebase=Applet 文件所在路徑。 width=Applet 顯示區(qū)域的寬度。 4 height=Applet 顯示區(qū)域的高度。 name=Applet 的符號名,用于同頁面不同 Applet 之間的通信。 Applet 的生命周期 init()、start()、stop()、destroy()方法都是 Applet 類中已經(jīng)定義的方法,系統(tǒng)根 據(jù)上述規(guī)則自動執(zhí)行 Applet 的生命周期。用戶 Applet 中也可

16、重新定義這些方法 (重載) 。 第二節(jié) XML 技術(shù) 一、XML概論 XML 即 Extensible Markup Language(可擴(kuò)展標(biāo)記語言)的縮寫。XML 實際上 是 Web 上表示結(jié)構(gòu)化信息的一種標(biāo)準(zhǔn)文本格式,它沒有復(fù)雜的語法和包羅萬象的 數(shù)據(jù)定義。XML 同 HTML 一樣,都來自 SGML(標(biāo)準(zhǔn)通用標(biāo)記語言)。SGML 是一 種在 Web 發(fā)明之前就早已存在的用標(biāo)記來描述文檔資料的通用語言。XML 簡單易懂, 它還具有許多先進(jìn)的特性: 可擴(kuò)展性 XML 允許使用者創(chuàng)建和使用他們自己的標(biāo)記而不是 HTML 的有限詞匯表。 這一點至關(guān)重要,企業(yè)可以用 XML 為電子商務(wù)和供應(yīng)鏈集

17、成等應(yīng)用定義自己的標(biāo) 記語言,甚至特定行業(yè)一起來定義該領(lǐng)域的特殊標(biāo)記語言,作為該領(lǐng)域信息共享與 數(shù)據(jù)交換的基礎(chǔ)9。 靈活性 XML 提供了一種結(jié)構(gòu)化的數(shù)據(jù)表示方式,使得用戶界面分離于結(jié)構(gòu)化數(shù)據(jù)。 所以,Web 用戶所追求的許多先進(jìn)功能在 XML 環(huán)境下更容易實現(xiàn)。 自描述性 XML 文檔通常包含一個文檔類型聲明,因而 XML 文檔是自描述的。不僅人 能讀懂 XML 文檔,計算機(jī)也能處理。XML 表示數(shù)據(jù)的方式真正做到了獨立于應(yīng)用 系統(tǒng),并且數(shù)據(jù)能夠重用。XML 文檔被看作是文檔的數(shù)據(jù)庫化和數(shù)據(jù)的文檔化。 5 XML 支持世界上幾乎所有的主要語言,并且不同語言的文本可以在同一文檔 中混合使用,應(yīng)

18、用 XML 的軟件能處理這些語言的任何組合。所有這一切將使 XML 成為數(shù)據(jù)表示的一個開放標(biāo)準(zhǔn),這種數(shù)據(jù)表示獨立于機(jī)器平臺、供應(yīng)商以及編程語 言。它將為網(wǎng)絡(luò)計算注入新的活力,并為信息技術(shù)帶來新的機(jī)遇。 二、 XML解析技術(shù) XML 解析常用的幾種解析方法: DOM 技術(shù):DOM 是用平臺和語言無關(guān)的方式表示 XML 文檔信息的官方 W3C 標(biāo)準(zhǔn)。Dom 是一層次結(jié)構(gòu)的節(jié)點或信息片段的集合。這個層次結(jié)構(gòu)允許開發(fā)人員 在樹中尋找特定的信息。分析該結(jié)構(gòu)通常需要加載整個文檔和構(gòu)造層次結(jié)構(gòu),然后 才能做其他工作。由于它是基于信息層次的,因而 DOM 被認(rèn)為是基于樹或基于對 象的。DOM 以及廣義的基于樹

19、的處理具有幾個優(yōu)點。首先,由于樹在內(nèi)存中是持 久的,因此可以修改它以便應(yīng)用程序能對數(shù)據(jù)和結(jié)構(gòu)做出更改。它可以在任何時候 在樹中上下導(dǎo)航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來比較簡單。 但是對于特別大的文檔,解析和加載整個文檔可能很慢且消耗資源,在這種情況下 使用其它方法來處理會更好。比如:SAX. SAX 技術(shù)技術(shù):這種處理的優(yōu)點非常類似于流媒體的優(yōu)點。分析能夠立即開始,而 不是等待所有的數(shù)據(jù)被處理。而且由于應(yīng)用程序只是在讀取數(shù)據(jù)時檢查數(shù)據(jù),因此 不需要將數(shù)據(jù)存儲在內(nèi)存中。這對于大型文檔來說是個很大的優(yōu)點。SAX 解析器代 碼比 DOM 小,適合 Applet 下載 DOM4

20、J 技術(shù):技術(shù):它是一個非常優(yōu)秀的 Java XML API,具有性能優(yōu)異,功能強(qiáng)大和 極端易用的特點,同時它也是一個開放源代碼的軟件。 JDOM 技術(shù):技術(shù):為減少 DOM,SAX 的編碼量,出現(xiàn)了 JDOM;優(yōu)點:20-80 原則, 極大的減少了代碼量。使用場合:要實現(xiàn)的功能簡單,如解析,創(chuàng)建等,但在底層, JDOM 還是使用 SAX,DOM 等。 綜合考慮我選用的是 SAX 解析 xml 文件。 6 第三節(jié) Spring 概論 Spring 是一個開源框架,它由 Rod Johnson 創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā) 的復(fù)雜性而創(chuàng)建的,使用基本的 JavaBean 來完成以前只可能由 E

21、JB 完成的事情。 然而,Spring 的用途不僅限于服務(wù)器端的開發(fā)。從簡單性、可測試性和松耦合的角 度而言,任何 Java 應(yīng)用都可以從 Spring 中受益。它是面向接口編程,而不是針對 類編程。代碼已與測試。 簡單來說,Spring 是一個輕量級的控制反轉(zhuǎn)(IOC)和面向方面(AOP)的容 器框架。 控制反轉(zhuǎn)控制反轉(zhuǎn):Spring 通過一種稱作控制反轉(zhuǎn)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用了 IOC,一個對象依賴其他對象就會通過被動的方式傳遞進(jìn)來,而不是這個對象之間 創(chuàng)建或者查找依賴對象。換句話說,不是對象從容器中查找依賴,而是容器在對象 初始化的時候不等對象請求就主動將依賴傳遞給它。 面向切面:S

22、pring 提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的業(yè)務(wù) 邏輯與系統(tǒng)級服務(wù)(例如審計和事務(wù)管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對象只實現(xiàn)它 們應(yīng)該做的(完成業(yè)務(wù)邏輯) ,僅此而已,它們并不負(fù)責(zé)其它的系統(tǒng)關(guān)注點,例如 日志或事務(wù)支持。 容器容器:Spring 包含并管理應(yīng)用對象的配置和生命周期,在這個意義上它是一種 容器,你可以配置你的每個 bean 如何創(chuàng)建(基于一個可配置原型) ,你的 bean 可 以創(chuàng)建一個單獨的實例或者每次都生成一個新的實例,以及它們是如何關(guān)聯(lián)的。然 而 Spring 不應(yīng)該被混同于傳統(tǒng)的重量級 EJB 容器,它們經(jīng)常那個是龐大與笨重的, 難以使用。而 Spring 則

23、是輕量級可插拔的,你可以集成你想用的框架,他就像是一 個插板,隨時用,隨時插入。 框架框架:Spring 可以將單獨的組件配置,組合稱為復(fù)雜的應(yīng)用。在 Spring 中,應(yīng) 用對象被聲明式的組合,典型的是在一個 XML 文件里。它也提供了很多基礎(chǔ)功能 (事務(wù)管理,持久化框架集成等) ,只是把業(yè)務(wù)邏輯留給你來實現(xiàn)。 7 第四節(jié) Struts 概述 它也是一個開源的軟件,幫助開發(fā)人員跟快捷的開發(fā) Web 程序,它使用的是 Model2 體系結(jié)構(gòu)(JSP+servlets).ActionServlet 控制總流程。另外一個 Action 類負(fù) 責(zé)存取業(yè)務(wù)邏輯類。當(dāng) ActionServlet 類從容

24、器中獲取請求時,他使用請求的 URI 路徑來決定是哪一個 Action 來處理該請求。一個 Action 可以檢測輸入的合法性, 通過業(yè)務(wù)邏輯層來讀取數(shù)據(jù)庫或者其他數(shù)據(jù)服務(wù)器中的信息。要完成這些功能, Action 需要用戶提交給它處理的數(shù)據(jù),Struts 將這些數(shù)據(jù)綁定到 JavaBean 中,每一 個這樣的輸入 Bean 都是 Struts 中 ActionForm 類的子類。ActionServlet 通過查看這 些請求的路徑,就可以決定哪一個 ActionForm 用來包含輸入數(shù)據(jù)。每一個 HTTP 請求都必須有一個 HTTP 響應(yīng)。但 Struts 自己并不生成響應(yīng),而是將該請求轉(zhuǎn)發(fā)

25、到 其他的資源上如 JSP 頁面。Struts 提供一個名為 ActionForward 的類來將邏輯名保存 到每個頁面的路徑。當(dāng)業(yè)務(wù)邏輯部分已經(jīng)執(zhí)行完成后,Action 會選擇一個 ActionForward,并且將它返回給總控 Servlet??偪?Servlet 會使用在該 ActionForward 中存儲的物理路徑來調(diào)用對應(yīng)的頁面來完成 HTTP 響應(yīng)。 一、Struts 實現(xiàn)的 MVC 框架 如圖 1.1 所示: 圖 1.1 8 二、Struts 的工作流程 當(dāng) ActionServlet 接收到一個客戶請求時,將執(zhí)行如下的流程. (一) 檢索和用戶請求匹配的 ActionMapp

26、ing 實例,如果不存在,就返回用戶請 求路徑的無效信息! (二) 如果 ActionForm 實例不存在,就創(chuàng)建一個 ActionForm 對象,把客戶提交 的表單數(shù)據(jù)保存到 ActionForm 對象中. (三)根據(jù)配置信息決定是否需要表單驗證,需要驗證就調(diào)用 ActionForm 的 validate()方法. (四)如果 ActionForm 的 validata()方法返回 null 或返回一個不包含 ActionMessage 和 ActionErrors 對象,就表示表單驗證成功 (五)ActionServlet 根據(jù) ActionMapping 實例包含的影射信息決定將請求轉(zhuǎn)

27、發(fā)給哪個 Action.若 Action 實例不存在,就先創(chuàng)建實例,然后調(diào)用 Action 的 execute()方 法. (六) Action 的 execute()方法返回一個 ActionForward 對象,ActionServlet 再 把客戶請求轉(zhuǎn)發(fā)給 ActionForward 對象所指向的 JSP 組件 (七) ActionForward 對象所指向的 JSP 組件生成動態(tài)網(wǎng)頁,返回給客戶。 它的工作活動圖 1.2 如下: 9 圖 1.2 10 第三章 B/S 打印的解決方案 基于上述的種種因素,我最終使用 Java 和 XML 相結(jié)合的方式來實現(xiàn) B/S 結(jié) 構(gòu)的精確打印。它

28、們兩個都是跨平臺語言,具有很高的可移植性。下面讓我們看看 實現(xiàn)的具體內(nèi)容。 第一節(jié) 總體設(shè)計 一、總體框架 如下圖 3.1 所示 圖 3.1 基于 B/S 報表打印研究的設(shè)計思路:用戶通過瀏覽器,設(shè)置打印格式,進(jìn)行預(yù) 覽,然后點擊打印按鈕打印數(shù)據(jù),這時用戶的請求就通過網(wǎng)絡(luò)傳到 Web 服務(wù)器端, 服務(wù)器響應(yīng)請求,通過 JDBC 訪問數(shù)據(jù)庫資源,調(diào)出相應(yīng)數(shù)據(jù),并返回給客戶端, 為打印提供數(shù)據(jù)。這里我使用的是 SQLServer 數(shù)據(jù)庫,由于涉及到分頁的問題, SQL Server 2000 的分頁要用存儲過程來實現(xiàn)。 設(shè)計的網(wǎng)絡(luò)結(jié)構(gòu)圖 3.2 客戶端 報表顯示 報表打印 腳本與程序 Xml/ap

29、plet Web 服務(wù)器端 Web 程序 J2EE 1. 響應(yīng)請求, 調(diào)出響應(yīng)數(shù) 據(jù) 2. 報表模板文 件 XML DB 服務(wù)器端 SQLServer 數(shù)據(jù) 庫 數(shù)據(jù)字典 數(shù)據(jù) 相應(yīng)的 sql 腳本 語言 JDBC 瀏覽器 網(wǎng)絡(luò)通信協(xié) 11 圖 3.2 二、設(shè)計需求 瀏覽器的精確打印一直是在 B/S 項目開發(fā)很難解決的問題,由于只能采用瀏 覽器來作為用戶界面進(jìn)行交互,所以不能精確控制客戶端的打印機(jī)。而很多 B/S 結(jié) 構(gòu)的應(yīng)用程序常常需要完成非常復(fù)雜的報表打印任務(wù)。僅靠 IE 自帶的頁面打印功 能一般不能滿足需要。大部分的開發(fā)者往往采用第三方控件,或者購買別人的組件, 但是,如果我們只需要進(jìn)行

30、一些小規(guī)模的報表打印時,顯然那些方法都不太適合, 所以,我們可以通過研究設(shè)計,掌握在 B/S 下的最佳打印方案。 用戶通過瀏覽器設(shè)置打印格式,進(jìn)行打印預(yù)覽,分頁打印,設(shè)置打印屬性,在 每頁上自動添加固定的內(nèi)容,比如版權(quán)聲明或是指定廣告等等。 三、設(shè)計要求 根據(jù)目前 Web 系統(tǒng)的要求,我們在設(shè)計系統(tǒng)時應(yīng)達(dá)到以下要求: 結(jié)構(gòu),數(shù)據(jù)分離 這樣可以增強(qiáng)數(shù)據(jù)的獨立性,提高數(shù)據(jù)的共享程度 數(shù)據(jù)的傳輸量要小 如果數(shù)據(jù)量過大,由于網(wǎng)絡(luò)的原因,可能會導(dǎo)致速度很慢 保證數(shù)據(jù)的安全性和準(zhǔn)確性 這是任何 Web 系統(tǒng)都要求的,也是大家都關(guān)注的問題 易于維護(hù)和升級 12 第二節(jié) 打印機(jī)的控制 打印的過程涉及到三部分:

31、查找,規(guī)范(輸出格式,答應(yīng)預(yù)覽,內(nèi)容設(shè)置等)和 打印。 一、打印定位 執(zhí)行打印作業(yè)首先要確定打印機(jī)。支持查找任務(wù)的類為 PrintServiceLookup.要 查找打印可使用一下三種方法之一: public static final PrintService lookupDefaultPrintService() 返回缺省的打印服務(wù) public static final PrintService lookupPrintServices(DocFlavor flavor, AttributeSet attributes) 返回支持打印特定文檔類型(比如 GIF)的打印機(jī)集和一個特定的屬性集

32、(比如雙面打?。?Public static final MultiDocPrintService lookupMultiDocPrintServices (DocFlavor flavors,AttributeSet attributes) 支持一次打印多個文檔 二、指定輸出格式 指定了打印機(jī),還需用 DocFlavor 類(或它的其中一個子類)指定打印文檔的 格式。DocFlavor 有七個子類用來定義格式,這些類可分為三個 MIME 類型子集: 面向字節(jié)的有:BYTE_ARRAY,INPUT-STREAM,URL. 面向字符的有:CHAR_ARRAY,READER,STRING 面向服

33、務(wù)的內(nèi)部類是:SERVICE_FORMATTED 三、確定打印屬性 打印屬性描述如何打印文檔,如副本數(shù)目,要打印那一頁和文檔圖形類型(例 如橫向和縱向)等。Javax.print.attribute 包中大約有 70 個不同的屬性,每個屬性都 使用一個或多個屬性集。 要指定屬性,需呀使用哪個下面兩個類之一:DocFlavorAttributeSet(單個文檔 特性)和 PrintRequestAttributeSet(單個打印作業(yè)特性)。 13 下面是使用哪個 PrintRequestAttributeSet 屬性并打印對象五份的方法: PrintRequestAttributeSet pra

34、s=new HashPrintRequestAttributeSet(); Pras.add(new Cpies(5); 四、設(shè)置打印內(nèi)容 利用 Doc 接口為打印作業(yè)提供數(shù)據(jù)。該接口的實現(xiàn)是 SimpleDoc 類,它使用的 是一個構(gòu)造函數(shù),打印內(nèi)容為第一個參數(shù),風(fēng)格為第二個參數(shù),屬性是第三個參數(shù)。 該構(gòu)造函數(shù)如下所示: Public SimpleDoc (Object printData,DocFlavr flavor,DocAttributeSet attributes) 打印數(shù)據(jù)依賴于 DocFlavor。如果指定了 DocFlavor。INPUT_STREAM 風(fēng)格, 數(shù)據(jù)將由 In

35、put_Stream 識別。如果風(fēng)格是 DocFlavr。BYTE_ARRAY,那么數(shù)據(jù)就是 字節(jié)數(shù)組(byte).因此,打印 gif 圖像文件語法為: DocFlavor flavor=DocFlavor.INPUT_STREAM.GIF; String filename=.; FileInputStream fis=new FileInputStream(filename); DocAttributeSet das=new HashDocAttributeSet(); Doc doc=new SimpleDoc(fis,flavor,das); 五、打印 一旦指定了打印機(jī),并確定了輸出格式

36、,屬性和內(nèi)容,就可以通過 DocPrintJob(從 PrintService 檢索到)的方法 print()來執(zhí)行打印任務(wù)了,如下所 示: DocPrintJob job=.; PrintRequestAttributeSet pras=.; Doc doc=.; Job.print(doc,pras); 通過調(diào)用 print(),觸發(fā)一個機(jī)制向打印服務(wù)發(fā)送內(nèi)容,該機(jī)制在一個單獨的線 程中。 六、打印時間監(jiān)聽 14 Java 打印服務(wù)提供一個委托時間接口,含有六個方法: Public interface PrintJobListener Public void printDataTransf

37、erCompleted(PrintJobEvent e); Public void printJobCompleted(PrintJobEvent e); Public void printJobFailed(PrintJobEvent e); Public void printJobCanceled(PrintJobEvent e); Public void printJobNoMoreEvents(PrintJobEvent e); Public void printJobRequiresAttention(PrintJobEvent e); 通過實例化 PrintJobAdapter 接

38、口,根據(jù)自己的實際要求擴(kuò)充某個或幾個方法。 例如注冊一個 PrintJobListener: PrintService printService=PrintServiceLookup.lookupDefaultPrintService(); DocPrintJob job=printService.createPrintJob(); PrintJobListener listener=new PrintJobAdapter() Public void printDataTransferCompleted(PrintJobEvent e) System.out.println(“Bye”); S

39、ystem.exit(0); Job.addPrintJobListener(listener); 當(dāng)傳送打印數(shù)據(jù)時,若 PrintJobListener 正常運行,則系統(tǒng)應(yīng)該處于等待狀態(tài)。 七、打印圖形 打印內(nèi)存中圖像或組件要用到 DocFlavor.SERVICE_FORMATTED,它有三個 接口: Java.awt.print.Pageable, Java.awt.print.Printable, Java.awt.image.renderable.RunderableImage, 15 打印圖形是需要實現(xiàn)某一接口,例如,我們可以設(shè)計 java.awt.print.Printable

40、接口: Public interface Printable Public static final int PAGE_EXISTS; Public static final int NO_SUCH_PAGE; Public int print(Graphics g,PageFormat pf,int page) Throws PrinterException; 實現(xiàn)該接口的例子: Public int print(Graphics g,PageFormat pf,int pageIndex) Int x=(int)pageFormat.getImageableX(); Int y=(int)

41、pageFormat.getImageableY(); g.translate(x,y); if(pageIndex=0) paint(g); return Printable.PAGE_EXISTS; Else Return Printable.NO_SUCH_PAGE; 第三節(jié) 數(shù)字簽名 打印就要訪問本地資源(例如打印機(jī)等),然而,采用 Applet 卻受到安全機(jī) 制的限制,只有 applet 獲取 application 的權(quán)限,才可以進(jìn)行操作。所以我們只有通 過數(shù)字簽名,讓 javaVM 知道這個 applet 是由可信任的人提供的1。由此就可以讓 applet 訪問本地資源。步驟如下

42、: 16 (1) 將 Applet Class 打成 jar 包 Jar cvf name.jar *.class (2) 在網(wǎng)頁中嵌入 applet (3) 生成證書及簽名 Keytool genkey keystore haley.store alias haley 這個命令用來產(chǎn)生一個密鑰庫,執(zhí)行完畢后應(yīng)該產(chǎn)生一個 haley.store 的 文件,這里的 haley 是我的英文名字。另外在執(zhí)行命令的時候還有提示 讓你輸入密鑰庫的密碼。 Keytool export keystore haley.store alias haley file haley.cert 這個命令用來產(chǎn)生簽名時所

43、用到的證書,將公鑰導(dǎo)入一個 cert 文件,這 個命令完成后產(chǎn)生一個 haley.cert 的文件 Jarsigner keystore haley.store myappletname.jar haley 這個命令用上面產(chǎn)生的證書將我的 jar 文件進(jìn)行了簽名 (4) 新建一個策略文件,并把這些策略文件加入 在 applet 中產(chǎn)生一個名為 applet.policy 的文件,其內(nèi)容如下: Keystore “file:D:haley.store”,”JKS”; Grant signedBy “haley” permission java.io.FilePermission”,”read”;

44、=; 這個文件讓有 haley 簽名的 applet 擁有本地所有文件的讀取權(quán)限。 也可以修改如下文件 $java.home/jre/lib/security 目錄下的 java.security,找到下面這兩行: Policy.url.1=file:$java.home/liv/security/java.policy Policy.url.2=file:$user.home/.java.policy 在下面添加 Policy.url.3=file:D:/haley.policy 17 完成這個修改后我們前面創(chuàng)建的 haley.policy 文件才有效 第四節(jié) XML 格式文件 根據(jù)上面的分

45、析結(jié)果,我采用 xml 控制打印和打印預(yù)覽的格式信息,下面是 XML 文件的部分內(nèi)容和格式 Report:內(nèi)容顯示在整個報表中,可以包括報表的表名,頁眉頁腳等等 Pageheader:內(nèi)容顯示在每一頁的首部 Pagefooter:內(nèi)容顯示在每一頁的尾部 Items:則是內(nèi)容填充區(qū)的格式 userName 18 19 第四章 B/S 打印在 Web 系統(tǒng)中的應(yīng)用 大家都知道,當(dāng)前比較受歡迎的基于 Java 的 WEB 系統(tǒng)架構(gòu)就是 J2EE。而構(gòu) 建這個架構(gòu)最流行的框架就是 Spring,Hibernate 和 Struts。它們?nèi)齻€各有優(yōu)缺點, 并不是在設(shè)計系統(tǒng)的時候一定要使用 SSH,而要根

46、據(jù)實際情況,來取舍。然后把這 些技術(shù)組合起來形成一個適應(yīng)項目需要的穩(wěn)定的架構(gòu)。 我設(shè)計這個 WEB 系統(tǒng)使用的是 Spring 和 Struts 整合。我認(rèn)為,作為一個程序 愛好者,不僅僅要會使用這些框架,更重要的是能通過這些框架來提升自己的動手 能力和解決問題的能力,進(jìn)而開發(fā)出一個高效的系統(tǒng)。由于諸多框架的出現(xiàn),使得 軟件開發(fā)的門檻越來越低,會配置就會編程,但是我認(rèn)為,一個好的 DBA 對軟件 性能會有很大的提升,軟件的核心邏輯會最終轉(zhuǎn)化到對數(shù)據(jù)庫的操作上,現(xiàn)在我雖 然不能用 Java 語言來開發(fā)有關(guān)數(shù)據(jù)庫操作的 API,但是,我至少要熟悉有關(guān) DataBase 的相關(guān)操作。所以沒有使用 H

47、ibernate。 在這個應(yīng)用中所用到的相關(guān)技術(shù)在上一章中已經(jīng)講過,這里就不在重復(fù)。 由于這個系統(tǒng)僅僅是打印的應(yīng)用,所以詳細(xì)的系統(tǒng)設(shè)計在這里就不在啰嗦。下面讓 我們看看它的環(huán)境和模型。 第一節(jié) 開發(fā)環(huán)境和運行環(huán)境 一、開發(fā)環(huán)境 Web 服務(wù)器:Tomcat 5.0. 數(shù)據(jù)庫服務(wù)器:SQL Server 2000 開發(fā)平臺:Eclipse 3.1.2 Eclipse 插件 MyEclipse v 5.5.1 20 二、運行環(huán)境 windows XP,或者 Linux OS JDK 1.5 及以上版本 IE 6.0 及以上版本 第二節(jié) 模型的建立 一、用例圖 如圖 4.1 Logon 印 印 印

48、印 印 印 印 印 圖 4.1 功能描述:用戶登錄,進(jìn)行打印預(yù)覽和打印 二、順序圖 用戶登錄的時序圖 4.2 21 : 印 印 Logon Interface WebServerDataBase 1: Input(String,String) 2: Send(String,String) 3: Query_and_Validate() 4: feedBack() 5: return() 6: ShowInfo 圖 4.2 功能描述:用戶在登陸界面輸入用戶名和密碼,登陸界面向 WEB 服務(wù)器發(fā) 送信息,然后服務(wù)器在數(shù)據(jù)庫中查詢,看信息是否正確,把結(jié)果返回給服 務(wù)器,最后把結(jié)果顯示給用戶。 用戶打

49、印預(yù)覽的時序圖 4.3 : 印 印 PrintPreview Page WebServerDataBase 1: Request() 2: Send() 3: Validate_and_Query() 4: Sucess() 5: CreatePreviewInfo 6: ShowInfomationOnThisPage 圖 4.3 22 功能描述:用戶請求打印預(yù)覽,服務(wù)器接收請求后結(jié)合數(shù)據(jù)庫驗證及查詢 信息,并返回結(jié)果,展示給用戶 三、協(xié)作圖 打印預(yù)覽的協(xié)作圖 4.4 : 印 印 PrintPreviewIn terface showInformation 1: request() WebS

50、erver DataBase requestPrintPreview Return() 2: 3: queryData() 4: 5: return() 6: 圖 4.4 功能描述:用戶與各個組件之間的交互。 四、系統(tǒng)狀態(tài)圖 4.5 Home Page Certify Sucess Page PrintPreview Apply Page InputURL Logon() error() sucess() requestPrintPreview Preview Page 圖 4.5 功能描述:系統(tǒng)狀態(tài)圖主要描述用戶在進(jìn)行打印預(yù)覽的動態(tài)行為,反映了 各種狀態(tài)下用戶所得到的信息以及系統(tǒng)的反應(yīng)。 2

51、3 五、活動圖 用戶登錄的活動圖 4.6 Input URL Input Logon Information Show HomePage PressOK Button ShowSuc essPage Certify UserInfo Sucess error DataBaseWebServerUser 圖 4.6 功能描述:從用戶登錄時與各個組件之間的過程控制流。 用戶打印預(yù)覽及打印活動圖 4.7 PrintPreview Apply Page Preview Page Print Select Printer Request Data CombinationDat aAndDefinitio

52、n Request Print Query_and_ FeedBack Print Preview DataBaseWebServerUser 圖 4.6 功能描述:用戶與打印及打印預(yù)覽所需各個組件之間的過程控制流。 24 六、主要類圖 說明:由于在這個設(shè)計中所涉及的類很多,不便在這里一一說明,以上只列出幾個 主要類的簡單類圖,以便說明情況。類 PreviewProxyBase 類繼承自 JComponent 組 件,它的主要功能是創(chuàng)建打印預(yù)覽界面中的各個組件。PreviewFrame 繼承 JFrame, 它是一個框架。PreviewDialog 是創(chuàng)建對話窗口的主要類。XMLParser

53、是 XML 的解 析文件。LocatePrint 實現(xiàn) PrintJob 接口,用來向打印機(jī)傳遞打印任務(wù)。 CombinationDataAndDefinition 的主要作用是從數(shù)據(jù)庫中獲取要打印的數(shù)據(jù),并 且把從 XML 文件中讀取的格式信息與數(shù)據(jù)相結(jié)合。User 是用戶。 第三節(jié) Web 系統(tǒng)的實現(xiàn) 由于系統(tǒng)使用了 Spring 和 Struts,所以就要考慮它們的整合方式。共有三種: 方法一:使用 Spring 的 ActionSupport 整合 Struts 25 這種方法使得 Struts 和 Spring 耦合在一起 方法二:使用 Spring 的 DelegatingRequ

54、estProcessor 類 RequestProcessor 類已經(jīng)被代理 如果要再實現(xiàn)自己的實現(xiàn)方式(如:編碼處理) 怕有點麻煩 方法三:全權(quán)委托 Action 的創(chuàng)建和對象的依賴注入全部由 IOC 容器來完成。使用 Spring 的 DelegatingActionProxy 來幫助實現(xiàn)代理工作。 我選用的是第三種 整合的工作步驟: 修改 struts-config.xml, web.xml 配置 applicationContext.xml 為 Action 添加 get/set 方法來獲得依賴注入的功能 我的配置文件信息如下: Web.xml 中的配置信息: org.springfr

55、amework.web.context.ContextLoaderListener contextConfigLocation /WEB-INF/classes/applicationContext.xml Struts-config.xml Struts 中需要委托代理的 Action 如下配置: 在 Spring 中的配置如下: 第四節(jié) 系統(tǒng)的演示界面 首頁如圖 5.1 圖 5.1 系統(tǒng)登錄后顯示的界面如圖 5.2: 27 圖 5.2 打印預(yù)覽效果圖 5.3: 圖 5.3 28 總結(jié)語總結(jié)語 這個課題設(shè)計主要采用了 Java 和 XML 等語言實現(xiàn)。把打印的研究結(jié)果運用到 Web 系統(tǒng)中,

56、從而解決了普通的 IE 打印控件所無法完成的任務(wù)。通過這次畢業(yè)設(shè) 計,我也明白做任何事情都必須要認(rèn)真,堅持到底。 首先,我要感謝一位沒有留下姓名的朋友,謝謝他給我介紹的參考書籍和資料, 讓我在畢業(yè)設(shè)計的過程中受益匪淺,如果沒有那些資料,完成畢業(yè)設(shè)計肯定會很困 難。 其次,我要感謝我的導(dǎo)師李明欣,是他靈活的思維方式和解決問題的能力,激 發(fā)了我對知識的渴望。他嚴(yán)謹(jǐn)?shù)膽B(tài)度,豐富的知識和經(jīng)驗積累為我們樹立了榜樣, 在畢業(yè)設(shè)計的過程中,給予我們很大的幫助。在這里送上我真摯的祝福和誠摯的謝 意。 我還要感謝所有教過我的任課老師和我的同學(xué)們,謝謝你們讓我度過了美好的 大學(xué)生活,讓我從一個一天說話不到 10

57、句的人到現(xiàn)在和大家無話不談,謝謝你們 給予我的幫助和鼓勵,我將永記在心。我會像你們一樣關(guān)心我周圍的朋友。 最后祝愿成都航空職業(yè)技術(shù)學(xué)院的所有老師和同學(xué)們幸??鞓贰WT肝业哪感?蒸蒸日上。 29 參考文獻(xiàn)參考文獻(xiàn) 1 涂傳濱.深入淺出 JDK6.0 .北京:電子工業(yè)出版社,2008.01 251-313 585-630 2 張朝明.XML 開發(fā)典型應(yīng)用 數(shù)據(jù)標(biāo)記,處理,共享與分析.北京:電子工業(yè) 出版社.2008.1 3 郭峰.Spring 從入門到精通.北京:清華大學(xué)出版社.2006.10 4 謝星星,陳育春.貫通開源 Web 圖形與報表技術(shù)全集.北京:電子工業(yè)出版 社.2008 320-36

58、8 5 譚傳恩.Java 實現(xiàn) web 報表打印功能.電腦學(xué)習(xí),2005 年 4 月,第二期: 55-56 6 賈素來. XML 文檔解析技術(shù)分析.電腦開發(fā)與應(yīng)用,第 20 卷,第二期:63 7 王磊杰,崔軍波,韓紅宇,于瑩華.JavaEE 開發(fā)指南-基于 Spring/Struts/Hibernate 的實現(xiàn).北京:人民郵電出版社,2007 8 周海河.基于 XML 的 WEB 報表生成系統(tǒng)的研究與實現(xiàn).碩士學(xué)術(shù)論文,2003 年 9 葉成蔭.基于 XML 的界面感觀設(shè)計.商場現(xiàn)代化,2008 年,第 559 期:20- 21 10 陳雄華.精通 Spring-企業(yè)級開發(fā)詳解.北京.電子工業(yè)

59、出版社.2007.09 10 OReilly 的 Java 網(wǎng)站.http:/ 30 以下附件為贈品,祝你事業(yè)有成! 高效能人士的高效能人士的 50 個個習(xí)慣習(xí)慣 在行在行動動前前設(shè)設(shè)定目定目標(biāo)標(biāo) 有目標(biāo)未必能夠成功,但沒有目標(biāo)的肯定不能成功。著名的效率提升大師博思. 崔西説:“成功就是目標(biāo)的達(dá)成,其他都是這句話的注釋。”現(xiàn)實中那些頂尖的成功人 士不是成功了才設(shè)定目標(biāo),而是設(shè)定了目標(biāo)才成功。 一次做好一件事一次做好一件事 著名的效率提升大師博思.崔西有一個著名的論斷:“一次做好一件事的人比同時 涉獵多個領(lǐng)域的人要好得多?!备惶m克林將自己一生的成就歸功于對“在一定時期內(nèi) 不遺余力地做一件事”這一

60、信條的實踐。 培養(yǎng)重點思培養(yǎng)重點思維維 從重點問題突破,是高效能人士思考的一項重要習(xí)慣。如果一個人沒有重點地 思考,就等于無主要目標(biāo),做事的效率必然會十分低下。相反,如果他抓住了主要矛 盾,解決問題就變得容易多了。 發(fā)現(xiàn)問題發(fā)現(xiàn)問題關(guān)關(guān)鍵鍵 在許多領(lǐng)導(dǎo)者看來,高效能人士應(yīng)當(dāng)具備的最重要的能力就是發(fā)現(xiàn)問題關(guān)鍵能 力,因為這是通向問題解決的必經(jīng)之路。正如微軟總裁兼首席軟件設(shè)計師比爾。蓋茨 所説:“通向最高管理層的最迅捷的途徑,是主動承擔(dān)別人都不愿意接手的工作,并 在其中展示你出眾的創(chuàng)造力和解決問題的能力?!?把把問題問題想透想透徹徹 把問題想透徹,是一種很好的思維品質(zhì)。只要把問題想透徹了,才能找到

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論