当前位置: 首页 > 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();}

在这里插入图片描述

http://www.lryc.cn/news/362400.html

相关文章:

  • 动态规划5:62. 不同路径
  • Python编程学习第一篇——Python零基础快速入门(五)-列表(List)
  • c# - 运算符 << 不能应用于 long 和 long 类型的操作数
  • 问题排查|记录一次基于mymuduo库开发的服务器错误排查(回响服务器无法正常工作)
  • 中介模式实现聊天室
  • 游戏开发与游戏设计区别
  • 卡尔曼滤波算法的matlab实现
  • Unity Obi Rope失效
  • 基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
  • Gnu/Linux 系统编程 - 如何获取帮助及一个演示
  • ffmpeg 的sws_scale接口函数解析
  • MoonBit 本周新增类型标注语法、继续进行核心库 API 整理工作
  • YOLOv10训练自己的数据集
  • 探索Web前端三大主流框架:Angular、React和Vue.js
  • 《HelloGitHub》第 98 期
  • Xtransfer面试内容
  • 论文笔记:Image Anaimation经典论文-运动关键点模型(Monkey-Net)
  • Kibana创建ElasticSearch 用户角色
  • Vue基础(2)响应式基础
  • Mysql基础教程(15):别名
  • SpringCloud 微服务中网关如何记录请求响应日志?
  • 【运维项目经历|028】Cobbler自动化部署平台构建项目
  • “物联网安全:万物互联背景下的隐私保护与数据安全策略“
  • LeetCode216组合总和3
  • 微软找腾讯接盘,Windows直接安装手机APP体验起飞了
  • 【Springcloud微服务】MybatisPlus下篇
  • i18n-demo
  • [Leetcode] 0-1背包和完全背包
  • 自定义类型:联合体和枚举
  • 【Cityengine】Cityengine生产带纹理的建筑模型导入UE4/UE5(下)