今天主要介绍如何使用itextpdf生成表格式的pdf,在实际项目中也非常常用,首先举一个非常简单的例子,熟悉一下生成表格的基本步骤和流程:

public static void createSimpleTable() throws IOException, DocumentException {Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream(DEST));document.open();PdfPTable table = new PdfPTable(5);for (int aw = 0; aw < 10; aw++) {// 构建每一格table.addCell("cell");}document.add(table);document.close();
}

这是最简单的步骤,表格的每一格内容,风格都一样,效果如下:
当然,在实际使用中,很有可能需求不会简单,比如要求设置背景颜色,边框颜色,每行宽度也可能不一致,甚至跨行,跨列,添加图片等等,下面就举一个综合的例子,展示这些设置的用法,请看示例:

/*** 表格各种属性综合使用* * @throws IOException* @throws DocumentException*/
public static void createTablePdf() throws IOException, DocumentException {Document document = new Document();// 创建PdfWriter对象PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(DEST));// 打开文档document.open();// 添加表格,4列PdfPTable table = new PdfPTable(4);设置表格宽度比例为%100table.setWidthPercentage(100);// 设置表格的宽度table.setTotalWidth(500);// 也可以每列分别设置宽度table.setTotalWidth(new float[] { 160, 70, 130, 100 });// 锁住宽度table.setLockedWidth(true);// 设置表格上面空白宽度table.setSpacingBefore(10f);// 设置表格下面空白宽度table.setSpacingAfter(10f);// 设置表格默认为无边框table.getDefaultCell().setBorder(0);PdfContentByte cb = writer.getDirectContent();// 构建每个单元格PdfPCell cell1 = new PdfPCell(new Paragraph("Cell 1"));// 边框颜色cell1.setBorderColor(BaseColor.BLUE);// 设置背景颜色cell1.setBackgroundColor(BaseColor.ORANGE);// 设置跨两行cell1.setRowspan(2);// 设置距左边的距离cell1.setPaddingLeft(10);// 设置高度cell1.setFixedHeight(20);// 设置内容水平居中显示cell1.setHorizontalAlignment(Element.ALIGN_CENTER);// 设置垂直居中cell1.setVerticalAlignment(Element.ALIGN_MIDDLE);table.addCell(cell1);PdfPCell cell2 = new PdfPCell(new Paragraph("Cell 2"));cell2.setBorderColor(BaseColor.GREEN);cell2.setPaddingLeft(10);cell2.setHorizontalAlignment(Element.ALIGN_CENTER);cell2.setVerticalAlignment(Element.ALIGN_MIDDLE);table.addCell(cell2);PdfPCell cell3 = new PdfPCell(new Paragraph("Cell 3"));cell3.setBorderColor(BaseColor.RED);cell3.setPaddingLeft(10);// 设置无边框cell3.setBorder(Rectangle.NO_BORDER);cell3.setHorizontalAlignment(Element.ALIGN_CENTER);cell3.setVerticalAlignment(Element.ALIGN_MIDDLE);table.addCell(cell3);// 在表格添加图片Image cellimg = Image.getInstance(IMG1);PdfPCell cell4 = new PdfPCell(cellimg, true);cell4.setBorderColor(BaseColor.RED);cell4.setPaddingLeft(10);cell4.setFixedHeight(30);cell4.setHorizontalAlignment(Element.ALIGN_CENTER);cell4.setVerticalAlignment(Element.ALIGN_MIDDLE);table.addCell(cell4);// 增加一个条形码到表格Barcode128 code128 = new Barcode128();code128.setCode("14785236987541");code128.setCodeType(Barcode128.CODE128);// 生成条形码图片Image code128Image = code128.createImageWithBarcode(cb, null, null);// 加入到表格PdfPCell cellcode = new PdfPCell(code128Image, true);cellcode.setHorizontalAlignment(Element.ALIGN_CENTER);cellcode.setVerticalAlignment(Element.ALIGN_MIDDLE);cellcode.setFixedHeight(30);table.addCell(cellcode);PdfPCell cell5 = new PdfPCell(new Paragraph("Cell 5"));cell5.setPaddingLeft(10);// 设置占用列数cell5.setColspan(2);cell5.setHorizontalAlignment(Element.ALIGN_CENTER);cell5.setVerticalAlignment(Element.ALIGN_MIDDLE);table.addCell(cell5);document.add(table);// 关闭文档document.close();
}

上面需要注意的地方都有注释,相信通过这些设置基本应该能满足需求了,效果如下:

下面再给一个将一张图片作为表格背景的例子,请看代码:

/*** 创建以图片为背景的表格* * @throws IOException* @throws DocumentException*/
public static void createImgBackgroundTable() throws IOException, DocumentException {Document document = new Document();PdfWriter.getInstance(document, new FileOutputStream(DEST));document.open();// 一列PdfPTable table = new PdfPTable(1);// 宽度300table.setTotalWidth(300);table.setLockedWidth(true);PdfPCell cell = new PdfPCell();Font font = new Font(FontFamily.HELVETICA, 12, Font.NORMAL, GrayColor.GRAYWHITE);Paragraph p = new Paragraph("A cell with an image as background color.", font);cell.addElement(p);// 构造图片Image image = Image.getInstance(BACKGROUD_IMG);// 设置CellEventcell.setCellEvent(new ImageBackgroundEvent(image));// 按比例设置cell高度cell.setFixedHeight(200 * image.getScaledHeight() / image.getScaledWidth());table.addCell(cell);document.add(table);document.close();
}
static class ImageBackgroundEvent implements PdfPCellEvent {protected Image image;public ImageBackgroundEvent(Image image) {this.image = image;}public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) {try {PdfContentByte cb = canvases[PdfPTable.BACKGROUNDCANVAS];image.scaleAbsolute(position.getWidth(), position.getHeight());image.setAbsolutePosition(position.getLeft(), position.getBottom());cb.addImage(image);} catch (DocumentException e) {throw new ExceptionConverter(e);}}
}

