張豎群
摘? 要:該文主要討論iText類庫在實現(xiàn)OA公文流程審批意見的歸類匯總及在線生成公文審批單的相關(guān)操作步驟。實現(xiàn)紙質(zhì)審批表單到電子審批表單的轉(zhuǎn)變,從而改善實際業(yè)務(wù)中復(fù)雜的紙質(zhì)公文歸檔流程,減輕了檔案管理人員的工作量,也大大節(jié)約了企業(yè)的紙質(zhì)資源。
關(guān)鍵詞:OA公文審批單? iText? 在線生成PDF
iText是SOURCEFORGE站點的一個項目,其主要功能是生成PDF文件,因其輕便、高效、易用等特點,被人常用在報表、公文審批單、電子賬單等方面。該文主要討論其在辦公自動化系統(tǒng)(以下簡稱OA)中如何自定義歸類匯總OA公文流程審批意見并且在線生成公文審批單和對公文審批單進行加密和權(quán)限設(shè)置,從而大大減輕了檔案管理人員的工作,實現(xiàn)高效率的檔案匯總管理。
1? 公文審批單主要引用到的iText類
(1)com.itextpdf.text.Document是iText類庫中最常用的類,其作用是可以使用它創(chuàng)建一個PDF實例,后續(xù)可以通過open、add、close等方法對創(chuàng)建的實例進行操作。
(2)com.itextpdf.text.Font是iText類庫的字體設(shè)置類,其中包括字體大小、字體樣式、字體顏色等設(shè)置。
(3)com.itextpdf.text.PageSize可以根據(jù)實際需求設(shè)置版面的大小,比如A4、A5、版面橫向或者縱向等信息。
(4)com.itextpdf.text.pdf.PdfWriter類可以建立一個與Document類實例關(guān)聯(lián)的書寫器(Writer)。
(5)com.itextpdf.text.Paragraph類可以創(chuàng)建一個段落,并可以設(shè)置段落的縮進、文本的對齊方式等內(nèi)容。
(6)com.itextpdf.text.pdf.PdfPTable類可以創(chuàng)建一個表格實例,并可以設(shè)置各個列的寬度,以便后續(xù)進行自定義繪圖。
2? 在線生成公文審批單流程
(1)創(chuàng)建一個Document對象,并設(shè)置Document對象的頁面尺寸。
Document mydocument=new Document(PageSize.A4);
(2)通過PdfWriter靜態(tài)類的getInstance()方法得到對象實例,并可以直接關(guān)聯(lián)Document類實例和文件輸出類。
PdfWriter pwriter = PdfWriter.getInstance(mydocument, new FileOutputStream("PDF存儲路徑及名稱.PDF"));
(3)打開文檔。
mydocument.open();
(4)iText提供兩個創(chuàng)建表格的類,其中Table類通常用來實現(xiàn)簡單表格,而PdfPTable類通常用來實現(xiàn)比較復(fù)雜的表格,該文主要圍繞PdfPTable類進行相關(guān)操作。在創(chuàng)建PdfPTable對象時,需要注意參數(shù)只需指定列數(shù),不用指定行數(shù),要設(shè)置表格的列寬可以通過定義數(shù)組,并把數(shù)組作為setWidths()方法的參數(shù)進行各列寬整體設(shè)置。同時,為了整個表格能夠填充整個版面,可以用setWidthPercentage(float widthPercentage)方法設(shè)置表在頁面中所占的寬度百分比。
PdfPTable NewTable = new PdfPTable(4);//創(chuàng)建PdfPTable對象
int ColWidth[] = {40,60,40,60};//定義列寬數(shù)組
NewTable.setWidths(ColWidth);//設(shè)置列寬
baseTable.setWidthPercentage(100);//定義頁面中所占的寬度百分比
(5)根據(jù)企業(yè)公文歸檔的字體樣式,可以通過BaseFont類創(chuàng)建一個新的字體,并通過Font類定義字體樣式、大小、顏色等內(nèi)容。
BaseFont bfont = BaseFont.createFont("c:\\windows\\fonts\\微軟雅黑.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font fontStyle = new Font(bfont, 24, Font.BOLD);
fontStyle.setColor(BaseColor.RED);
(6)表格創(chuàng)建好之后,則需要給前面創(chuàng)建好的baseTable對象添加單元格和合并單元格。其中添加單元格可以通過addCell(Object object)方法進行添加,其Object對象可以是PdfPcell、Image、String等信息,合并單元格可以通過PdfPCell類提供的setColspan(int colspan)方法。為了使單元格對象內(nèi)容比較整齊,還可以引用setVerticalAlignment(int verticalAlignment)方法設(shè)置單元格的垂直對齊方式和setHorizontalAlignment(int horizontalAlignment)方法設(shè)置單元格的水平對齊方式。
PdfPCell newCellTitle=new PdfPCell(new Paragraph("文件標(biāo)題", fontStyle));//新建一個存放段落內(nèi)容的單元格
PdfPCell newCellSubject=new PdfPCell(new Paragraph(doc.get("SUBJECT"), fontStyle));//獲取數(shù)據(jù)源數(shù)據(jù),并存放到單元格中
newCellSubject.setColspan(3);//合并單元格
NewTable.addCell(newCellTitle);//添加到表格對象中
NewTable.addCell(newCellSubject);//添加到表格對象中
newCellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);//設(shè)置單元格垂直居中
newCellSubject.setVerticalAlignment(Element.ALIGN_MIDDLE);
newCellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);//設(shè)置單元格水平居中
newCellSubject.setHorizontalAlignment(Element.ALIGN_CENTER);
(7)在OA公文審批單中,一個單元格需要包括多條用戶審批記錄,如果每條審批記錄都存放到各自單元格中,會大大影響表格的美觀性和浪費頁面的空間。為了解決這個問題,可以使用Paragraph類創(chuàng)建一個新的字段,利用循環(huán)語句把多條審批記錄匯總到Paragraph對象中,然后再填充到單元格中。
PdfPCell spyjCell=new PdfPCell();
Paragraph Spyj=new Paragraph("",fontStyle);
ResultSet Spjl=Rdb.getResultSet(SQL);
while(Spjl.next()){Spyj.add(new Chunk(Spjl.getString("REMARK")+"\n"));
Spyj.add(new Chunk(SpjlgetString("DEPTNAME")+"\n"));
spyjCell.addElement(Spyj);
(8)為確保OA公文歸檔的審批單保密性,可以通過PdfWriter類的setEncryption(byte[] userPassword, byte[] ownerPassword, int permissions, int encryptionType)方法對在線生成的PDF進行加密和權(quán)限設(shè)置,其中userPassword參數(shù)為用戶密碼,ownerPassword參數(shù)為所有者密碼,這兩部分可以理解為管理員密碼和用戶密碼,因此,在設(shè)置這兩個密碼的時候,往往會將所有者密碼的權(quán)限級別設(shè)置的更高,而用戶密碼的權(quán)限是“只讀”。
pwriter.setEncryption("userpassword".getBytes(),"ownerPassword".getBytes(),PdfWriter.ALLOW_COPY, PdfWriter.STANDARD_ENCRYPTION_128);
(9)根據(jù)OA公文審批單的要求。
mydocument.add(NewTable;
(10)關(guān)閉文檔。
mydocument.close();
3? 結(jié)語
該文主要討論引用iText類庫實現(xiàn)OA公文流程審批意見的歸類匯總及在線生成公文審批單的相關(guān)操作步驟。實現(xiàn)紙質(zhì)審批表單到電子審批表單的轉(zhuǎn)變,從而改善實際業(yè)務(wù)中復(fù)雜的紙質(zhì)公文歸檔流程,減輕了檔案管理人員的工作量,也大大節(jié)約了企業(yè)的紙質(zhì)資源。同時,也大大提高了公文借閱、查閱的效率。
參考文獻
[1] 崔永,王建新.淺議基于Java的PDF文檔生成[J].電腦知識與技術(shù),2011(24):5923-5924.
[2] 丁振凡,王小明,吳小元,等.利用iText包實現(xiàn)Java報表打印[J].微型機與應(yīng)用,2012(18):84-86.
[3] 胡陽,鄒海.基于iTextSharp的報表打印技術(shù)[J].計算機與現(xiàn)代化,2011(1):60-62.