随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

在前面的文章介绍了itextpdf基本用法和使用itextpdf生成图片,itextpdf还可以实现很多功能,非常强大,今天主要介绍如何使用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官网还有许多针对各种需求的例子,可以解决更多特殊的需求,地址:The Leading PDF Library for Developers | iText

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

itextpdf生成表格的常见用法相关推荐

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

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

  2. 高效办公——Excel表格-02篇(if函数常见用法 + 条件格式的使用)

    高效办公--Excel表格-02篇(if函数常见用法 + 条件格式的使用) 1. if单条件简单用法 1.1 简单需求 1.2 实现方法 2. if多条件使用(if-else的情况) 3. if多条件 ...

  3. python六:常见数据类型以及常见用法

    bool 布尔值 # 在bool中 0,()(空元祖),[](空列表),{}(空字典),None,""(空字符串) 都是False int 整形 float 浮点型 str 字符串 ...

  4. Java接口的几种常见用法

    接口(interface)对于面向对象编程来说是一个非常重要的概念.它是一系列方法的声明,却没有具体实现.有些编程语言,比如swift,把接口解释成"协议(protocol)",我 ...

  5. python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...

  6. C#中异步多线程的常见用法

    先来看几个基本概念(纯属个人见解,可能不准确): 进程:程序运行时,占用的全部运行资源的总和. 线程:线程是隶属于操作系统管理的,也可以有自己的计算资源,是程序执行流的最小单位.任何的操作都是由线程来 ...

  7. moment的常见用法总结

    前端很多场景都会涉及到对时间的处理,本文就对moment的常见用法做一些总结 指定语言:不然可能引起一些不必要的bug # 记得指定为对应的语言:moment.locale('zh-cn') 获取时间 ...

  8. JS正则表达式常见用法实例详解

    这篇文章主要介绍了JS正则表达式常见用法,结合实例形式分析了javascript元字符.分组符.修饰符.量词基本含义,并结合具体案例形式分析了javascript正则基本使用技巧,需要的朋友可以参考下 ...

  9. URL 重写的常见用法

    URL 重写的常见用法 创建数据驱动的 ASP.NET 网站时,通常会产生一个单个的网页,该网页基于查询字符串参数显示数据库数据的子集.例如,在设计电子商务站点时,您的任务之一便是允许用户浏览待售产品 ...

  10. 万字精华总结RocketMQ的常见用法(案例+图)

    概述 上篇博文,我们介绍了什么是RocketMQ,以及如何安装单机版的RocketMQ.在安装的过程了,我们主要安装了两个服务,NameServer和Broker.在发送和接收消息时,又接触了两个概念 ...

最新文章

  1. django框架使用mysql报错,及两种解决方法
  2. nginx上传文件大小
  3. Shell中的循环语句for、while、until实例讲解
  4. C#字符串及数组操作
  5. Notification大图标修改问题种种
  6. 电脑键盘上每个键的作用_眼看着淡出大众视野 键盘上Esc键的隐秘往事
  7. 幸运三角形 南阳acm491(dfs)
  8. jq跨域代理_jQuery中的跨域问题
  9. 后勤管理系统_还在用人工进行宿舍后勤管理?超级适用的宿舍管理系统推荐
  10. 眨眼快奔四了,大家的存款都有多少啊?
  11. 原生JS实现各种经典网页特效——Banner图滚动、选项卡切换、广告弹窗等
  12. phpstorm配置ftp,自动更新代码
  13. 使用python来刷csdn下载积分(一)
  14. MATLAB线条颜色
  15. Redis 内存数据库
  16. AAA标准-RADIUS协议
  17. 软考软件设计师下午真题-面向对象的程序设计与实现-组合设计模式(2011年上半年试题六))Java代码讲解
  18. java面试简历精通n_Java简历与面试
  19. 紫书刷题记录 UVa1572 自组合
  20. 如何批量将图片转换为 Excel 文档

热门文章

  1. c语言从入门到放弃(初识)
  2. logistic回归分析优点_一文详尽系列之逻辑回归
  3. SmartSVN忽略文件与文件夹的设置
  4. python语音识别终极指南_Python语音识别终极指南
  5. 啊哈C——学习2.5一起来找茬
  6. matlab写实对角矩阵,Matlab对角矩阵
  7. jquery div点击展开,点击收起,点击除了该div外任何地方,该div隐藏
  8. 广州地铁十三号线二期全线土建已完成53%,预计明年开通
  9. 基因工程-5-目的基因导入受体细胞的方法
  10. 熟练的mescroll