itext 生成 PDF(二)

 

利用itext创建PDF表格

学习生活中,经常需要制作或填写各种各样的表。这些表往往写成PDF文件,然后打印出来最为方便。那么,如果用Java写这样的PDF文件,该怎么做呢?

 

itext是一个处理该问题的不错的类库,首先需要将itext的jar包添加到开发环境中,接下来我演示在eclipse下用Java写出pdf文件。文件内容以下截图给出:

方法如下:

public class Test_登记表
{
    public static void main(String[] args) throws Exception 
    {
        //创建Document对象
        Document doc=new Document(PageSize.A4,0,0,50,0);
        
        //获得PdfWriter实例,将文档放到输出流上
        PdfWriter.getInstance(doc, new FileOutputStream("f:\\登记表.pdf"));
        
        //字体设置
            /*
             * 由于itext不支持中文,所以需要进行字体的设置,我这里让itext调用windows系统的中文字体,
             * 找到文件后,打开属性,将文件名及所在路径作为字体名即可。
             */
            //创建BaseFont对象,指明字体,编码方式,是否嵌入
        BaseFont bf=BaseFont.createFont("C:\\Windows\\Fonts\\simkai.ttf", BaseFont.IDENTITY_H, false);
            //创建Font对象,将基础字体对象,字体大小,字体风格
        Font font=new Font(bf,13,Font.NORMAL);
        Font font1=new Font(bf,15,Font.BOLD);
        
        
        /*
         * 添加7列的表格
         */
        
        //创建PdfTable对象
        PdfPTable table=new PdfPTable(7);
        
        //设置各列的列宽
        table.setTotalWidth(new float[]{100,100,100,100,100,100,80});
        
        
        //添加表格内容
        table.addCell(getPDFCell("姓名",font));
        table.addCell("");
        table.addCell(getPDFCell("性别",font));
        table.addCell("");
        table.addCell(getPDFCell("出生年月",font));
        table.addCell("");
        
        
        
        //添加图片
        Image img=Image.getInstance("Hebe (2).jpg",true);
        img.scaleAbsolute(57, 75);
        PdfPCell cell=new PdfPCell(img);
        cell.setRowspan(3);
        table.addCell(cell);
        
    
        table.addCell(getPDFCell("学历",font));
        table.addCell("");
        table.addCell(getPDFCell("婚否",font));
        table.addCell("");
        table.addCell(getPDFCell("民族",font));
        table.addCell("");
        
        
        table.addCell(getPDFCell("专业",font));
        cell=mergeCol("", font, 2);
        table.addCell(cell);
        
        table.addCell(getPDFCell("毕业学校",font));
        cell=mergeCol("", font, 2);
        table.addCell(cell);
        
        table.addCell(getPDFCell("健康状况",font));
        cell=mergeCol("", font, 2);
        table.addCell(cell);
        
        table.addCell(getPDFCell("户籍所在地",font));
        cell=mergeCol("", font, 3);
        table.addCell(cell);
        
        table.addCell(getPDFCell("政治面貌",font));
        cell=mergeCol("", font, 2);
        table.addCell(cell);
        table.addCell(getPDFCell("身份证号码",font));
        cell=mergeCol("", font, 3);
        table.addCell(cell);
        
        table.addCell(getPDFCell("参加工作时间",font));
        cell=mergeCol("", font, 2);
        table.addCell(cell);
        
        table.addCell(getPDFCell("有无住房",font));
        table.addCell("");
        
        table.addCell(getPDFCell("要求待遇",font));
        table.addCell("");
        
        table.addCell(getPDFCell("联系电话",font));
        cell=mergeCol("", font, 2);
        table.addCell(cell);
        
        table.addCell(getPDFCell("电子邮件",font));
        table.addCell("");
        
        table.addCell(getPDFCell("手机",font));
        table.addCell("");
        
        table.addCell(getPDFCell("联系地址",font));
        cell=mergeCol("", font, 6);
        table.addCell(cell);
        
        table.addCell(getPDFCell("现工作所在地",font));
        cell=mergeCol("", font, 6);
        table.addCell(cell);
        
        table.addCell(getPDFCell("离职原因",font));
        cell=mergeCol("", font, 6);
        table.addCell(cell);
        
        cell=mergeRow("简历", font, 6);
        table.addCell(cell);
        
        table.addCell(getPDFCell("起止时间",font));
        
        cell=mergeCol("学习/工作单位", font, 3);
        table.addCell(cell);
        
        cell=mergeCol("专业/职位", font, 2);
        table.addCell(cell);
        
        for(int i=0;i<5;i++)
        {
            
            table.addCell(getPDFCell(" ",font));
                
            cell=mergeCol(" ", font, 3);
            table.addCell(cell);
                
            cell=mergeCol(" ", font, 2);
            table.addCell(cell);
    
        }
        
        
        cell=mergeRow("家庭情况", font, 6);
        table.addCell(cell);
        
        table.addCell(getPDFCell("姓名",font));
        table.addCell(getPDFCell("关系",font));
        table.addCell(getPDFCell("年龄",font));
        table.addCell(getPDFCell("文化程度",font));
        cell=mergeCol("现工作单位", font, 2);
        table.addCell(cell);
        
        for(int i=0;i<5;i++)
        {
            
            table.addCell(getPDFCell(" ",font));
            table.addCell(getPDFCell(" ",font));
            table.addCell(getPDFCell(" ",font));
            table.addCell(getPDFCell(" ",font));
            cell=mergeCol(" ", font, 2);
            table.addCell(cell);
    
        }
        
        
        table.addCell(getPDFCell("特别提示",font));
        
        cell=mergeCol("1. 本人承诺保证所填写资料真实。 \n2. 保证遵守公司招聘有关规程和国家有关法规。  \n3. 请填写好招聘登记表,带齐照片、学历、职称证书的有效证件及相关复印件。\n", font, 6);
        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
        table.addCell(cell);
        
        
        
        //文档写入内容
        
        doc.open();
        Paragraph title=new Paragraph("招聘人员登记表\n\n\n",font1);
        title.setAlignment(Paragraph.ALIGN_CENTER);
        doc.add(title);
        doc.add(table);
        doc.close();
        
        
        
    }
 
    //合并行的静态函数
    public static PdfPCell mergeRow(String str,Font font,int i) {
        
        //创建单元格对象,将内容及字体传入
        PdfPCell cell=new PdfPCell(new Paragraph(str,font));
        //设置单元格内容居中
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        //将该单元格所在列包括该单元格在内的i行单元格合并为一个单元格
        cell.setRowspan(i);
        
        return cell;
    }
 
    //合并列的静态函数
    public static PdfPCell mergeCol(String str,Font font,int i) {
        
        PdfPCell cell=new PdfPCell(new Paragraph(str,font));
        cell.setMinimumHeight(25);
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        //将该单元格所在行包括该单元格在内的i列单元格合并为一个单元格
        cell.setColspan(i);
        
        return cell;
    }
 
    //获取指定内容与字体的单元格
    public static PdfPCell getPDFCell(String string, Font font) 
    {
        //创建单元格对象,将内容与字体放入段落中作为单元格内容
        PdfPCell cell=new PdfPCell(new Paragraph(string,font));
        
        cell.setHorizontalAlignment(Element.ALIGN_CENTER);
        cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
        
        //设置最小单元格高度
        cell.setMinimumHeight(25);
        return cell;
    }
 
}

 

posted @ 2019-01-24 17:11  luoye-tl  阅读(419)  评论(1编辑  收藏  举报