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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 理解和正确使用Java中的断言(assert)

    理解和正确使用Java中的断言(assert)随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)一、语法形式:Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion),它的语法形式有如下所示的两种形式:1、assertcondition;这…

    2022年7月25日
    16
  • 罗技g933使用教程_罗技键盘如何连接电脑

    罗技g933使用教程_罗技键盘如何连接电脑罗技K380蓝牙键盘是罗技比较经典的一款外设产品,最近,罗技新推出了k380芍药白和茱萸粉两种新配色,让我们来一起看一下。其中粉色介于粉色和裸色之间,相比粉色增加了一丝灰色。极客之选本次拿到的是白色版本,颜色也非亮白,而是与粉色类似较柔和,两种颜色整体都非常素雅,因此也适合在各种场合使用。外观上,罗技K380延续了一贯的设计风格,圆润的边框设计配合圆形按键,整体看起来非常小巧精致,不同…

    2022年10月16日
    2
  • 基于51单片机的八路抢答器设计_单片机八路抢答器课程设计

    基于51单片机的八路抢答器设计_单片机八路抢答器课程设计写一下寒假做的51小项目,本次是基于AT89C51的八路抢答器,课设水平难度。具体说明:硬件分为两部分,主持人主控部分和选手使用部分。可以实现:按动开始可以开启程序或者开启答题倒计时,按动复位可以实现归零;八个选手各有一个按键,按下即可抢答,与此同时,蜂鸣器响一秒钟,选手的LED点亮。在答题时间还剩十秒钟时,发出提示音,时间耗尽时,所有LED点亮,蜂鸣器鸣响。当抢答倒计时结束仍没有选手抢答,所有…

    2022年10月20日
    3
  • 10个JS常见算法题目

    10个JS常见算法题目1、冒泡排序调优(从小到大排序)2、输出九九乘法表3、输出水仙花数4、1–10的阶乘和5、输出1900年至2100年中的所有闰年6、输出10–100之间的所有素数7、1,2,3,4四个数字,能组合成多少种互不相同且没有重复的三位数8、取出四位数中的各个位上的数字9、猴子吃桃问题10、用星号输出菱形。源码如下:js算法题目练习&…

    2022年6月29日
    51
  • 浏览器支持H.265解码总结

    浏览器支持H.265解码总结文章目录引言问题解决方案3.1方案1:开发自己的浏览器3.2方案2:前端JS解码+canvas显示3.3方案3:前端WebAssembly转码+video显示3.4方案4:前端W

    2022年8月2日
    7
  • 免费pdf转word在线转换器[通俗易懂]

    免费pdf转word在线转换器[通俗易懂]免费pdf转word在线转换器   在办公环境下如何将PDF转换成Word,是不少上班族普遍需要了解的问题之一。面对上百份需要处理的文档,其实否不用安装专业的PDF转Word转换器,借助免费PDF转Word在线转换器就能轻松帮你搞定PDF转Word问题。  最新发布的迅捷免费pdf转word在线转换器,是目前转换效果最好的转换工具,能够轻松实现批量PDF文件的转换,对于个人或者企业用户来说

    2022年6月12日
    33

发表回复

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

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