效果图如下:

在itextpdf官网还有许多针对各种需求的例子,可以解决更多特殊的需求,地址:https://developers.itextpdf.com/itext-5-examples

今天就介绍到这里,后续还会推出一些比较实用的干货,请大家持续关注csdn官网博客和源代码社区公众号。

itextPDF生成表格的pdf相关推荐

  1. itextpdf 生成表格pdf+背景图片(可转图片)

    itextpdf生成表格pdf+背景图片(可转图片) 导入jar,manven引用 <dependency><groupId>com.itextpdf</groupId& ...

  2. 使用spire.office在Word中生成表格

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 使用spire.office在Word中生成表格 前言 一.动态生成表格 二.使用步骤 1.引入库 2.实例 总结 前言 遇到一个需要 ...

  3. java使用itext生成表格pdf文件

    以下主要讲解的是java使用itext生成表格pdf文件,话不多说,直接上代码 一.首先引入itext所使用的包 <dependency><groupId>com.itextp ...

  4. python使用fpdf生成各种样式pdf表格数据

    python使用fpdf生成各种样式pdf表格数据 目录

  5. java生成pdf表格_java在pdf中生成表格的方法

    1.目标 在pdf中生成一个可变表头的表格,并向其中填充数据.通过泛型动态的生成表头,通过反射动态获取实体类(我这里是User)的get方法动态获得数据,从而达到动态生成表格. 每天生成一个文件夹存储 ...

  6. 【Java中级篇】使用itextpdf生成PDF

    我们可以发现很多求职网站都会将我们录入的信息来生成一个PDF简历文件.所以我这里提供了用itextpdf生成的PDF的代码. 一.步骤 1.1.使用Adobe Acrobat Pro工具编辑PDF模板 ...

  7. java使用itextpdf生成PDF批量打印荣誉证书(指定位置输出文字)

    最近公司项目有个需求,批量打印荣誉证书,一开始尝试过传统的网络打印,控件打印,JS调用浏览器打印方法,遇到各种问题,比如定位不准,分页问题,​​缩放问题等.然后就自己研究,整理了一套打印方案,项目已测 ...

  8. java用itextPDF生成PDF文件保存至本地并上传至ftp服务器

    标题java用itextPDF生成PDF文件保存至本地并上传至ftp服务器 所需jar :itext-asian-5.2.0.jar,itextpdf-5.5.5.jar,commons-net-3. ...

  9. go语言web开发系列之二十二:用signintech/gopdf库生成带有图片和表格的pdf

    一,安装需要用到的库: 1,gopdf库的地址: https://github.com/signintech/gopdf 2,gopdf库安装的命令: liuhongdi@ku:~$ go get - ...

  10. reportlab 库生成带有表格的PDF报表文件

    用reportlab 库生成PDF文件的确很方便,对于简单的PDF文件的生成,可以直接使用最基本的一些drawXXX()方法来实现,具有可参见我的另一篇文章(https://blog.csdn.net ...

最新文章

  1. win10安装MAYA失败,怎么强力卸载删除注册表并重新安装
  2. 日常生活小技巧 -- win10造字
  3. vue实现两个数组的合并
  4. 双向链表的操作(创建,插入,删除)
  5. 线性代数分块矩阵求逆矩阵_单位矩阵属性(AI = A)| 使用Python的线性代数
  6. linux下怎样看设备的中断号,Linux设备驱动的中断处理
  7. ajax child,如何在ajax上使用this.children
  8. dataobject java_Object类和@Data注解
  9. 最近运气不好。很不爽!!!!!
  10. 神经网络工具箱——nn.funtional、初始化策略
  11. mysql global_MySQL设置global变量和session变量的两种方法详解
  12. linux系统用虚拟光驱装win7,虚拟光驱安装win7系统步骤
  13. USART串口驱动SIM800L或者ESP8266
  14. vue4 跳转外部链接_vue项目跳转到外部链接
  15. 服务器装系统bios设置方法,重装系统时BIOS的设置方法
  16. k8s的Scheduler 原理(预选策略、优选策略)
  17. Spark Basics
  18. 正则匹配里面的(.*?)
  19. 动态规划——什么是动态规划?
  20. 上海控安入选首批工控安全防护能力贯标咨询机构名单

热门文章

  1. 【雨滴桌面】简洁桌面天气皮肤YcWea5.5,直接通过HTML文档获取天气数据,鼠标移入显示近三天天气,鼠标移出隐藏
  2. 利用LR做性能测试中出现的常见问题解决方案
  3. Wowza服务器系列(5):使用rtsp协议向wowza推流的wowoza配置方法
  4. H3C交换机设置与无线控制器时间同步
  5. 微信dat文件用什么软件打开方式_dat文件用什么打开 微信电脑图片dat转为jpg
  6. 智慧水务管理系统提升城市水务管理智慧化水平
  7. OLED SH1108 STM32 8080接口实际使用
  8. matlab中arma,ARMA模型的Matlab代码.doc
  9. 13、图灵机器人能力
  10. /etc/config/wireless解析