基于iText类库实现在线生成OA审批单的应用开发

2020-05-11 06:21张竖群
科技资讯 2020年7期

张竖群

摘  要:该文主要讨论iText类库在实现OA公文流程审批意见的归类汇总及在线生成公文审批单的相关操作步骤。实现纸质审批表单到电子审批表单的转变,从而改善实际业务中复杂的纸质公文归档流程,减轻了档案管理人员的工作量,也大大节约了企业的纸质资源。

关键词:OA公文审批单  iText  在线生成PDF

iText是SOURCEFORGE站点的一个项目,其主要功能是生成PDF文件,因其轻便、高效、易用等特点,被人常用在报表、公文审批单、电子账单等方面。该文主要讨论其在办公自动化系统(以下简称OA)中如何自定义归类汇总OA公文流程审批意见并且在线生成公文审批单和对公文审批单进行加密和权限设置,从而大大减轻了档案管理人员的工作,实现高效率的档案汇总管理。

1  公文审批单主要引用到的iText类

(1)com.itextpdf.text.Document是iText类库中最常用的类,其作用是可以使用它创建一个PDF实例,后续可以通过open、add、close等方法对创建的实例进行操作。

(2)com.itextpdf.text.Font是iText类库的字体设置类,其中包括字体大小、字体样式、字体颜色等设置。

(3)com.itextpdf.text.PageSize可以根据实际需求设置版面的大小,比如A4、A5、版面横向或者纵向等信息。

(4)com.itextpdf.text.pdf.PdfWriter类可以建立一个与Document类实例关联的书写器(Writer)。

(5)com.itextpdf.text.Paragraph类可以创建一个段落,并可以设置段落的缩进、文本的对齐方式等内容。

(6)com.itextpdf.text.pdf.PdfPTable类可以创建一个表格实例,并可以设置各个列的宽度,以便后续进行自定义绘图。

2  在线生成公文审批单流程

(1)创建一个Document对象,并设置Document对象的页面尺寸。

Document mydocument=new Document(PageSize.A4);

(2)通过PdfWriter静态类的getInstance()方法得到对象实例,并可以直接关联Document类实例和文件输出类。

PdfWriter pwriter = PdfWriter.getInstance(mydocument, new FileOutputStream("PDF存储路径及名称.PDF"));

(3)打开文档。

mydocument.open();

(4)iText提供两个创建表格的类,其中Table类通常用来实现简单表格,而PdfPTable类通常用来实现比较复杂的表格,该文主要围绕PdfPTable类进行相关操作。在创建PdfPTable对象时,需要注意参数只需指定列数,不用指定行数,要设置表格的列宽可以通过定义数组,并把数组作为setWidths()方法的参数进行各列宽整体设置。同時,为了整个表格能够填充整个版面,可以用setWidthPercentage(float widthPercentage)方法设置表在页面中所占的宽度百分比。

PdfPTable NewTable = new PdfPTable(4);//创建PdfPTable对象

int ColWidth[] = {40,60,40,60};//定义列宽数组

NewTable.setWidths(ColWidth);//设置列宽

baseTable.setWidthPercentage(100);//定义页面中所占的宽度百分比

(5)根据企业公文归档的字体样式,可以通过BaseFont类创建一个新的字体,并通过Font类定义字体样式、大小、颜色等内容。

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)表格创建好之后,则需要给前面创建好的baseTable对象添加单元格和合并单元格。其中添加单元格可以通过addCell(Object object)方法进行添加,其Object对象可以是PdfPcell、Image、String等信息,合并单元格可以通过PdfPCell类提供的setColspan(int colspan)方法。为了使单元格对象内容比较整齐,还可以引用setVerticalAlignment(int verticalAlignment)方法设置单元格的垂直对齐方式和setHorizontalAlignment(int horizontalAlignment)方法设置单元格的水平对齐方式。

PdfPCell newCellTitle=new PdfPCell(new Paragraph("文件标题", fontStyle));//新建一个存放段落内容的单元格

PdfPCell newCellSubject=new PdfPCell(new Paragraph(doc.get("SUBJECT"), fontStyle));//获取数据源数据,并存放到单元格中

newCellSubject.setColspan(3);//合并单元格

NewTable.addCell(newCellTitle);//添加到表格对象中

NewTable.addCell(newCellSubject);//添加到表格对象中

newCellTitle.setVerticalAlignment(Element.ALIGN_MIDDLE);//设置单元格垂直居中

newCellSubject.setVerticalAlignment(Element.ALIGN_MIDDLE);

newCellTitle.setHorizontalAlignment(Element.ALIGN_CENTER);//设置单元格水平居中

newCellSubject.setHorizontalAlignment(Element.ALIGN_CENTER);

(7)在OA公文审批单中,一个单元格需要包括多条用户审批记录,如果每条审批记录都存放到各自单元格中,会大大影响表格的美观性和浪费页面的空间。为了解决这个问题,可以使用Paragraph类创建一个新的字段,利用循环语句把多条审批记录汇总到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进行加密和权限设置,其中userPassword参数为用户密码,ownerPassword参数为所有者密码,这两部分可以理解为管理员密码和用户密码,因此,在设置这两个密码的时候,往往会将所有者密码的权限级别设置的更高,而用户密码的权限是“只读”。

pwriter.setEncryption("userpassword".getBytes(),"ownerPassword".getBytes(),PdfWriter.ALLOW_COPY, PdfWriter.STANDARD_ENCRYPTION_128);

(9)根据OA公文审批单的要求。

mydocument.add(NewTable;

(10)关闭文档。

mydocument.close();

3  结语

该文主要讨论引用iText类库实现OA公文流程审批意见的归类汇总及在线生成公文审批单的相关操作步骤。实现纸质审批表单到电子审批表单的转变,从而改善实际业务中复杂的纸质公文归档流程,减轻了档案管理人员的工作量,也大大节约了企业的纸质资源。同时,也大大提高了公文借阅、查阅的效率。

参考文献

[1] 崔永,王建新.浅议基于Java的PDF文档生成[J].电脑知识与技术,2011(24):5923-5924.

[2] 丁振凡,王小明,吴小元,等.利用iText包实现Java报表打印[J].微型机与应用,2012(18):84-86.

[3] 胡阳,邹海.基于iTextSharp的报表打印技术[J].计算机与现代化,2011(1):60-62.