java图片转pdf ,pdf 导出

news/2024/12/23 6:31:07/

pom引入jar

        <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.0-RC2</version></dependency>

转pdf方法

/*** 使用pdfbox将jpg转成pdf** @throws IOException IOException*/public byte[] jpgToPdf(MultipartFile file) throws IOException {
//        long old = System.currentTimeMillis();
//        System.out.println(" -- 图片转PDF:" + simpleDateFormat.format(old) + " 开始处理 -- " + fileAbsolutePath);byte[] pdfBytes = new byte[0]; // PDF BytesInputStream jpgStream = file.getInputStream();PDDocument pdDocument = new PDDocument();BufferedImage image = ImageIO.read(jpgStream);PDPage pdPage = new PDPage(new PDRectangle(image.getWidth(), image.getHeight()));pdDocument.addPage(pdPage);PDImageXObject pdImageXObject = LosslessFactory.createFromImage(pdDocument, image);PDPageContentStream contentStream = new PDPageContentStream(pdDocument, pdPage);try {contentStream.drawImage(pdImageXObject, 0, 0, image.getWidth(), image.getHeight());contentStream.close();ByteArrayOutputStream baos = new ByteArrayOutputStream();PDAcroForm acroForm = pdDocument.getDocumentCatalog().getAcroForm();if (acroForm != null) {PDTextField field = (PDTextField) acroForm.getField("sampleField");field.setValue("Text Entry");}pdDocument.save(baos);pdfBytes = baos.toByteArray();
//        String newFilePath = fileAbsolutePath.substring(0, fileAbsolutePath.lastIndexOf(".")) + ".pdf";
//        pdDocument.save(newFilePath);} catch (IOException e) {e.printStackTrace();} finally {if (pdDocument != null) {try {pdDocument.close();} catch (IOException e) {e.printStackTrace();}}if (jpgStream != null) {try {jpgStream.close();} catch (IOException e) {e.printStackTrace();}}}long now = System.currentTimeMillis();
//        File file = new File(fileAbsolutePath);
//        boolean delete = file.delete();
//        System.out.println(" -- 图片转PDF处理结束时间:" + " 处理结束 -- 删除原始文件 " + delete);return pdfBytes;}

导出方法

 @Overridepublic String plantPhotoDownload(DvsPlantPhoto dvsPlantPhoto, HttpServletResponse response, HttpServletRequest request) throws Exception {DvsPlantPhoto result = this.getOne(new QueryWrapper<>(dvsPlantPhoto));if (result != null) {String uri = result.getKey();BlobServiceClient blobServiceClient = BlobUtils.getBlobServiceClient();BlobContainerClient a = BlobUtils.getContainer(blobServiceClient, containerName);ByteArrayOutputStream byteArrayOutputStream = BlobUtils.downBlobFilecao(a, uri);
//            return Base64.getEncoder().encodeToString(aa);ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());response.setCharacterEncoding(request.getCharacterEncoding());response.setContentType("application/pdf");try {response.setHeader("Content-Disposition", "attachment; filename=" + result.getKey());IOUtils.copy(byteArrayInputStream, response.getOutputStream());response.flushBuffer();} catch (Exception e) {log.error(e.getMessage(), e);} finally {if (byteArrayInputStream != null) {try {byteArrayInputStream.close();} catch (IOException e) {log.error(e.getMessage(), e);}}if (byteArrayOutputStream != null) {try {byteArrayOutputStream.close();} catch (IOException e) {log.error(e.getMessage(), e);}}}return new JSONObject().toJSONString();} else {return new JSONObject().toJSONString();}}


http://www.ppmy.cn/news/1122817.html

相关文章

单元测试spring-boot-starter-test

参考博客&#xff1a; https://www.cnblogs.com/mzc1997/p/14306538.html 配置pom junit-vintage-engine junit4 junit-jupiter-engine junit5 排除junit4使用junit5,两者在切换时要特别注意 <dependency><groupId>org.springframework.boot</groupId><…

基于微信小程序的竞赛管理平台设计与实现(开题报告+任务书+源码+lw+ppt +部署文档+讲解)

文章目录 前言运行环境说明学生微信端的主要功能有&#xff1a;竞赛负责人的主要功能&#xff1a;管理员的主要功能有&#xff1a;具体实现截图详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考论文参考源码获取 前…

java字符串专项训练(手机号屏蔽)

package 字符串练习;public class 手机号屏蔽 {public static void main(String[] args) {/* 需求: 已经有一个给定的手机号,要把里面第3位到第7位数字改成**///思路: 我想到的有两种方法可解//第一种: 把原字符串先转换成char数组,然后用for循环和if来重新拼接一个字符串//第二…

2023/9/21 -- C++/QT

一、QT连接OpenCV库完成人脸识别 1.1 相关的配置 1> 该项目所用环境&#xff1a;qt-opensource-windows-x86-mingw491_opengl-5.4.0 2> 配置opencv库路径&#xff1a; 1、在D盘下创建一个opencv的文件夹&#xff0c;用于存放所需材料 2、在opencv的文件夹下创建一个…

【人工智能】机器学习的入门与提升

目录 1.入门 1.1.从何处开始 1.2.数据集 1.3.数据类型 2.平均中位数模式 2.1.均值、中值和众数 2.2.均值 2.2.1.实例 2.2.2.运行结果 2.3.中值 2.3.1.实例 2.3.2.运行结果 2.3.3.实例 2.3.4.运行结果 2.4.众数 2.4.1.实例 2.4.2.运行结果 2.5.章节总结 3.标准…

使用多线程实现批处理过程

使用多线程实现批处理过程&#xff0c;将一下数组&#xff0c;按10个一组&#xff0c;每组一个打印数据&#xff0c;并在19个线程都处理完成后输出打印次数 int[]data new int [100]; for(int i0;i <100;i){data[i] i;} import java.util.concurrent.CountDownLatch;public…

C. Tea Tasting

Problem - C - Codeforces 问题描述&#xff1a;n个人杯茶。第一个数组a表示第i杯茶有ai毫升&#xff0c;第二个数组b表示&#xff0c;第i个人品尝茶的毫升ai。总共会进行n轮品茶&#xff0c;在第j轮中&#xff0c;第i个人会品第i - j 1杯茶bi毫升&#xff0c;之后ai减少bi&a…

解决GOSUMDB sum.golang.org 连接超时

$ go get github.com/mutecomm/go-sqlcipher/v4 github.com/mutecomm/go-sqlcipher/v4v4.4.2: verifying module: missing GOSUMDB 原因&#xff1a; 首先需要弄懂&#xff0c;执行以上提到的两个命令时&#xff0c;除了会从 GOPROXY 下载压缩包&#xff0c;还会调用 GOSUMDB…