ITEXT-小图片并排显示,大图片按行显示

2023-10-29 18:58

本文主要是介绍ITEXT-小图片并排显示,大图片按行显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题场景

使用itext开发PDF过程中,有这样一个需求:有N个图片,每个图片大小不一,要求小图片每2个并排显示,大图片逐一按行显示。那么问题来了,图片多小算小?由API知image01.getWidth()与image01.getWeight()可以判断图片大小。

代码

需导入的jar包:itext-pdfa-5.5.6.jar、itext-xtra-5.5.6.jar、itext-5.5.6.jar、itext-asian.jar

/*** 添加图片(有并排需求)  图片高度必须一致* 思路:* 1.   通过图片的宽度是否小于pos值决定是否并排显示,是-> half; 否->all* 2.   新建一个2列的PdfTable* 3.   根据得到的half与all集合判断显示图片* @param imagesDNA             图片集合* @param size                  样品编号数量* @param reportCompile         信息载体,应用的时候可根据情况忽略* @param document* @param writer* @param baseFont1* @param yahei09* @param imageLocalAddr        本地图片前缀* @param pos                   图片宽度标准* @throws DocumentException* @throws MalformedURLException* @throws IOException*/private void addFulu(List<PdfImage> imagesDNA, int size, ReportCompile reportCompile, Document document, PdfWriter writer, BaseFont baseFont1,Font yahei09, String imageLocalAddr, Float pos) throws DocumentException, MalformedURLException, IOException {String bigTitle = "";String completeCheck = reportCompile.getCompleteCheck();if (completeCheck != null && completeCheck.equals("1") || completeCheck.equals("2")) {bigTitle = "a";} else if (completeCheck != null && completeCheck.equals("3")){bigTitle = "b";} else if (completeCheck != null && completeCheck.equals("4")){bigTitle = "c";}if (imagesDNA == null) {System.out.println("在图片库没有查到值.");PdfPTable table = new PdfPTable(1);PdfPCell cell0 = new PdfPCell();Paragraph p = new Paragraph(bigTitle, yahei09);p.setFirstLineIndent(-14f);p.setSpacingAfter(20f);cell0.addElement(p);String imagePath = imageLocalAddr + "error.png";Image image01 = Image.getInstance(imagePath);image01.scaleAbsoluteWidth(250); image01.scaleAbsoluteHeight(80); cell0.setBorder(0);cell0.setPaddingLeft(100f);cell0.addElement(image01);table.addCell(cell0);table.setSplitLate(false);table.setSplitRows(false);document.add(table);} else {PdfImage[] images = new PdfImage[imagesDNA.size() > size ? size : imagesDNA.size()];images = imagesDNA.toArray(images);List<String> flags = this.getFlagRowOrCol(imagesDNA, pos, imageLocalAddr);PdfPTable table = new PdfPTable(2);int halfFlagNum = 0;for (int i = 0; i < images.length; i++) {if (flags.get(i).equals("half")) {halfFlagNum++;}PdfPCell cell = new PdfPCell();if (i == 0) {Paragraph p = new Paragraph(bigTitle, yahei09);p.setSpacingAfter(14f);cell.addElement(p);}String imagePath = images[i].getImagePath();if (imagePath == null || imagePath == "") {imagePath = imageLocalAddr + "error.png";} else {imagePath = "http://file.xxx.com" + imagePath;}Image image01 = null;try {image01 = Image.getInstance(imagePath);} catch (FileNotFoundException e) {image01 = Image.getInstance(imageLocalAddr + "error.png");}if (flags.get(i).equals("half")) {image01.scalePercent(75);//设置对齐方式if (halfFlagNum % 2 == 1) {image01.setAlignment(Image.RIGHT);cell.setPaddingLeft(-21f);cell.setPaddingRight(15f);} else {cell.setPaddingLeft(35f);}cell.setRowspan(2);} else {if (image01.getWidth() <= pos) {image01.scalePercent(75);} else {image01.scalePercent(45);}image01.setAlignment(Image.MIDDLE);cell.setColspan(2);if (images.length == 1) {cell.setPaddingLeft(-21f);}}cell.addElement(image01);cell.setBorder(0);if (i > 0) {cell.setPaddingTop(32f);}table.addCell(cell);table.setSplitLate(false);table.setSplitRows(false);}document.add(table);}}/*** 获取标志位* 直接通过图片的宽度来判断是否并排显示* @param imagesDNA* @param pos               图片宽度标准,2个小图片放在一行* @param imageLocalAddr        * @return* @throws IOException * @throws MalformedURLException * @throws BadElementException */private List<String> getFlagRowOrCol(List<PdfImage> imagesDNA, Float pos, String imageLocalAddr) throws BadElementException, MalformedURLException, IOException {List<String> res = new ArrayList<String>();List<Float> list = new ArrayList<Float>();if (imagesDNA != null && imagesDNA.size() > 0) {for (int i = 0; i < imagesDNA.size(); i++) {String imagePath = imagesDNA.get(i).getImagePath();if (imagePath == null || imagePath == "") {imagePath = imageLocalAddr + "error.png";} else {imagePath = "http://file.xxx.com" + imagePath;}Image image01 = null;try {image01 = Image.getInstance(imagePath);} catch (FileNotFoundException e) {image01 = Image.getInstance(imageLocalAddr + "error.png");}list.add(image01.getWidth());}}if (list.size() <= imagesDNA.size()) {res = this.judgeRowOrCol(list, pos);}return res;}/*** 此方法用于判断是合并列还是合并行* @param list  判断依据* @param pos   连续两个在一起的且小于等于pos值的标志位为half,否则为all* @return*/private List<String> judgeRowOrCol(List<Float> list, Float pos) {List<String> res = new ArrayList<String>();String half = "half";String all = "all";int couple = 0;if (list != null && list.size() > 0) {for (int i = 0; i < list.size(); i++) {float current = list.get(i);if (i < list.size() - 1) {float next = list.get(i + 1);if (current <= pos) {couple++;if (next <= pos && couple != 2) {res.add(half);} else {if (couple == 2) {res.add(half);couple = 0;} else {res.add(all);}}} else {res.add(all);couple = 0;}} else {float previous = list.size() == 1 ? current : list.get(i - 1);if (previous <= pos && current <= pos) {if (list.size() == 1) {res.add(all);} else {if (couple == 0) {res.add(all);} else {res.add(half);}}} else {res.add(all);}}}}return res;}

这篇关于ITEXT-小图片并排显示,大图片按行显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/302688

相关文章

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比