问题需求

今天在做发送邮件功能的时候,发现邮件的附件部分,比如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();
        }
    }
}

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

原生 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) { // 200
                InputStream 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如何实现pdf转base64以及怎么反转?插图(1)

本站无任何商业行为
个人在线分享 » Java如何实现pdf转base64以及怎么反转?
E-->