在springboot项目中实现将上传的jpg图片类型转为pdf并保存到本地

springBoot整合kindeditor图片上传 application.yml先配置路径 虚拟路径配置 @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { ... 阅读详情

前言:前端使用uniapp中的uni.canvasToTempFilePath方法将画板中的内容保存为jpg上传至后端处理

uni.canvasToTempFilePath({
                canvasId: 'firstCanvas',
				sourceType: ['album'],
				fileType: "jpg",
                success: function (res1) {
					let signature_base64 = res1.tempFilePath;
					
					let signature_file = that.base64toFile(signature_base64);
					// 将签名存储到服务器
					uni.uploadFile({
						url: "convertJpgToPdf",
						name: "file",
						file: signature_file,
						formData: {
							busiId: 'ceshi12',
							token: token
						},
						success: function (res1) {
							console.log(res1);
						}
					})
                }
            });

// 将base64转为file
		base64toFile: function(base64String) {
		    // 从base64字符串中解析文件类型
			var mimeType = base64String.match(/^data:(.*);base64,/)[1];
			// 生成随机文件名
			var randomName = Math.random().toString(36).substring(7);
			var filename = randomName + '.' + mimeType.split('/')[1];
			
			let arr = base64String.split(",");
			let bstr = atob(arr[1]);
			let n = bstr.length;
			let u8arr = new Uint8Array(n);
			while (n--) {
				u8arr[n] = bstr.charCodeAt(n);
			}
			return new File([u8arr], filename, { type: mimeType });
		},

java代码:
首先在pom.xml中安装依赖

<dependency>
	<groupId>org.apache.pdfbox</groupId>
	<artifactId>pdfbox</artifactId>
	<version>2.0.8</version>
</dependency>

使用方法:

/**
     * 将jpg转为pdf文件
     * @param jpgFile
     * @return
     * @throws IOException
     */
    public MultipartFile convertJpgToPdf(MultipartFile jpgFile) throws IOException {
        // 保存MultipartFile到临时文件
        File tempFile = new File(System.getProperty("java.io.tmpdir"), "temp.jpg");
        jpgFile.transferTo(tempFile);
        // 创建PDF文档
        PDDocument pdfDoc = new PDDocument();
        PDPage pdfPage = new PDPage();
        pdfDoc.addPage(pdfPage);

        // 从临时文件创建PDImageXObject
        PDImageXObject pdImage = PDImageXObject.createFromFile(tempFile.getAbsolutePath(), pdfDoc);

        // 获取PDF页面的内容流以添加图像
        PDPageContentStream contentStream = new PDPageContentStream(pdfDoc, pdfPage);

        // 获取PDF页面的大小
        PDRectangle pageSize = pdfPage.getMediaBox();
        float pageWidth = pageSize.getWidth();
        float pageHeight = pageSize.getHeight();

        // 在PDF页面上绘制图像
        float originalImageWidth = pdImage.getWidth();
        float originalImageHeight = pdImage.getHeight();

        // 初始化缩放比例
        float scale = 1.0f;

        // 判断是否需要缩放图片
        if (originalImageWidth > pageWidth || originalImageHeight > pageHeight) {
            // 计算宽度和高度的缩放比例,取较小值
            float widthScale = pageWidth / originalImageWidth;
            float heightScale = pageHeight / originalImageHeight;
            scale = Math.min(widthScale, heightScale);
        }
        // 计算缩放后的图片宽度和高度
        float scaledImageWidth = originalImageWidth * scale;
        float scaledImageHeight = originalImageHeight * scale;

        // 计算图片在页面中居中绘制的位置
        float x = (pageWidth - scaledImageWidth) / 2;
        float y = (pageHeight - scaledImageHeight) / 2;

        // 绘制缩放后的图片到PDF页面
        contentStream.drawImage(pdImage, x, y, scaledImageWidth, scaledImageHeight);
        // 关闭内容流
        contentStream.close();

        // 将PDF文档写入到字节数组中
        ByteArrayOutputStream pdfOutputStream = new ByteArrayOutputStream();
        pdfDoc.save(pdfOutputStream);

        // 关闭PDF文档
        pdfDoc.close();

        // 删除临时文件
        tempFile.delete();

        // 创建代表PDF的MultipartFile
        MultipartFile pdfFile = new MockMultipartFile("converted12.pdf", "converted12.pdf", "application/pdf", pdfOutputStream.toByteArray());
        saveFileToLocalDisk(pdfFile, "D:/");
        return pdfFile;
    }

/**
     * 将MultipartFile file文件保存到本地磁盘
     * @param file
     * @param directoryPath
     * @throws IOException
     */
    public void saveFileToLocalDisk(MultipartFile file, String directoryPath) throws IOException {
        // 获取文件名
        String fileName = file.getOriginalFilename();

        // 创建目标文件
        File targetFile = new File(directoryPath + File.separator + fileName);

        // 将文件内容写入目标文件
        try (FileOutputStream outputStream = new FileOutputStream(targetFile)) {
            outputStream.write(file.getBytes());
        } catch (IOException e) {
            // 处理异常
            e.printStackTrace();
            throw e;
        }
    }

MockMultipartFile类

package com.jiuzhu.server.common;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

public class MockMultipartFile implements MultipartFile {
    private final String name;

    private String originalFilename;

    private String contentType;

    private final byte[] content;

    /**
     * Create a new MultipartFileDto with the given content.
     *
     * @param name    the name of the file
     * @param content the content of the file
     */
    public MockMultipartFile(String name, byte[] content) {
        this(name, "", null, content);
    }

    /**
     * Create a new MultipartFileDto with the given content.
     *
     * @param name          the name of the file
     * @param contentStream the content of the file as stream
     * @throws IOException if reading from the stream failed
     */
    public MockMultipartFile(String name, InputStream contentStream) throws IOException {
        this(name, "", null, FileCopyUtils.copyToByteArray(contentStream));
    }

    /**
     * Create a new MultipartFileDto with the given content.
     *
     * @param name             the name of the file
     * @param originalFilename the original filename (as on the client's machine)
     * @param contentType      the content type (if known)
     * @param content          the content of the file
     */
    public MockMultipartFile(String name, String originalFilename, String contentType, byte[] content) {
        this.name = name;
        this.originalFilename = (originalFilename != null ? originalFilename : "");
        this.contentType = contentType;
        this.content = (content != null ? content : new byte[0]);
    }

    /**
     * Create a new MultipartFileDto with the given content.
     *
     * @param name             the name of the file
     * @param originalFilename the original filename (as on the client's machine)
     * @param contentType      the content type (if known)
     * @param contentStream    the content of the file as stream
     * @throws IOException if reading from the stream failed
     */
    public MockMultipartFile(String name, String originalFilename, String contentType, InputStream contentStream)
            throws IOException {

        this(name, originalFilename, contentType, FileCopyUtils.copyToByteArray(contentStream));
    }

    @Override
    public String getName() {
        return this.name;
    }

    @Override
    public String getOriginalFilename() {
        return this.originalFilename;
    }

    @Override
    public String getContentType() {
        return this.contentType;
    }

    @Override
    public boolean isEmpty() {
        return (this.content.length == 0);
    }

    @Override
    public long getSize() {
        return this.content.length;
    }

    @Override
    public byte[] getBytes() throws IOException {
        return this.content;
    }

    @Override
    public InputStream getInputStream() throws IOException {
        return new ByteArrayInputStream(this.content);
    }

    @Override
    public void transferTo(File dest) throws IOException, IllegalStateException {
        FileCopyUtils.copy(this.content, dest);
    }
}

[springboot专栏]文件本地上传与提供访问服务 spring boot 为我们提供了使用配置自定义静态文件的位置。配置为与项目代码分离的静态资源路径,即:文件上传保存根路径配置,除了带上Spring Boot默认的静态资源路径之外,加上file:${web.upload-path}指向外部的文件资源上传路径。该路径下的静态资源可以直接对外提供HTTP访问服务。 阅读详情

相关推荐

springboot使用itext生成pdf并保存到本地

html渲染页面转换为pdf并设置页眉,页码,水印,目录,二维码

springboot word excel ppt 图片aspose 转换PDF 在线预览

springboot word excel ppt aspose 转换PDF 在线预览

Gblfy_Blog 1489

【Telephony】APN配置及加载流程&项目实践(AOSP)

学习APN关键是学会明白apns-conf.xml文件各个参数的意思,然后熟悉TelephonyProvider是如何读取文件创建数据库的,譬如数据库表的约束、文件的读写顺序等,还有读取后的ApnSetting的二次定制以及显示(例如屏蔽xcap等)。虽然一般在项目中APN的需求很简单,就是按照客户提供的APN参数添加上配置,或者在显示屏蔽一些参数,但是项目维护的过程中APN的问题也是比较多的。

weixin_44513784的博客 5509

java springboot实现图片转换pdf,ofd并下载

java springboot实现图片转换pdf,ofd并下载

m0_61228138的博客 3597

避坑指南:STM32H7不同DMA控制器(MDMA/DMA2D/BDMA)到底该用哪个?

本文深入解析STM32H7系列芯片的DMA控制器选型策略,涵盖MDMA、DMA2D、BDMA等不同控制器的架构原理与性能对比。通过实际项目案例,提供高速TCM数据搬运、GUI加速、低功耗传输等场景的选型决策树,并分享性能优化与调试技巧,帮助工程师避开常见陷阱,提升系统效率。

weixin_26876073的博客 447

蓝牙开发实战:如何用Wireshark抓取HCI协议包(附完整分析步骤)

本文详细介绍了如何使用Wireshark抓取和分析蓝牙HCI协议包,包括环境搭建、过滤器配置技巧、数据包深度解析及高级调试方法。通过实战案例,帮助开发者快速定位蓝牙连接问题,提升调试效率。

cuda7parallel的博客 1148

springboot项目图片转换成pdf

加入itext的依賴 <!--图片转pdf--> <dependency> <groupId>com.lowagie</groupId> <artifactId>itext</artifactId> <version>2.1.7</version> </dependency>

weixin_51091628的博客 1611

基于Matlab与Bladed联合仿真的交互软件设计

基于Matlab与Bladed的交互软件设计

weixin_45014222的博客 816

几行代码实现SpringBoot图片上传

首先创建一个SpringBoot项目。 创建一个SpringBoot项目 创建成功后在静态志愿目录下会产生static template 目录 当我们的SpringBoot项目启动时会自动配置好静态资源访问,当我们的静态资源文件放在resources目录下的static,public,resources, /META-INF/resources目录下时就可以直接访问 现在我们将一张图片放在public目录下 启动项目 浏览器输入http://localhost:5050/img/11.jpg 端口号是

qq_48959845的博客 9032

Unity FPS射击控制系统:数据驱动的武器行为解耦方案

在Unity第一人称射击(FPS)开发中,射击系统常因输入、状态、行为耦合导致连发异常、换弹冲突与网络同步失准。其本质是缺乏对‘武器行为’(如后坐力曲线、弹药逻辑)与‘射击控制’(如输入合法性校验、冷却调度)的正交分离。本方案基于ScriptableObject实现WeaponData数据资产化,配合ShootingController状态机服务,达成输入解耦、运行时参数可调、协程受控、网络预测友好等工程目标。适用于中大型FPS项目架构升级与数据驱动转型,尤其解决Unity InputSystem与物理反馈

weixin_30536861的博客 609

超越PSPNet:PPM模块在医疗影像分割中的创新应用实验

本文探讨了PPM模块在医疗影像分割中的创新应用,通过定制化调整和优化策略显著提升分割精度。针对医疗影像的多尺度病灶特点,提出了动态尺度选择和交叉尺度融合模块(CSFM),结合PyTorch实现细节,使小病灶检测召回率提升11.3%。实验显示优化后的模型mIoU达到78.6%,较基线提升9.2个百分点,同时满足实时处理需求。

u9v0w的博客 219

java pdf转图片 并返回给前端 或者保存到本地

要将网络路径上的PDF文件的第一页转换为图片,并通过请求将图像返回给前端,你可以使用 Java 的 Apache PDFBox 库和 Spring Boot 框架来实现。要将网络路径上的PDF文件的第一页转换为图片,你可以使用 Java 的 Apache PDFBox 库和 Java 的图像处理库来实现。该示例代码会从指定的网络路径读取 PDF 文件,并将第一页转换为 JPEG 格式的图片进行保存。替换为你要转换的 PDF 文件的网络路径,将。替换为你要转换的 PDF 文件的网络路径。

m0_50590736的博客 1129

Thor芯片部署

英伟达Jetson Thor芯片性能分析与应用现状 摘要:英伟达最新发布的Jetson Thor芯片基于Blackwell架构,官方宣称AI算力达2070TFLOPS(FP4),较前代Orin提升7.5倍,配备14核Arm CPU和128GB内存。然而实际量产版算力缩水至700TOPS,且因4nm制程良率问题多次延期至2025-2026年交付。该芯片支持FP4/FP8量化、Transformer引擎等先进特性,适用于自动驾驶、机器人等边缘AI场景,但受供应链限制,国内厂商倾向自研方案。开发者可通过JetPa

xiaomu_347的博客 431

百度web编辑器 实现ctrl+v粘贴图片并上传、word粘贴带图片

整合效果:粘贴Word或者WPS文档内容效果:批量粘贴效果:自动替换编辑器中的图片地址:在上传多张图片时非常方便,也非常高效。图片保存路径:相关问题:整合后无法粘帖图片WordPaster2-订阅版-2023.pdfWordPaster2-政企版-2024.pdfWordPaster2-年费版-2023.pdfWordPaster2-OEM版-2024.pdf。

weixin_45525177的博客 846

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

在SpringBoot中使用【阿里云OSS对象存储】存取图片

一、前言 之所以引入 OSS云储存技术,是因为在【开发环境】中,我们是使用 windows 操作系统的,而在【生产环境】服务器是使用 Linux 操作系统的,如此一来图片保存到数据的路径就不一致了,有点不方便,虽然可以使用 Spring 的 @Condition来定义 Linux、windows 环境才运行的代码,但是多此一举,实在可惜。 OSS云存储技术,不一定要使用 阿里云的,如腾讯...

IT小村 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ueditor 实现ctrl+v粘贴图片并上传、word粘贴带图片

整合效果:粘贴Word或者WPS文档内容效果:批量粘贴效果:自动替换编辑器中的图片地址:在上传多张图片时非常方便,也非常高效。图片保存路径:相关问题:整合后无法粘帖图片WordPaster2-订阅版-2023.pdfWordPaster2-政企版-2024.pdfWordPaster2-年费版-2023.pdfWordPaster2-OEM版-2024.pdf。

weixin_45525177的博客 799

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SpringBoot图片上传功能

主要代码部分 package com.zkc.student.controller; import com.zkc.student.utils.DigestUtil; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.commons.io.FilenameUtils; import org.springfram...

没事别学JAVA 572

Springboot通过模板生成pdf文档带图片

标题Springboot利用itext通过模板生成pdf文档带图片功能

weixin_42600165的博客 1339

freemarker转成PDF再转jpg

行行行

heihei_100的博客 598

springboot文件上传分类保存并回显

一、配置上传文件大小 # 开发环境配置 spring: profiles: dev servlet: multipart: max-request-size: 100MB max-file-size: 100MB 二、文件类型分类(非必须) package com.xxxxx; import java.util.Arrays; import java.util.List; public interface Consts { /** * 文件后

一起coding,一起嗨。 1404

Spring Boot 文件上传(upload) , 下载(download) , 图片显示(view) 最完整的项目

其他虚的不多说 , 能来看这边博客的,说明就是想知道上传下载是怎么实现的 .先介绍下这篇博客和这个demo项目说明/介绍  项目名: springboot-upload 说明: 上传下载,图片pdf等文件的显示,是项目中最常用的开发 , 每次开发项目的时候都需要去找原来的代码 , 或者 Google很费时间 , 所以称这次又开发到这个功能, 干脆整合springboot 抽取成一个独立项目,初学者...

博客简介 9596

Spring Boot pdf文件转图片

PDF转图片工具类 亲测可以使用,无需下载其他jar包 pom.xml <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>2.0.20</version> </dependency&gt

乱码行空的博客 1951

spring boot 版本pdf 转 图片

方法里面有两个参数,一个是图片,一个是页面参数。需要将pdf 上传到默默网站上,但是需要的是图片格式,有可能是一张有可能是多张,其他软件要么付费,要么免费的就几页其他的还不完整,气人不气人,所以根据这个需求,进行一个java 版本的将pdf 转换为图片功能,尤其是文员的同事,最头痛了,每个月的会员费。这个2023.zip 是下载的文件名字,主要的是中文会乱码,这个就不讲怎么解决了。单图情况下,将文件夹下的图片合并成一个图片,我发现这个单个图片和多张图片的下载包差不多大小。所以单张图片的时候需要压缩一下。

一个持续编程的盲人。 604
上一篇: php实现将数字金额转中文
下一篇: 谷歌浏览器跨域解决
if时光重来
博客等级 码龄8年 248粉丝 217原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值