当前位置:首页 > 实用技巧 >

插入图片时怎么显示照片(图片插入后怎么打开)

来源:原点资讯(www.yd166.com)时间:2023-07-30 17:22:02作者:YD166手机阅读>>

有时候我们在项目中需要生成pdf文件(),并且pdf中需要动态地显示需要的图片,使用JasperReport可以很便捷的完成我们的诉求。比如我们需要生成如下的pdf文件:

插入图片时怎么显示照片,图片插入后怎么打开(1)

文件中添加图片

接下来演示怎么实现的

设计模板

按自己的需求将image元素拖到指定的位置,拖拽image元素到报表设计区域的时候会让选择图片的资源路径,按默认配置即可,如下图

插入图片时怎么显示照片,图片插入后怎么打开(2)

含有图片的报表模板设计

调节图片大小,以及每行展示的数量(detail栏的元素会根据数据源去遍历展示),如下图:

插入图片时怎么显示照片,图片插入后怎么打开(3)

调整图片元素的位置

然后最重要的就是配置上图中的Expression表达式,即告诉框架要从哪里获取图片资源,这里我是通过字节数组输入流创建图片的,完整的Expression表达式如下,可以直接粘贴使用。说明:$ F{reportDescImage}是图片的字节数组对应的Base64编码后的字符串,所以表达式中要对$F{reportDescImage}进行Base64解码,转换为图片原来的字节数组,这样框架就可以渲染出图片了

new byteArrayInputStream(org.apache.commons.codec.binary.Base64.decodeBase64($F{reportDescImage}.getBytes())) 代码实现

核心代码如下:

