摘要:隨著ASP.NET開發(fā)的各種應(yīng)用系統(tǒng)的廣泛應(yīng)用,生成可個(gè)性化定制的、安全可靠的報(bào)表成為各系統(tǒng)的重要組成部分。該文提出一種采用iTextSharp類庫生成PDF文檔的方法實(shí)現(xiàn)報(bào)表打印,詳細(xì)介紹了PDF文檔生成的主要步驟,并給出相應(yīng)的程序示例代碼。
關(guān)鍵詞:PDF;iTextSharp;報(bào)表
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2012)28-6853-03
隨著ASP.NET技術(shù)的不斷發(fā)展,在互聯(lián)網(wǎng)中采用ASP.NET技術(shù)的應(yīng)用系統(tǒng)越來越多。對(duì)于采用ASP.NET技術(shù)開發(fā)的應(yīng)用系統(tǒng),報(bào)表輸出是各種應(yīng)用系統(tǒng)的重要組成部分。當(dāng)前,在ASP.NET應(yīng)用系統(tǒng)中導(dǎo)出報(bào)表的方式主要集中在兩個(gè)方面:1) 使用集成的水晶報(bào)表;2) 將數(shù)據(jù)流直接導(dǎo)出生成Excel等。然而,這兩種方式都難以滿足用戶報(bào)表的個(gè)性化需求。
通過深入研究iTextSharp,本文介紹一種基于iTextSharp的PDF個(gè)性化報(bào)表生成方法,并結(jié)合筆者開發(fā)的項(xiàng)目管理系統(tǒng)中的報(bào)表應(yīng)用需求,實(shí)現(xiàn)個(gè)性化報(bào)表的定制和打印。
1 PDF和iTextSharp
PDF全稱Portable Document Format,譯為"便攜文檔格式",是由是Adobe公司設(shè)計(jì)的一種電子文件格式。它與操作系統(tǒng)平臺(tái)無關(guān)的性能使它成為在Internet上進(jìn)行電子文檔發(fā)行和數(shù)字化信息傳播的理想文檔格式。PDF文件格式可以將文字、字型、格式、顏色及獨(dú)立于設(shè)備和分辨率的圖形圖像等封裝在一個(gè)文件中,還可以包含超文本鏈接、聲音和動(dòng)態(tài)影像等電子信息,支持特長文件,集成度和安全可靠性都較高。
iText是著名的開放源碼的站點(diǎn)sourceforge一個(gè)項(xiàng)目,是用于生成PDF文檔的一個(gè)java類庫。通過iText不僅可以生成PDF或rtf的文檔,而且可以將XML、Html文件轉(zhuǎn)化為PDF文件。由此,Gerald Henson,Paulo Soares在基于iText開源項(xiàng)目上開發(fā)了基于.NET生成PDF文檔的開放式源碼類庫iTextSharp。通過iTextSharp可以方便地在ASP.NET中生成PDF文檔,同時(shí)支持將XML、HTML文件轉(zhuǎn)換為PDF文檔。
2 基于iTextSharp生成PDF文檔的一般步驟
1)引入iTextSharp類庫和系統(tǒng)輸入輸入類庫。
2)創(chuàng)建一個(gè)iTextSharp.text .Document實(shí)例。
Document document=new Document();
Document類中有3種構(gòu)造函數(shù),其中最常用的是Document(Rectangle PageSize),PageSize定義頁面大小,如果需要用橫向頁面,則可用Rotate()。
例如:Document(PageSize.A4.Rotate());
3) 創(chuàng)建一個(gè)Writer實(shí)例,它將Document寫入一個(gè)數(shù)據(jù)流。
4)打開document,準(zhǔn)備寫入內(nèi)容。
document.Open();
在打開之前,可以添加頁眉、頁腳和水印等。
如添加動(dòng)態(tài)條形碼頁腳,
5)向Document添加內(nèi)容,根據(jù)客戶要求設(shè)定生成PDF的樣式,每頁生成多少行,在什么位置,用什么樣的表頭。根據(jù)PDF格式需求,設(shè)計(jì)成樣式表,并將其打印。
由于iTextSharp并不能直接打印出中文字體,在添加內(nèi)容前要必須首先定義一個(gè)Font類型變量來獲得字體格式。
BaseFont bfChinese = BaseFont.createFont(Server.MapPath("CSS\\simsun.ttc,1"), BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//其中的路徑可以是絕對(duì)路徑也可以是相對(duì)路徑,示例中定了系統(tǒng)中引入的宋體字。
如果要生成的PDF文檔包含上傳附件信息,那么可以通過下面代碼實(shí)現(xiàn):
關(guān)閉Document非常重要,因?yàn)樗鼘㈥P(guān)閉正在運(yùn)行的Writer并將內(nèi)容寫入文件。
至此,一個(gè)在制定位置按照用戶個(gè)性化需求定制的指定名稱的PDF文檔就生成了,可以直接打開預(yù)覽和打印。
3 PDF個(gè)性化報(bào)表示例
在筆者開發(fā)的項(xiàng)目管理系統(tǒng)中,打印項(xiàng)目合同書項(xiàng)目經(jīng)費(fèi)情況是需要實(shí)現(xiàn)跨行跨列,首先定義一個(gè)不考慮跨行的5等列表格,然后采用嵌套表格實(shí)現(xiàn)跨行,具體方法如下:
結(jié)果如圖1。
4 結(jié)束語
通過使用iTextSharp類庫,可以方便地生成PDF文檔,并利用PDF文檔的特點(diǎn)實(shí)現(xiàn)了在不同操作環(huán)境下個(gè)性化報(bào)表的打印。目前,該技術(shù)已成功地運(yùn)用在筆者開發(fā)的項(xiàng)目管理系統(tǒng)當(dāng)中,可通過在線方式自動(dòng)生成項(xiàng)目申報(bào)書、項(xiàng)目合同書、中期檢查表、結(jié)題驗(yàn)收證書、推薦清單和其他統(tǒng)計(jì)報(bào)表的PDF文檔。
參考文獻(xiàn):
[1] Lowagie B.iText in Action[M].New York:Manning Publications Co.,2006.
[2] 高蒙,范磊,李建華.基于PDF文檔保護(hù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息安全與通信保密,2008(3):69-71.
[3] Liberty J,Hurwitz D.Programming ASP.NET中文版[M].瞿杰,趙立東,張吳,譯.北京:電子工業(yè)出版社,200