itextpdf生成表格的常见用法

itextpdf生成表格的常见用法随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。在前面的文章介绍了itextpdf基本用法和使用itextpdf生成图片,itextpdf还可以实现很多功能,非常强大,今天主要介绍如何使用itextpdf生成表格式的pdf,在实际项目中也非常常用,首先举一个非常…

大家好,又见面了,我是你们的朋友全栈君。

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

itextpdf生成表格的常见用法

在前面的文章介绍了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();
	}

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

	/**
	 * 表格各种属性综合使用
	 * 
	 * @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);
		 设置表格宽度比例为%100
		table.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();
	}

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

itextpdf生成表格的常见用法

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

	/**
	 * 创建以图片为背景的表格
	 * 
	 * @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);
		// 宽度300
		table.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);
		// 设置CellEvent
		cell.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生成表格的常见用法

在itextpdf官网还有许多针对各种需求的例子,可以解决更多特殊的需求,地址:The Leading PDF Library for Developers | iText

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147656.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 指令周期的四个阶段_总线周期和时钟周期

    指令周期的四个阶段_总线周期和时钟周期时钟周期时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250ns。由于时钟脉冲是计算机的基本工作脉冲…

    2025年6月17日
    0
  • linux0.11_linux vim编辑器

    linux0.11_linux vim编辑器前言所有的UnixLike系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的

    2022年7月28日
    3
  • oSIP开发者手册 oSIP开发者手册

    oSIP开发者手册 oSIP开发者手册摘要“会话发起协议(SessionInitiationProtocol-SIP)是一个应用层的信令控制协议。用于创建、修改和终止一个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发(例如:语音信箱)。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。”  ”TheSessionInitiationPro

    2022年6月16日
    21
  • 第三届“SLAM技术及应用”暑期学校视频分享(完整版)

    第三届“SLAM技术及应用”暑期学校视频分享(完整版)B站录播视频,up主上传资源:视频链接:https://www.bilibili.com/video/BV1Nk4y127qX?p=15所有课件PPT下载:http://www.cad.zju.edu.cn/home/gfzhang/download/2020-SLAM-Summer-School-slides.zip

    2022年9月26日
    0
  • python pymssql_Python模块-pymssql[通俗易懂]

    python pymssql_Python模块-pymssql[通俗易懂]Python默认的数据库是SQLlite,不过它对MySql以及SQLserver的支持也可以。如果想链接操作SQLserver,需使用第三方包pymssqlpymssql是一个Python的数据库接口,基于FreeTDS构建,对_mssql模块进行了封装,遵循Python的DBAPI规范,而FreeTDS是一个C语言连接sqlserver的公共开源库工作原理使用connect创建连接对象;…

    2022年6月16日
    37
  • 推荐top10的免费下载激活成功教程软件的网站

    推荐top10的免费下载激活成功教程软件的网站Z2ER资源网站Windows绝赞应用爱软客|专注常用软件绿色版、优化版、便携版精品绿色便携软件PortableAppC开心软件园-软件资讯、下载及使用交流Yanu-分享优秀、纯净、绿色、实用的精品软件。ChromeGAE唯一官方网站首页-大软坊-绿色数字未来|DigitalFuture产品类别Windows|极致分享Uptodow…

    2022年10月13日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号