摘要:本文講解了基于Web的PDF格式報(bào)表實(shí)現(xiàn)技術(shù),同時(shí)介紹了報(bào)表實(shí)現(xiàn)的重要性,提出了報(bào)表實(shí)現(xiàn)技術(shù)的發(fā)展趨勢(shì)。
關(guān)鍵詞:PDF報(bào)表;Web
中圖分類(lèi)號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 24-0078-02
1 基于Web的PDF報(bào)表實(shí)現(xiàn)的重要性
新型數(shù)字化系統(tǒng)具有系統(tǒng)管理、計(jì)劃與調(diào)度管理、參數(shù)監(jiān)測(cè)與分析、資源管理、質(zhì)量管理、報(bào)表管理等幾大功能模塊。其中報(bào)表管理是系統(tǒng)非常重要必不可少的部分,在應(yīng)用系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)中占有十分突出的地位。它包括生產(chǎn)日?qǐng)?bào)、生產(chǎn)月報(bào)、半成品收發(fā)月報(bào),質(zhì)量完成情況報(bào)表等功能。它解決了新型數(shù)字化系統(tǒng)基于Web的瘦客戶端不能操作客戶端打印機(jī)的問(wèn)題,使基于Web系統(tǒng)的報(bào)表打印成為可能。
2 基于Web的PDF報(bào)表的Java實(shí)現(xiàn)方法
2.1 iText組件簡(jiǎn)介
iText是一款開(kāi)源的免費(fèi)Java組件,用于創(chuàng)建和生成PDF文檔,iTextAPI使得Java開(kāi)發(fā)人員可以利用編程來(lái)創(chuàng)建PDF文檔,它有一系列強(qiáng)大功能。
2.2 PDF報(bào)表的Java實(shí)現(xiàn)方法
下面以新型數(shù)字化系統(tǒng)的生產(chǎn)月報(bào)為例,具體說(shuō)明基于Web的PDF格式報(bào)表技術(shù)的實(shí)現(xiàn)
(1)首先導(dǎo)入PDF格式報(bào)表所必須的iText組件的類(lèi),支持PDF、FDF文檔,生成文檔模板:
importcom.lowagie.text.Document;
支持使用各種字體:
importcom.lowagie.text.pdf.BaseFont;
importcom.lowagie.text.Font;
支持使用各種元素:
importcom.lowagie.text.Element;
支持使用不同的頁(yè)面大?。?/p>
importcom.lowagie.text.PageSize;
支持創(chuàng)建PDF表格:
importcom.lowagie.text.pdf.PdfPTable;
支持寫(xiě)入PDF文檔:
importcom.lowagie.text.pdf.PdfWriter;
支持設(shè)置PDF單元格:
importcom.lowagie.text.pdf.PdfPCell;
支持設(shè)置不同的段落格式:
importcom.lowagie.text.Paragraph;
(2)設(shè)計(jì)PDF報(bào)表
首先生成文檔,并設(shè)計(jì)文檔的紙張大小A2,上邊距46,下邊距72左邊距108右邊距108。
Documentdocument=newDocument(PageSize.A2,46,72,108,108);
然后設(shè)計(jì)字體的基本格式:
bfChinese=BaseFont.createFont(\"STSong-Light\",\"UniGB-UCS2-H\",BaseFont.NOT_EMBEDDED);
為文檔設(shè)計(jì)字節(jié)輸出流:
ByteArrayOutputStreambuffer=newByteArrayOutputStream();
寫(xiě)入已經(jīng)生成好的文檔:
PdfWriter.getInstance(document,buffer);
打開(kāi)文檔:
document.open();
建立表格,并設(shè)置表格的列數(shù)為5:
PdfPTabledatatable=newPdfPTable(5);
設(shè)計(jì)表頭的寬度:
intheaderwidths[]={5,15,15,15,5}
datatable.setWidths(headerwidths);
設(shè)計(jì)數(shù)據(jù)表的寬度百分比為100:
datatable.setWidthPercentage(100);
設(shè)計(jì)數(shù)據(jù)表單元格的墊襯為5:
datatable.getDefaultCell().setPadding(5);
設(shè)計(jì)數(shù)據(jù)表單元格的邊界寬度為1:
datatable.getDefaultCell().setBorderWidth(1);
設(shè)計(jì)數(shù)據(jù)表單元格內(nèi)容為中對(duì)齊:
datatable.getDefaultCell().setHorizontalAlignment(
Element.ALIGN_CENTER);
設(shè)計(jì)表頭:車(chē)間生產(chǎn)月報(bào)統(tǒng)計(jì)
Stringss=\"車(chē)間\"+\"生產(chǎn)月報(bào)統(tǒng)計(jì)表\";
Paragraphpg=newParagraph(ss,F(xiàn)ontChinese1);
pg.setAlignment(Element.ALIGN_CENTER);
pg.setSpacingAfter(20);
document.add(pg);
設(shè)計(jì)表格的列標(biāo)題:
PdfPCellh1=newPdfPCell(newParagraph(\"序號(hào)\",F(xiàn)ontChinese));
h1.setHorizontalAlignment(Element.ALIGN_CENTER);
PdfPCellh2=newPdfPCell(newParagraph(\"申報(bào)日期\",F(xiàn)ontChinese));
h2.setHorizontalAlignment(Element.ALIGN_CENTER);
PdfPCellh3=newPdfPCell(newParagraph(\"車(chē)間\",F(xiàn)ontChinese));
h3.setHorizontalAlignment(Element.ALIGN_CENTER);
PdfPCellh4=newPdfPCell(newParagraph(\"產(chǎn)品代號(hào)\",F(xiàn)ontChinese));
h4.setHorizontalAlignment(Element.ALIGN_CENTER);
PdfPCellh5=newPdfPCell(newParagraph(\"產(chǎn)品名稱\",F(xiàn)ontChinese));
加入列標(biāo)題到數(shù)據(jù)表的單元格:
datatable.addCell(h1);
datatable.addCell(h2);
datatable.addCell(h3);
datatable.addCell(h4);
datatable.addCell(h5);
循環(huán)將數(shù)據(jù)值插入到數(shù)據(jù)表單元格中:
for(inti=0;i PdfPCellsn=newPdfPCell(newParagraph(newInteger(i+1).toString(),F(xiàn)ontChinese)); sn.setHorizontalAlignment(Element.ALIGN_CENTER); datatable.addCell(sn); 將數(shù)據(jù)表添加到文檔中,并關(guān)閉文檔: document.add(datatable); document.close(); byte[]bytes=buffer.toByteArray(); 這樣以新型數(shù)字化車(chē)間的生產(chǎn)月報(bào)表為例的PDF格式報(bào)表就基本實(shí)現(xiàn)了。 2.3 基于Web的PDF格式報(bào)表的軟件實(shí)現(xiàn) 新型數(shù)字化系統(tǒng)在有客戶機(jī)/服務(wù)器體系結(jié)構(gòu)支持的基礎(chǔ)上,采用了ZK的開(kāi)發(fā)模式,此開(kāi)發(fā)模式是一個(gè)基于事件驅(qū)動(dòng)和組件的框架,它為Web應(yīng)用提供了豐富的用戶接口。ZK使Web應(yīng)用的開(kāi)發(fā)環(huán)境和桌面應(yīng)用開(kāi)發(fā)環(huán)境很類(lèi)似,客戶端組件和服務(wù)端組件之間是保持一致的。無(wú)論何時(shí)當(dāng)修改一個(gè)運(yùn)行在服務(wù)端的組件時(shí),客戶端的組件也會(huì)通過(guò)ZK的引擎在瀏覽器上進(jìn)。系統(tǒng)的實(shí)現(xiàn)主要有以下步驟: 搭建ZK開(kāi)發(fā)環(huán)境 安裝Javaservlet容器,建議安裝ApacheTomcat 配置web.xml文件此文件對(duì)Web應(yīng)用如何部署進(jìn)行了描述 配置zk.xml文件此文件對(duì)應(yīng)用進(jìn)行了自定義的配置 在XML編輯器中設(shè)置zul文件擴(kuò)展名的關(guān)聯(lián) 創(chuàng)建新型數(shù)字化系統(tǒng)Web工程 編寫(xiě)新型數(shù)字化系統(tǒng)ZK源代碼 運(yùn)行新型數(shù)字化系統(tǒng)應(yīng)用程序 數(shù)字化車(chē)間生產(chǎn)月報(bào)界面中,輸入統(tǒng)計(jì)日期最早日期和最晚日期,點(diǎn)擊統(tǒng)計(jì)按鈕,出現(xiàn)文本下載的對(duì)話框,如圖1點(diǎn)擊打開(kāi)。 圖1 生產(chǎn)月報(bào)統(tǒng)計(jì) 出現(xiàn)如下界面: 圖2 生產(chǎn)月報(bào)統(tǒng)計(jì)結(jié)果 其表格的實(shí)現(xiàn)在上一節(jié)已經(jīng)介紹。其中此報(bào)表具有PDF格式報(bào)表的所有功能。例如:打印、預(yù)覽、查找,檢索等功能。 3 結(jié)束語(yǔ) 報(bào)表實(shí)現(xiàn)技術(shù)在Java編程中一直被看成是一個(gè)難點(diǎn),但是近年來(lái)隨著編程技術(shù)的高速發(fā)展,報(bào)表實(shí)現(xiàn)技術(shù)取得了突破性進(jìn)展,本文只是基于Web的PDF格式的報(bào)表實(shí)現(xiàn)技術(shù),希望能起到拋磚引玉的作用,有助于實(shí)現(xiàn)更多的基于Web報(bào)表的格式,為新型數(shù)字化生產(chǎn)提供更大的作用。 參考文獻(xiàn): [1]譚傳恩.Java實(shí)現(xiàn)Web報(bào)表打印功能[J].電腦學(xué)習(xí),2005. [2]劉利軍.J2EE的Web報(bào)表系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007.
計(jì)算機(jī)光盤(pán)軟件與應(yīng)用2012年24期