欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java使用itext 生成PDF,以生成个人简历为例

程序员文章站 2022-03-07 14:16:12
...

在日常的应用中经常会有需求,生成pdf或者word文档,常见的第三方工具有Apache的poi,以及itext等等,这里使用itext生成pdf,以个人简历作为示例,了解itextde 使用。

第0步:效果:

Java使用itext 生成PDF,以生成个人简历为例

第一步:引入依赖包:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.1</version>
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>font-asian</artifactId>
    <version>7.1.9</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>layout</artifactId>
    <version>7.1.9</version>
</dependency>

第二步:首先要创建文档Document,以及设置文档属性,如设置为A4纸等等,然后设置文档的保存路径,接下来就是开始编写文档的元素了,如段落,表格、标题等等。

完整代码如下:

package net.hlinfo.utils;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
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 PdfDemo {
	private static final String splitVline = "    |    ";
	private static final String TAB = "    ";
	//判断是否为16进制颜色
        public static boolean isHexColor(String color) {
    	    String HEX_PATTERN = "[0-9A-Fa-f]+";
            return color != null && color.length() == 6 && color.matches(HEX_PATTERN);
        }
        //将16进制颜色转换为Color对象
	private static BaseColor myColor(String hexColor) {
		hexColor = hexColor.replace("#", "");
		if(hexColor.length()==3) {
			hexColor = hexColor+hexColor;
		}
		if(!isHexColor(hexColor)) {
			hexColor = "ffffff";
		}
		int r= Integer.valueOf( hexColor.substring( 0, 2 ), 16 );
		int g= Integer.valueOf( hexColor.substring( 2, 4 ), 16 );
		int b= Integer.valueOf( hexColor.substring( 4, 6 ), 16 );
		return new BaseColor(r,g,b);
	}
	/**
	 * 设置字体,及大小
	 * @param size
	 * @param style
	 * @return
	 * @throws DocumentException
	 * @throws IOException
	 */
	private static Font myfont(float size,int style) throws DocumentException, IOException {
		   BaseFont bfChinese = BaseFont.createFont("/home/syst.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
         com.itextpdf.text.Font myFont = new com.itextpdf.text.Font(bfChinese, size, style);
         return myFont;
	}
	private static Font myfont(float size,int style,String color) throws DocumentException, IOException {
		BaseFont bfChinese = BaseFont.createFont("/home/syst.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
      com.itextpdf.text.Font myFont = new com.itextpdf.text.Font(bfChinese, size, style);
      myFont.setColor(myColor(color));
      return myFont;
	}
	/**
	 * 标题一
	 * @param text
	 * @return
	 * @throws DocumentException
	 * @throws IOException
	 */
	private static Paragraph h1(String text) throws DocumentException, IOException {
		Paragraph p = new Paragraph(text,myfont(16,Font.BOLD));
		//p.setSpacingBefore(30f);
		return p;
	}
	/**
	 * 带前导图的标题
	 * @param text 标题文字
	 * @return
	 * @throws Exception
	 */
	private static PdfPTable add_headtitle_1(String text) throws Exception{
		PdfPTable table = new PdfPTable(2);
		// 实现单元格跨页显示
		table.setSplitLate(false);
		table.setSplitRows(true);
        //设置每列宽度比例   
        int width_ht1[] = {2,98};
        table.setWidths(width_ht1); 
        table.getDefaultCell().setBorder(0);
          //带前导图(方法1)地址
        //String imagePath2 = "/home/hadoop/Pictures/line.png"; //图片为2px*11px
        //Image image21 = Image.getInstance(imagePath2); 
         //带前导图(方法2)用Java画
        BufferedImage image = new BufferedImage(2, 11,BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.setColor(new Color(83, 202, 195)); // #53cac3
        g.fillRect(0, 0, 2, 11);
        Image image21 = Image.getInstance(image,null);
          
        PdfPCell cellHt1img=new PdfPCell();
        cellHt1img.setBorder(0);
        cellHt1img.setImage(image21);
        cellHt1img.setFixedHeight(1);
        cellHt1img.setPaddingTop(5);
        PdfPCell cellHt1Content = new PdfPCell(h1(text));
        cellHt1Content.setBorder(0);
        //cell21.setLeading(5, 1);
        table.addCell(cellHt1img);
        table.addCell(cellHt1Content); 
        return table;
	}
	/**
	 * 空行
	 * @return
	 * @throws Exception
	 */
	private static Paragraph blankRow() throws Exception{
		Paragraph blankRow = new Paragraph(20f, " ", myfont(20,Font.BOLD)); 
		return blankRow;
	}
	/**
	 * 空行
	 * @param leading 行间距
	 * @return
	 * @throws Exception
	 */
	private static Paragraph blankRow(float leading) throws Exception{
		Paragraph blankRow = new Paragraph(leading, " ", myfont(20,Font.BOLD)); 
		return blankRow;
	}
	private static PdfPCell add_cell(Object obj,float lead) throws Exception{
		PdfPCell cell = new PdfPCell(new Paragraph(obj+"",myfont(12,Font.NORMAL)));
		cell.setBorder(0);
		cell.setLeading(lead, 1);
		return cell;
	}
	private static PdfPCell add_cell(Object obj,String color,float lead) throws Exception{
		color = color==null?"#000000":color;
		PdfPCell cell = new PdfPCell(new Paragraph(obj+"",myfont(12,Font.NORMAL,color)));
		cell.setBorder(0);
		cell.setLeading(lead, 1);
		return cell;
	}
	private static PdfPCell add_cell(Object obj,TBCell tbCell) throws Exception{
		PdfPCell cell = new PdfPCell(new Paragraph(obj+"",myfont(tbCell.getFontSize(),tbCell.getFontStyle(),tbCell.getTextColor())));
		cell.setBorder(tbCell.getBorder());
		cell.setLeading(tbCell.getLead(), 1);
		if(tbCell.getBgcolor()!=null && !"".equals(tbCell.getBgcolor())) {
			cell.setBackgroundColor(myColor(tbCell.getBgcolor()));
		}
		if(tbCell.getColspan()!=0) {
			cell.setColspan(tbCell.getColspan());
		}
		if(tbCell.getRowspan()!=0) {
			cell.setRowspan(tbCell.getRowspan());
		}
		if(tbCell.getBorderColor()!=null && !"".equals(tbCell.getBorderColor())) {
			cell.setBorderColor(myColor(tbCell.getBorderColor()));
		}
		if(tbCell.getIndent()>0) {
			cell.setIndent(tbCell.getIndent());
		}
		return cell;
	}
	private static PdfPCell add_cell_speace(TBCell tbCell) throws Exception{
		PdfPCell cell = new PdfPCell(new Paragraph(" ",myfont(tbCell.getFontSize(),tbCell.getFontStyle(),tbCell.getTextColor())));
		cell.setBorder(tbCell.getBorder());
		cell.setLeading(tbCell.getLead(), 1);
		if(tbCell.getBgcolor()!=null && !"".equals(tbCell.getBgcolor())) {
			cell.setBackgroundColor(myColor(tbCell.getBgcolor()));
		}
		if(tbCell.getColspan()!=0) {
			cell.setColspan(tbCell.getColspan());
		}
		if(tbCell.getRowspan()!=0) {
			cell.setRowspan(tbCell.getRowspan());
		}
		if(tbCell.getBorderColor()!=null && !"".equals(tbCell.getBorderColor())) {
			cell.setBorderColor(myColor(tbCell.getBorderColor()));
		}
		if(tbCell.getIndent()>0) {
			cell.setIndent(tbCell.getIndent());
		}
		return cell;
	}
	/**
	 * 工作经验主体方法
	 * @param doc Document对象
	 * @throws Exception
	 */
	private static void add_workExpTable(Document doc) throws Exception{
		PdfPTable workExpTable = new PdfPTable(1);
		// 实现单元格跨页显示
		workExpTable.setSplitLate(false);
		workExpTable.setSplitRows(true);
		int workExpTableWidth[] = {100};
		workExpTable.setWidths(workExpTableWidth);
		workExpTable.getDefaultCell().setBorder(0);
		TBCell tbcs1= TBCell.NEW().bgcolor("#eee").lead(5).borderColor("#eee").fontStyle(Font.BOLD);
		TBCell tbcs2= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).fontStyle(Font.BOLD);
		TBCell tbcs3= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1);
		TBCell tbcs4= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).indent(20);
		TBCell tbcs5= TBCell.NEW().bgcolor("#eee").lead(1).borderColor("#eee").colspan(2).rowspan(1);
		workExpTable.addCell(add_cell("贵州大数据发展集团", tbcs1));
		StringBuffer sbf = new StringBuffer();
		sbf.append("2019年10月-2020年10月");
		sbf.append(splitVline);
		sbf.append("项目经理");
		sbf.append(splitVline);
		sbf.append("10k~15k");
		sbf.append(splitVline);
		sbf.append("互联网产品经理");
		sbf.append(splitVline);
		sbf.append("计算机科学与技术");
		workExpTable.addCell(add_cell(sbf.toString(),tbcs4));
		workExpTable.addCell(add_cell("工作描述:",tbcs2));
		StringBuffer sbd = new StringBuffer();
		sbd.append("在公司参与营销中心财务系统的设计与开发。\n" + 
				"系统基于spring cloud的微服务平台,前端是使用vue框架,后台使用spring cloud与Mybatis,前后台使用json数据交换。还使用了mysql分布式数据库,Oracle数据库以及redis集群,\n" + 
				"系统使用docker容器部署。使用git代码管理,maven构建系统,devops自动化部署");
		workExpTable.addCell(add_cell(sbd.toString(),tbcs4));
		workExpTable.addCell(add_cell_speace(tbcs5));
		doc.add(workExpTable);
		doc.add(blankRow(5));
	}
	/**
	 * 项目经验主体
	 * @param doc Document对象
	 * @throws Exception
	 */
	private static void add_projectExpTable(Document doc) throws Exception{
		PdfPTable workExpTable = new PdfPTable(1);
		// 实现单元格跨页显示
		workExpTable.setSplitLate(false);
		workExpTable.setSplitRows(true);
		int workExpTableWidth[] = {100};
		workExpTable.setWidths(workExpTableWidth);
		workExpTable.getDefaultCell().setBorder(0);
		TBCell tbcs1= TBCell.NEW().bgcolor("#eee").lead(5).borderColor("#eee").fontStyle(Font.BOLD);
		TBCell tbcs2= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).fontStyle(Font.BOLD);
		TBCell tbcs3= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1);
		TBCell tbcs4= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).indent(20);
		TBCell tbcs5= TBCell.NEW().bgcolor("#eee").lead(1).borderColor("#eee").colspan(2).rowspan(1);
		workExpTable.addCell(add_cell("基于人工智能的智慧校园平台", tbcs1));
		StringBuffer sbf = new StringBuffer();
		sbf.append("项目时间:2019年11月11日0点-2019年11月20日24点");
		sbf.append(splitVline);
		sbf.append("担任角色:项目经理");
		sbf.append(splitVline);
		sbf.append("所属单位:贵州大数据研究所");
		workExpTable.addCell(add_cell(sbf.toString(),tbcs3));
		workExpTable.addCell(add_cell("项目描述:",tbcs2));
		StringBuffer sbd = new StringBuffer();
		sbd.append("在公司参与营销中心财务系统的设计与开发。\n" + 
				"系统基于spring cloud的微服务平台,前端是使用vue框架,后台使用spring cloud与Mybatis,前后台使用json数据交换。还使用了mysql分布式数据库,Oracle数据库以及redis集群,\n" + 
				"系统使用docker容器部署。使用git代码管理,maven构建系统,devops自动化部署");
		workExpTable.addCell(add_cell(sbd.toString(),tbcs4));
		workExpTable.addCell(add_cell("个人职责:",tbcs2));
		StringBuffer sbgr = new StringBuffer();
		sbgr.append("在公司参与营销中心财务系统的设计与开发。\n" + 
				"系统基于spring cloud的微服务平台,前端是使用vue框架,后台使用spring cloud与Mybatis,前后台使用json数据交换。还使用了mysql分布式数据库,Oracle数据库以及redis集群,\n" + 
				"系统使用docker容器部署。使用git代码管理,maven构建系统,devops自动化部署");
		workExpTable.addCell(add_cell(sbgr.toString(),tbcs4));
		workExpTable.addCell(add_cell_speace(tbcs5));
		doc.add(workExpTable);
		doc.add(blankRow(5));
	}
	/**
	 * 教育经历
	 * @param doc Document对象
	 * @throws Exception
	 */
	private static void add_eduExpTable(Document doc) throws Exception{
		PdfPTable workExpTable = new PdfPTable(1);
		// 实现单元格跨页显示
		workExpTable.setSplitLate(false);
		workExpTable.setSplitRows(true);
		
		int workExpTableWidth[] = {100};
		workExpTable.setWidths(workExpTableWidth);
		workExpTable.getDefaultCell().setBorder(0);
		TBCell tbcs1= TBCell.NEW().bgcolor("#eee").lead(5).borderColor("#eee").fontStyle(Font.BOLD);
		TBCell tbcs2= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).fontStyle(Font.BOLD);
		TBCell tbcs3= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1);
		TBCell tbcs4= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).indent(20);
		TBCell tbcs5= TBCell.NEW().bgcolor("#eee").lead(1).borderColor("#eee").colspan(2).rowspan(1);
		workExpTable.addCell(add_cell("贵州教育大学", tbcs1));
		StringBuffer sbf = new StringBuffer();
		sbf.append("专业:计算机科学与技术");
		sbf.append(splitVline);
		sbf.append("学历:本科");
		sbf.append(splitVline);
		sbf.append("时间:2015年9月-2019年7月");
		workExpTable.addCell(add_cell(sbf.toString(),tbcs3));
		workExpTable.addCell(add_cell_speace(tbcs5));
		doc.add(workExpTable);
		doc.add(blankRow(5));
	}
	/**
	 * 培训经历
	 * @param doc Document对象
	 * @throws Exception
	 */
	private static void add_trainExpTable(Document doc) throws Exception{
		PdfPTable workExpTable = new PdfPTable(1);
		// 实现单元格跨页显示
		workExpTable.setSplitLate(false);
		workExpTable.setSplitRows(true);
		int workExpTableWidth[] = {100};
		workExpTable.setWidths(workExpTableWidth);
		workExpTable.getDefaultCell().setBorder(0);
		TBCell tbcs1= TBCell.NEW().bgcolor("#eee").lead(5).borderColor("#eee").fontStyle(Font.BOLD);
		TBCell tbcs2= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).fontStyle(Font.BOLD);
		TBCell tbcs3= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1);
		TBCell tbcs4= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1).indent(20);
		TBCell tbcs5= TBCell.NEW().bgcolor("#eee").lead(1).borderColor("#eee").colspan(2).rowspan(1);
		workExpTable.addCell(add_cell("培训课程:hadoop高级工程师培训", tbcs1));
		StringBuffer sbf = new StringBuffer();
		sbf.append("时间:2015年9月-2019年7月");
		sbf.append(splitVline);
		sbf.append("培训机构:大数据培训中心");
		workExpTable.addCell(add_cell(sbf.toString(),tbcs3));
		workExpTable.addCell(add_cell_speace(tbcs5));
		doc.add(workExpTable);
		doc.add(blankRow(5));
	}
	/**
	 * 专业技能
	 * @param doc Document对象
	 * @throws Exception
	 */
	private static void add_majorSkillExpTable(Document doc) throws Exception{
		PdfPTable workExpTable = new PdfPTable(1);
		//配置单元格跨页显示
		workExpTable.setSplitLate(false);
		workExpTable.setSplitRows(true);
		
		int workExpTableWidth[] = {100};
		workExpTable.setWidths(workExpTableWidth);
		workExpTable.getDefaultCell().setBorder(0);
		TBCell tbcs3= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1);
		TBCell tbcs5= TBCell.NEW().bgcolor("#eee").lead(1).borderColor("#eee").colspan(2).rowspan(1);
		StringBuffer sbf = new StringBuffer();
		sbf.append("Linux");
		sbf.append(splitVline);
		sbf.append("5年");
		sbf.append(splitVline);
		sbf.append("熟练");
		workExpTable.addCell(add_cell(sbf.toString(),tbcs3));
		workExpTable.addCell(add_cell_speace(tbcs5));
		doc.add(workExpTable);
		doc.add(blankRow(5));
	}
	/**
	 * 语言能力
	 * @param doc Document对象
	 * @throws Exception
	 */
	private static void add_langSkillExpTable(Document doc) throws Exception{
		PdfPTable workExpTable = new PdfPTable(1);
		//配置单元格跨页显示
		workExpTable.setSplitLate(false);
		workExpTable.setSplitRows(true);
		
		int workExpTableWidth[] = {100};
		workExpTable.setWidths(workExpTableWidth);
		workExpTable.getDefaultCell().setBorder(0);
		TBCell tbcs3= TBCell.NEW().bgcolor("#eee").lead(10).borderColor("#eee").colspan(2).rowspan(1);
		TBCell tbcs5= TBCell.NEW().bgcolor("#eee").lead(1).borderColor("#eee").colspan(2).rowspan(1);
		StringBuffer sbf = new StringBuffer();
		sbf.append("英语");
		sbf.append(splitVline);
		sbf.append("听说能力:熟练");
		sbf.append(splitVline);
		sbf.append("读写能力:熟练");
		workExpTable.addCell(add_cell(sbf.toString(),tbcs3));
		workExpTable.addCell(add_cell_speace(tbcs5));
		doc.add(workExpTable);
		doc.add(blankRow(5));
	}
	/**
	 * 资格证书 
	 * @param doc Document对象
	 * @throws Exception
	 */
	private static void add_certExpTable(Document doc) throws Exception{
		PdfPTable workExpTable = new PdfPTable(1);
		int workExpTableWidth[] = {100};
		workExpTable.setWidths(workExpTableWidth);
		workExpTable.getDefaultCell().setBorder(0);
		TBCell tbcs3= TBCell.NEW().lead(10).colspan(2).rowspan(1);
		TBCell tbcs5= TBCell.NEW().lead(1).colspan(2).rowspan(1);
		StringBuffer sbf = new StringBuffer();
		sbf.append("证书名称: HCIP华为认证ICT高级工程师");
		sbf.append(splitVline);
		sbf.append("获得时间:2019年10月");
		workExpTable.addCell(add_cell(sbf.toString(),tbcs3));
		//String certImgPath = "http://www.ynbdqn.cn/DianNaoPeiXun/UploadFiles_7627/201011/2010111610590444.jpg";
		String certImgPath = "/home/hadoop/Pictures/cert.jpeg";
		Image certImg = Image.getInstance(certImgPath); 
		//设置图片缩放(让超过文档宽度的图片自适应宽度)
		float imgWidth = certImg.getScaledWidth();
		BigDecimal bdiw = new BigDecimal("480").divide(new BigDecimal(imgWidth),2, RoundingMode.HALF_UP);
		BigDecimal bdrs = bdiw.multiply(new BigDecimal("100"));
		certImg.scalePercent(bdrs.floatValue());
		PdfPCell cellCert=new PdfPCell();
		cellCert.setBorder(0);
		cellCert.setImage(certImg);
		workExpTable.addCell(add_cell_speace(tbcs5));
		workExpTable.addCell(cellCert);
		workExpTable.addCell(add_cell_speace(tbcs5));
		doc.add(workExpTable);
		doc.add(blankRow(5));
	}
    public static void main(String[] args) {
    	try
    	{
                //创建文档
    		Document document = new Document(PageSize.A4,5, 5, 36, 36);
                //设置文档保存路径
    		PdfWriter.getInstance(document, new FileOutputStream("/home/demo.pdf"));
    		document.open();
    		Paragraph title = new Paragraph(18f, "个人简历", myfont(22,Font.BOLD));
			title.setAlignment(Element.ALIGN_CENTER);
			document.add(title);
			document.add(blankRow(30));
			//基本信息
			PdfPTable tbBaseInfo = new PdfPTable(2);
			PdfPCell cell11 = new PdfPCell(new Paragraph("林黛玉",myfont(18,Font.NORMAL)));
			cell11.setBorder(0);
			//cell11.setPaddingTop(5);
			cell11.setPaddingBottom(10);
			cell11.setPaddingLeft(15);
			//头像
			String headImgPath = "/home/hadoop/Pictures/lindaiyu.jpg";
			Image headImg = Image.getInstance(headImgPath); 
			//设置每列宽度比例   
			int width11[] = {15,85};
			tbBaseInfo.setWidths(width11); 
			tbBaseInfo.getDefaultCell().setBorder(0);
			PdfPCell cellHimg=new PdfPCell();
			cellHimg.setBorder(0);
			cellHimg.setImage(headImg);
			cellHimg.setColspan(1);//合并单元格
			cellHimg.setRowspan(3);
			tbBaseInfo.addCell(cellHimg);
			tbBaseInfo.addCell(cell11);
			PdfPCell cell12 = new PdfPCell(new Paragraph("女"+splitVline+"18岁"+splitVline+"大观园潇湘馆"+splitVline+"6年工作经验",myfont(12,Font.NORMAL)));
			cell12.setPaddingBottom(5);
			cell12.setPaddingLeft(15);
			cell12.setBorder(0);
			tbBaseInfo.addCell(cell12);
			PdfPCell cell13 = new PdfPCell(new Paragraph("15700000000"+splitVline+"aaa@qq.com",myfont(12,Font.NORMAL)));
			cell13.setBorder(0);
			cell13.setPaddingLeft(15);
			tbBaseInfo.addCell(cell13);
			document.add(tbBaseInfo);
            //加入空行
			document.add(blankRow(30));
				
			document.add(add_headtitle_1("求职意向"));
			//加入空行
			document.add(blankRow(5));
			//求职意向主体
			PdfPTable careerTable = new PdfPTable(4);
			//配置单元格跨页显示
			careerTable.setSplitLate(false);
			careerTable.setSplitRows(true);
			
			int careerTableWidth[] = {15,35,15,35};
			careerTable.setWidths(careerTableWidth); 
			careerTable.addCell(add_cell("求职状态:", "#878787",10));
			careerTable.addCell(add_cell("在职考虑换工作",10));
			careerTable.addCell(add_cell("工作地点:", "#878787",10));
			careerTable.addCell(add_cell("中国-义龙新区",10));
			
			careerTable.addCell(add_cell("期望行业:", "#878787",10));
			careerTable.addCell(add_cell("事业单位/计算机",10));
			careerTable.addCell(add_cell("期望职业:", "#878787",10));
			careerTable.addCell(add_cell("项目经理/运维开发/信息安全工程师/系统架构师",10));
			
			careerTable.addCell(add_cell("期望薪资:", "#878787",10));
			careerTable.addCell(add_cell("10k~15k",10));
			careerTable.addCell(add_cell("工作性质:", "#878787",10));
			careerTable.addCell(add_cell("全职",10));
			document.add(careerTable);
			//加入空行
			document.add(blankRow());
			
			//工作经验
			document.add(add_headtitle_1("工作经验"));
			document.add(blankRow(5));
			//工作经验 主体 Begin
			add_workExpTable(document);
			add_workExpTable(document);
			//工作经验 主体 END
			
			document.add(blankRow());
			
			//项目经验
			document.add(add_headtitle_1("项目经验"));
			document.add(blankRow(5));
			add_projectExpTable(document);
			
			document.add(blankRow());
			//教育经历
			document.add(add_headtitle_1("教育经历"));
			document.add(blankRow(5));
			add_eduExpTable(document);
			
			document.add(blankRow());
			//培训经历
			document.add(add_headtitle_1("培训经历"));
			document.add(blankRow(5));
			add_trainExpTable(document);
			
			document.add(blankRow());
			//专业技能
			document.add(add_headtitle_1("专业技能"));
			document.add(blankRow(5));
			add_majorSkillExpTable(document);
			
			document.add(blankRow());
			//语言能力
			document.add(add_headtitle_1("语言能力"));
			document.add(blankRow(5));
			add_langSkillExpTable(document);
			
			document.add(blankRow());
			//资格证书
			document.add(add_headtitle_1("资格证书 "));
			document.add(blankRow(5));
			add_certExpTable(document);
			
			document.close();
          System.out.println("创建成功");
    	} catch (Exception ex){
          ex.printStackTrace();
        }
    }
}

