当前位置: 首页 > news >正文

Java如何实现pdf转base64以及怎么反转?

问题需求

今天在做发送邮件功能的时候,发现邮件的附件部分,比如pdf文档,要求先把pdf转为base64,邮件才会发送。那接下来就先看看Java 如何把 pdf文档转为base64。

两种方式,一种是通过插件 jar 包的方式引入,另外一种则是 通过原生的 文件流来读取pdf 并转为 byte 字节。

jar包引入

<dependency><groupId>org.apache.pdfbox</groupId><artifactId>fontbox</artifactId><version>2.0.1</version>
</dependency><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.1</version>
</dependency>
代码测试
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.io.RandomAccessBuffer;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Base64;public class PDFToBase64 {public static String convertPDFToBase64(Path pdfPath) throws IOException {try (PDDocument document = PDDocument.load(pdfPath.toFile())) {// 使用ByteArrayOutputStream来获取PDF的字节内容ByteArrayOutputStream outputStream = new ByteArrayOutputStream();document.save(outputStream);byte[] pdfBytes = outputStream.toByteArray();// 将字节转换为Base64字符串return Base64.getEncoder().encodeToString(pdfBytes);}}public static void main(String[] args) {try {Path pdfPath = Files.createTempFile("test", ".pdf");// 这里应该是你的PDF文件路径String base64String = convertPDFToBase64(pdfPath);System.out.println(base64String);} catch (IOException e) {e.printStackTrace();}}
}

在这里插入图片描述

原生 InputStream 实现

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;try {URL obj = new URL(url);HttpURLConnection con = (HttpURLConnection) obj.openConnection();// 添加请求头,如有必要con.setRequestMethod("GET");con.setRequestProperty("Accept", "application/pdf");int responseCode = con.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) { // 200InputStream inputStream = con.getInputStream();ByteArrayOutputStream outputStream = new ByteArrayOutputStream();byte[] buffer = new byte[4096];int n;while ((n = inputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, n);}byte[] pdfBytes = outputStream.toByteArray();String base64Encoded = Base64.getEncoder().encodeToString(pdfBytes);log.info("base64==" + base64Encoded);return base64Encoded;} else {System.out.println("GET request not worked");}} catch (Exception e) {e.printStackTrace();}

在这里插入图片描述

相关文章:

  • Java通过Html(ftl模板)生成PDF实战, 可支持商用
  • 从零学会【分镜头意识】拍摄思维
  • 一个与 WSL2 建立远程的简单方法
  • 基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库
  • 数字认证携手华为鸿蒙生态,升级智慧办公新体验
  • 【Qt】探索Qt绘图世界:自定义控件与视觉效果的全面指南
  • ggplot2绘图如何根据一个变量即区分颜色又区分深浅?
  • 超强算力 Orange Pi Kunpeng Pro 开发板基础测评与体验
  • pyqt绘制各种直线
  • LLM基础知识
  • LLM主要类别架构
  • PTA字符串删除
  • 19、matlab信号预处理中的中值滤波(medfilt1()函数)和萨维茨基-戈雷滤波滤(sgolayfilt()函数)
  • 【Python Cookbook】S01E14 从字典中提取子集
  • 【Linux】进程(4):优先级
  • 2017届校招提前批面试回顾
  • android图片蒙层
  • C语言笔记(第一章:C语言编程)
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • Javascript设计模式学习之Observer(观察者)模式
  • Java多线程(4):使用线程池执行定时任务
  • Koa2 之文件上传下载
  • React Transition Group -- Transition 组件
  • vue总结
  • 第十八天-企业应用架构模式-基本模式
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端知识点整理(待续)
  • 主流的CSS水平和垂直居中技术大全
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • puppet连载22:define用法
  • 从如何停掉 Promise 链说起
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​​​​​​​​​​​​​​Γ函数
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • #QT(智能家居界面-界面切换)
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (八十八)VFL语言初步 - 实现布局
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (三分钟)速览传统边缘检测算子
  • (一) 初入MySQL 【认识和部署】
  • .gitignore
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET CORE Aws S3 使用
  • .net core 管理用户机密
  • .net core 连接数据库,通过数据库生成Modell
  • .Net FrameWork总结
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .sdf和.msp文件读取