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


相关推荐

  • android开发之AIDL用法_进程间通信原理详解

    转自http://blog.csdn.net/saintswordsman/article/details/5130947欢迎阅读本文,你能关注本文,你知道你需要进程间通信、需要AIDL(以及Binder),那么可以默认你对这些概念已经有了一些了解,你(大致)知道它们是什么,它们有什么用,所以为了节约大家的眼力和时间,在此我不复制粘贴网上泛滥的博客或者翻译冗长的android文档。

    2022年3月10日
    39
  • 十大推送方式整理_消息推送

    十大推送方式整理_消息推送百度云推送百度云推送可谓为用户体验而生,它实现了多项创新,并通过百度各大产品线千万级连接的可用性测试,迅速成为国内第三方云推送平台的标杆。据了解,在百度云推送正式发布之前,大部分的百度产品其实都已在使用百度云推送,例如百度框、百度网盘、百度地图、百度视频,已覆盖数亿的用户规模百度的技术品牌为百度云推送的先进性、大规模并发与稳定性提供了保障。腾讯信鸽推送互联网巨无霸腾讯的产品,咱有用户优

    2022年10月5日
    3
  • 【建议收藏】MySQL 三万字精华总结 —索引(二)[通俗易懂]

    【建议收藏】MySQL 三万字精华总结 —索引(二)

    2022年2月17日
    36
  • HibernateTemplate常用方法 .[通俗易懂]

    HibernateTemplate常用方法 .[通俗易懂]HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。下面是HibernateTemplate的常用方法简介:qvoiddelete(Objecten…

    2022年6月16日
    23
  • mysql 查看函数fsync_fsync()函数 Unix/Linux「建议收藏」

    mysql 查看函数fsync_fsync()函数 Unix/Linux「建议收藏」fsync,fdatasync-同步文件在内核态与存储设备内容简介#includeintfsync(intfd);intfdatasync(intfd);描述fsync()transfers(“flushes”)allmodifiedin-coredataof(i.e.,modifiedbuffercachepagesfor)thefilereferre…

    2022年5月18日
    47
  • ES6 模板字符串用法

    ES6 模板字符串用法解决字符串拼接问题使用模板字符串,可以省去‘+’拼接的操作,反引号“之间的视为一个整体view:<pv-html=”getHtml()”></p>method:getHtml(){leth1=`<h1>这是一个h1元素内容</h1>`returnh1}结果:通过表达式拼接对象属性使用${}表达式可以直接拼接对象属性的值:letuser={

    2022年8月21日
    7

发表回复

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

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