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

相关文章

Java使用Spire.Doc for Java实现Word自动化插入图片

《Java使用Spire.DocforJava实现Word自动化插入图片》在日常工作中,Word文档是不可或缺的工具,而图片作为信息传达的重要载体,其在文档中的插入与布局显得尤为关键,下面我们就来... 目录1. Spire.Doc for Java库介绍与安装2. 使用特定的环绕方式插入图片3. 在指定位

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出

SpringBoot集成iText快速生成PDF教程

《SpringBoot集成iText快速生成PDF教程》本文介绍了如何在SpringBoot项目中集成iText9.4.0生成PDF文档,包括新特性的介绍、环境准备、Service层实现、Contro... 目录SpringBoot集成iText 9.4.0生成PDF一、iText 9新特性与架构变革二、环

Python多任务爬虫实现爬取图片和GDP数据

《Python多任务爬虫实现爬取图片和GDP数据》本文主要介绍了基于FastAPI开发Web站点的方法,包括搭建Web服务器、处理图片资源、实现多任务爬虫和数据可视化,同时,还简要介绍了Python爬... 目录一. 基于FastAPI之Web站点开发1. 基于FastAPI搭建Web服务器2. Web服务

利用Python将PDF文件转换为PNG图片的代码示例

《利用Python将PDF文件转换为PNG图片的代码示例》在日常工作和开发中,我们经常需要处理各种文档格式,PDF作为一种通用且跨平台的文档格式,被广泛应用于合同、报告、电子书等场景,然而,有时我们需... 目录引言为什么选择 python 进行 PDF 转 PNG?Spire.PDF for Python

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