其中TBCell类用于链式设置文档元素的属性(如颜色、边框、字体大小等):

package net.hlinfo.utils;

import com.itextpdf.text.Font;

public class TBCell {
	private int border=0;
	private String textColor="#000000";
	private float lead=0;
	private float fontSize=12;
	private String bgcolor=null;
	private int colspan=0;
	private int rowspan=0;
	private String borderColor;
	private int fontStyle=Font.NORMAL;
	private float indent=0;
	public float getIndent() {
		return indent;
	}
	public void setIndent(float indent) {
		this.indent = indent;
	}
	public int getFontStyle() {
		return fontStyle;
	}
	public void setFontStyle(int fontStyle) {
		this.fontStyle = fontStyle;
	}
	public String getBorderColor() {
		return borderColor;
	}
	public void setBorderColor(String borderColor) {
		this.borderColor = borderColor;
	}
	public int getColspan() {
		return colspan;
	}
	public void setColspan(int colspan) {
		this.colspan = colspan;
	}
	public int getRowspan() {
		return rowspan;
	}
	public void setRowspan(int rowspan) {
		this.rowspan = rowspan;
	}
	public int getBorder() {
		return border;
	}
	public void setBorder(int border) {
		this.border = border;
	}
	public String getTextColor() {
		return textColor;
	}
	public void setTextColor(String textColor) {
		this.textColor = textColor;
	}
	public float getLead() {
		return lead;
	}
	public void setLead(float lead) {
		this.lead = lead;
	}
	public float getFontSize() {
		return fontSize;
	}
	public void setFontSize(float fontSize) {
		this.fontSize = fontSize;
	}
	public String getBgcolor() {
		return bgcolor;
	}
	public void setBgcolor(String bgcolor) {
		this.bgcolor = bgcolor;
	}
	