public void exportReportOrder(Integer reportId, HttpservletResponse servletResponse) { //查询自己需要的业务数据 ReportOrderDetailVO detailVO = this.getReportOrderDetail(reportId); OutputStream outputStream; try { outputStream = servletResponse.getOutputStream(); String FileName = reportOrderConverter.getPdfFileName(detailVO); //设置http的文件类型及编码方式 servletResponse.setContentType("application/pdf;charset=utf-8"); //设置下载的文件名称 名称含有中文的话需要用URLEncoder进行编码 servletResponse.setHeader("content-disposition", "attachment;filename=" URLEncoder.encode(fileName, "utf-8")); Map<String, String> reportTypeToNameMap = reportTypeEnumService.getCodeToNameMap(); ExportFraudReportOrderResponse response = reportOrderConverter.assembleFraudReportOrder(detailVO, reportTypeToNameMap); //组装模板中需要的参数 用于填充模板中通过$P{xxx}声明的参数 Map<String, Object> params = reportOrderConverter.assembleReportParams(response); List<FraudReportOrderEvidenceImage> imageList = reportOrderConverter.getImageResources(detailVO); //设置JasperReport的数据源 我用的是Json类型的数据源(数据源中的数据用于填充模板中detail区域的通过$F{XXX}指定的参数) jsonDataSource jsonDataSource = new JsonDataSource(new ByteArrayInputStream(JSON.toJSONString(imageList).getBytes(StandardCharsets.UTF_8))); boolean hasImage = reportOrderConverter.hasImage(detailVO); if (hasImage) { fileGenerateService.generates(EnumFileMeta.PDF_4_FRAUD_REPORT, outputStream, params, jsonDataSource); } else { fileGenerateService.generates(EnumFileMeta.PDF_4_FRAUD_REPORT_WITHOUT_IMAGE, outputStream, params, jsonDataSource); } } catch (IOException io) { log.error("获取http输出流失败", io); throw new ServiceResponseException("获取http输出流失败"); } catch (Exception e) { log.error("生成报告单失败", e); throw new ServiceResponseException("生成报告单失败"); } } public List<FraudReportOrderEvidenceImage> getImageResources(ReportOrderDetailVO detailVO) { if (!this.hasImage(detailVO)) { return this.buildEmptyImage(); } List<String> imageUrls = detailVO.getResourceList().stream() .filter(f -> EnumResourceType.图片.getCode().equals(f.getResourceType())) .map(m -> { if (!StringUtils.startsWith(m.getResourceUrl(), HTTPS)) { return HTTPS m.getResourceUrl(); } return m.getResourceUrl(); }).collect(Collectors.toList()); log.info("image urls: {}", imageUrls); List<FraudReportOrderEvidenceImage> images = new ArrayList<>(); //将查询到的图片url按照报表模板中设置的图片每行的数量进行划分 // 模板中设置的一行为4个图片 所以此处我们以4为单位划分 Lists.partition(imageUrls, 4).forEach(items -> { //对应每行图片的model FraudReportOrderEvidenceImage image = new FraudReportOrderEvidenceImage(); for (int i = 0; i < items.size(); i ) { //使用Spring的RestTemplate API去读取图片 读取图片的字节数组 byte[] imageBytes = restTemplate.getForObject(items.get(i), byte[].class); if (i == 0) { image.setReportDescImage(this.byte2String(imageBytes)); continue; } if (i == 1) { image.setReportDescImage2(this.byte2String(imageBytes)); continue; } if (i == 2) { image.setReportDescImage3(this.byte2String(imageBytes)); continue; } if (i == 3) { image.setReportDescImage4(this.byte2String(imageBytes)); } } images.add(image); }); return images; } public boolean hasImage(ReportOrderDetailVO detailVO) { if (Objects.isNull(detailVO) || CollectionUtils.isEmpty(detailVO.getResourceList())) { return false; } List<String> imageUrls = detailVO.getResourceList().stream() .filter(f -> EnumResourceType.图片.getCode().equals(f.getResourceType())) .map(m -> m.getResourceUrl()) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(imageUrls)) { return false; } return true; } private List<FraudReportOrderEvidenceImage> buildEmptyImage() { FraudReportOrderEvidenceImage image = new FraudReportOrderEvidenceImage(); byte[] empty = new byte[0]; String emptyImage = new String(org.apache.commons.codec.binary.Base64.encodeBase64(empty), StandardCharsets.UTF_8); image.setReportDescImage(emptyImage); image.setReportDescImage2(emptyImage); image.setReportDescImage3(emptyImage); image.setReportDescImage4(emptyImage); return Collections.singletonList(image); } /** * 字节数组编码为Base64字符串 * @param imageBytes * @return */ private String byte2String(byte[] imageBytes) { imageBytes = Objects.isNull(imageBytes) ? new byte[0] : imageBytes; String imageStr = new String(org.apache.commons.codec.binary.Base64.encodeBase64(imageBytes), StandardCharsets.UTF_8); return imageStr; }

至此生成含图片的pdf文件就搞定了,以上供大家参考!

,

栏目热文

插入图片不能全部显示

插入图片不能全部显示

我是孙斌,北理数学系毕业,分享数据分析相关知识,点击右上角“关注”,学习更多数据分析知识。前几天,帮一个同学做论文中的统...

2023-07-30 17:17:20查看全文 >>

插入图片怎么横向显示(插入图片显示一半怎么调整)

插入图片怎么横向显示(插入图片显示一半怎么调整)

在ppt或其他的什么设计图中,图片变形乃是大忌。今天就跟大家讨论一下,如何科学的拉伸图片才能不变形(确切的说是让图片主体...

2023-07-30 17:26:59查看全文 >>

插入图片后怎么在屏幕上显示(怎么在显示屏里面添加图片)

插入图片后怎么在屏幕上显示(怎么在显示屏里面添加图片)

Word作为一款文字处理工具,具有强大的功能,但是若缺少“显示”,很多功能是不能实现的,下面和小编一起来看看到底有哪些“...

2023-07-30 17:47:00查看全文 >>

插入图片怎么上下显示(插入图片怎么全显示出来)

插入图片怎么上下显示(插入图片怎么全显示出来)

最近很多小伙伴在问,如何给竖屏视频添加上下背景图片效果?其实很简单,小编下面就分享具体的操作步骤,感兴趣的朋友接着往下看...

2023-07-30 17:29:41查看全文 >>

刺激战场关闭八倍镜调距(刺激战场怎么调倍镜最佳设置)

刺激战场关闭八倍镜调距(刺激战场怎么调倍镜最佳设置)

作为长期霸占游戏下载榜单的国民手游,《刺激战场》的热度一直居高不下。玩这个游戏,精髓就在于能够提前发现敌人,在大家视距相...

2023-07-30 17:42:31查看全文 >>

插入图片怎么分别显示名称(插入图片时如何和标题对应)

插入图片怎么分别显示名称(插入图片时如何和标题对应)

今天想要分享的是分步骤导入图片,图片上方单元格为图片名称的操作,这个在实际工作中也会遇到,比如做个PPT步骤拆分讲解啥的...

2023-07-30 17:52:30查看全文 >>

插入的图片怎么固定(插入图片怎么固定位置)

插入的图片怎么固定(插入图片怎么固定位置)

私信回复关键词【福利】,获取丰富办公资源!助你高效办公早下班!大家好,我是懂点 Excel 的小E~初入「江湖」,还请大...

2023-07-30 17:32:28查看全文 >>

插入的图片如何双击显示

插入的图片如何双击显示

通过使用触发器中的提示触发行为及查询事件中的随机排序实现双击弹出提示并刷新图片列表的功能。效果展示前置准备1.图片素材2...

2023-07-30 17:44:54查看全文 >>

怎样插入图片并显示图片名称(如何插入图片并加上图片名字)

怎样插入图片并显示图片名称(如何插入图片并加上图片名字)

如何快速批量插入图片超链接?如果想要将文件夹里面的所有照片插入到表格中,全选插入会导致表格卡顿。今天教大家如何制作图片超...

2023-07-30 17:55:43查看全文 >>

excel表格中嵌入图片不见了(excel表格嵌入图片无法显示怎么办)

excel表格中嵌入图片不见了(excel表格嵌入图片无法显示怎么办)

我是【桃大喵学习记】,点击右上方“关注”,每天为你分享职场办公软件使用技巧干货!昨天,有个小伙伴留言说自己在WPS中为E...

2023-07-30 17:32:43查看全文 >>

文档排行