itext制作pdf表格

添加单元格

  • 把下面这几项顺次的加入到表格中,当一行充满时候自动换行到下一行
    PdfPTable table = new PdfPTable(3);  
    table.addCell("1.1");
    table.addCell("1.2");
    table.addCell("1.3");
    table.addCell("2.1");
    table.addCell("2.2");
    table.addCell("2.3");
  • 以上程序运行结果将显示三行二列的表格。
  • 添加单元格的内容还可以是以下几种形式。
public void addCell(PdfPCell cell);
public void addCell(PdfPTable table);
public void addCell(Phrase phrase);
public void addCell(String text);
public void addCell(Paragraph paragraph);
  • 本文用的是最后一种。

合并单元格

  • iText合并单元格的过程如下,首先创建一个cell,设置这个单元格的跨度,

  • 如果是横向合并,则通过

    cell.setColspan(n);  //n代表从当前单元格的位置开始,合并的单元格数
  • 如果是纵向合并,

    cell.setRowspan(n);//n代表从当前单元格的位置开始,合并的单元格数
  • 代码举例:(一开始是用数组添加单元格的,后来改成直接添加了,更简洁了)

    package com.pdf;

    import java.io.FileOutputStream;

    import com.itextpdf.text.Document;
    import com.itextpdf.text.Element;
    import com.itextpdf.text.Font;
    import com.itextpdf.text.Image;
    import com.itextpdf.text.Paragraph;
    import com.itextpdf.text.Phrase;
    import com.itextpdf.text.pdf.BaseFont;
    import com.itextpdf.text.pdf.PdfPCell;
    import com.itextpdf.text.pdf.PdfPTable;
    import com.itextpdf.text.pdf.PdfWriter;

    public class pdf_Table {
    public static void main(String[] args) {
    Document document = new Document();
    try {
    BaseFont bfChinese = BaseFont.createFont("C:\\Windows\\Fonts\\simkai.ttf",

    BaseFont.IDENTITY_H,false); // 中文处理
    Font titleChinese = new Font(bfChinese, 20, Font.BOLD);
    Font font = new Font(bfChinese, 20, Font.ITALIC);// 模板抬头的字体
    Font moneyFontChinese = new Font(bfChinese, 11, Font.ITALIC); // 币种和租金金额的小一号字体
    PdfWriter.getInstance(document,
    new FileOutputStream("text1.pdf"));
    document.open();
    PdfPTable table = new PdfPTable(1);//创建一个有1列的表格
    table.setTotalWidth(15);//设置表格的各列宽度
    PdfPCell cell1 = new PdfPCell(new Paragraph("招聘人员登记表", titleChinese));
    cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(cell1);
    document.add(table);
    float f[] = {2,3,2,3,2};
    PdfPTable table1 = new PdfPTable(5);
    table1.setTotalWidth(f);


    String str1[] = {"姓名","出生年月","婚否","专业","健康状况","政治面貌","家庭住址","简历","家庭情况"};
    String str2[] = {"性别","学历","名族","毕业学校","户籍所在地","身份证号","姓名","亲属关系","年龄","健康状况"};
    PdfPCell ce1 = null;
    PdfPCell ce2 = null;
    PdfPCell ce3 = null;

    ce1 = new PdfPCell(new Paragraph(str1[0],moneyFontChinese));
    ce1.setHorizontalAlignment(Element.ALIGN_CENTER);
    table1.addCell(ce1);
    table1.addCell("");
    ce2 = new PdfPCell(new Paragraph(str2[0],moneyFontChinese));
    ce2.setHorizontalAlignment(Element.ALIGN_CENTER);
    table1.addCell(ce2);
    table1.addCell("");
    ce3 = new PdfPCell(new Paragraph("照片",moneyFontChinese));
    ce3.setHorizontalAlignment(Element.ALIGN_CENTER);//水平居中
    ce3.setUseAscender(true);//垂直居中
    ce3.setVerticalAlignment(ce3.ALIGN_MIDDLE);//垂直居中
    ce3.setRowspan(4); //合并同一行的四个格
    Image img = Image.getInstance("E:\\我的电脑备份\\照片\\照片素材\\旅行\\长城\\IMG_20140727_095516.jpg");//选择图片
    // img.setAlignment(1);
    // img.scaleAbsolute(110,150);//控制图片大小
    ce3.setImage(img);
    table1.addCell(ce3);

    for(int i=1;i<4;i++){
    ce1 = new PdfPCell(new Paragraph(str1[i],moneyFontChinese));
    ce1.setHorizontalAlignment(Element.ALIGN_CENTER);
    table1.addCell(ce1);
    table1.addCell("");
    ce2 = new PdfPCell(new Paragraph(str2[i],moneyFontChinese));
    ce2.setHorizontalAlignment(Element.ALIGN_CENTER);
    table1.addCell(ce2);
    table1.addCell("");
    }
    for(int i=4;i<6;i++){
    ce1 = new PdfPCell(new Paragraph(str1[i],moneyFontChinese));
    ce1.setHorizontalAlignment(Element.ALIGN_CENTER);
    table1.addCell(ce1);
    table1.addCell("");
    ce2 = new PdfPCell(new Paragraph(str2[i],moneyFontChinese));
    ce2.setHorizontalAlignment(Element.ALIGN_CENTER);
    table1.addCell(ce2);
    ce3 = new PdfPCell(new Paragraph(""));
    ce3.setColspan(2); //合并同一行的2个格
    table1.addCell(ce3);
    }
    ce1 = new PdfPCell(new Paragraph(str1[6],moneyFontChinese));
    ce1.setHorizontalAlignment(Element.ALIGN_CENTER);
    table1.addCell(ce1);
    ce3 = new PdfPCell(new Paragraph(""));
    ce3.setColspan(4); //合并同一行的2个格
    table1.addCell(ce3);


    ce1 = new PdfPCell(new Paragraph(str1[8],moneyFontChinese));
    ce1.setHorizontalAlignment(Element.ALIGN_CENTER);
    ce1.setUseAscender(true);//垂直居中
    ce1.setVerticalAlignment(ce1.ALIGN_MIDDLE);//垂直居中
    ce1.setRowspan(5); //合并同一行的四个格
    table1.addCell(ce1);

    for(int i=0;i<4;i++){
    ce2 = new PdfPCell(new Paragraph(str2[i+6],moneyFontChinese));
    ce2.setHorizontalAlignment(Element.ALIGN_CENTER);
    table1.addCell(ce2);
    }
    for(int i=0;i<16;i++){
    table1.addCell(" ");
    }
    ce1 = new PdfPCell(new Paragraph(str1[7],moneyFontChinese));
    ce1.setMinimumHeight(90);
    ce1.setHorizontalAlignment(Element.ALIGN_CENTER);
    ce1.setUseAscender(true);//垂直居中
    ce1.setVerticalAlignment(ce1.ALIGN_MIDDLE);//垂直居中
    table1.addCell(ce1);
    ce2 = new PdfPCell(new Paragraph(" "));
    ce2.setColspan(4);
    table1.addCell(ce2);
    String str = "1.多说几句话身份和空间分割法与人文u影的交付该雕。"
    +"2.活动官方发布没办法长三角和环境事故。"
    + "3,白癜风是快捷方便和技术快递费";

    ce1 = new PdfPCell(new Paragraph("注意事项",moneyFontChinese));
    ce1.setMinimumHeight(90);
    ce1.setHorizontalAlignment(Element.ALIGN_CENTER);
    ce1.setUseAscender(true);//垂直居中
    ce1.setVerticalAlignment(ce1.ALIGN_MIDDLE);//垂直居中
    table1.addCell(ce1);
    ce2 = new PdfPCell(new Paragraph(str,moneyFontChinese));
    ce2.setHorizontalAlignment(Element.ALIGN_CENTER);
    ce2.setUseAscender(true);//垂直居中
    ce2.setVerticalAlignment(ce2.ALIGN_MIDDLE);//垂直居中
    ce2.setColspan(4);
    table1.addCell(ce2);

    // Image img = Image.getInstance("E:\\我的电脑备份\\照片\\照片素材\\旅行\\长城\\IMG_20140727_095516.jpg");//选择图片
    // img.setAlignment(1);
    // img.scaleAbsolute(100,100);//控制图片大小
    // img.setAbsolutePosition(0,200);//控制图片位置
    // table1.addCell(img);

    // ce3 = new PdfPCell(new Paragraph(""));
    // ce3.setColspan(4); //合并同一行的2个格
    // table1.addCell(ce3);
    // for(int i=1;i<9;i++){
    // if(i<6){
    // ce1[i] = new PdfPCell(new Paragraph(str1[i],moneyFontChinese));
    // ce1[i].setHorizontalAlignment(Element.ALIGN_CENTER);
    // ce2[i] = new PdfPCell(new Paragraph(""));
    // ce3[i] = new PdfPCell(new Paragraph(str2[i],moneyFontChinese));
    // ce3[i].setHorizontalAlignment(Element.ALIGN_CENTER);
    // ce4[i] = new PdfPCell(new Paragraph(""));
    // ce5[i] = new PdfPCell(new Paragraph(" "));
    // }
    // else {
    // ce1[i] = new PdfPCell(new Paragraph(str1[i],font));
    // ce1[i].setHorizontalAlignment(Element.ALIGN_CENTER);
    // ce2[i] = new PdfPCell(new Paragraph(""));
    // ce3[i] = new PdfPCell(new Paragraph(str2[i],font));
    // ce3[i].setHorizontalAlignment(Element.ALIGN_CENTER);
    // ce4[i] = new PdfPCell(new Paragraph(""));
    // ce5[i] = new PdfPCell(new Paragraph(""));
    // }
    // // document.add(table1[i]);
    // }
    //
    // // ce5[0].setRowspan(4);
    // ce4[4].setColspan(2); //合并同一行的两个格
    // ce4[5].setColspan(2);
    // ce2[6].setColspan(4); //合并同一行的四个格
    // ce2[7].setColspan(4);
    // ce2[8].setColspan(4);
    // for(int i=0;i<9;i++){
    // table1[i].addCell(ce1[i]);
    // table1[i].addCell(ce2[i]);
    // table1[i].addCell(ce3[i]);
    // table1[i].addCell(ce4[i]);
    // if(i>0)
    // table1[i].addCell(ce5[i]);
    // document.add(table1[i]);
    // }
    document.add(table1);
    document.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
  • 效果如下:

往期精彩文章