	public static TBCell NEW() {
        return new TBCell();
    }
	
	public TBCell border(int border) {
		this.setBorder(border);
		return this;
	}
	public TBCell color(String color) {
		this.setTextColor(color);
		return this;
	}
	public TBCell lead(float lead) {
		this.setLead(lead);
		return this;
	}
	public TBCell fontSize(float fontSize) {
		this.setFontSize(fontSize);
		return this;
	}
	public TBCell bgcolor(String bgcolor) {
		this.setBgcolor(bgcolor);
		return this;
	}
	public TBCell colspan(int colspan) {
		this.setColspan(colspan);
		return this;
	}
	public TBCell rowspan(int rowspan) {
		this.setRowspan(rowspan);
		return this;
	}
	public TBCell borderColor(String borderColor) {
		this.setBorderColor(borderColor);
		return this;
	}
	public TBCell fontStyle(int fontStyle) {
		this.setFontStyle(fontStyle);
		return this;
	}
	public TBCell indent(float indent) {
		this.setIndent(indent);
		return this;
	}
	@Override
	public String toString() {
		return "TBCell [border=" + border + ", textColor=" + textColor + ", lead=" + lead + ", fontSize=" + fontSize
				+ ", bgcolor=" + bgcolor + ", colspan=" + colspan + ", rowspan=" + rowspan + ", borderColor="
				+ borderColor + ", fontStyle=" + fontStyle + "]";
	}
	
	
}

用到的字体syst.ttf为思源宋体,可以换为你喜欢的字体,