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

相关文章

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

C#使用iText获取PDF的trailer数据的代码示例

《C#使用iText获取PDF的trailer数据的代码示例》开发程序debug的时候,看到了PDF有个trailer数据,挺有意思,于是考虑用代码把它读出来,那么就用到我们常用的iText框架了,所... 目录引言iText 核心概念C# 代码示例步骤 1: 确保已安装 iText步骤 2: C# 代码程

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

Android实现图片浏览功能的示例详解(附带源码)

《Android实现图片浏览功能的示例详解(附带源码)》在许多应用中,都需要展示图片并支持用户进行浏览,本文主要为大家介绍了如何通过Android实现图片浏览功能,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、项目背景详细介绍二、项目需求详细介绍三、相关技术详细介绍四、实现思路详细介绍五、完整实现代码

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的