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

相关文章

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

将图片导入Python的turtle库的详细过程

《将图片导入Python的turtle库的详细过程》在Python编程的世界里,turtle库以其简单易用、图形化交互的特点,深受初学者喜爱,随着项目的复杂度增加,仅仅依靠线条和颜色来绘制图形可能已经... 目录开篇引言正文剖析1. 理解基础:Turtle库的工作原理2. 图片格式与支持3. 实现步骤详解第

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE