base64ToPDF以及PDFToBase64

有时候为了方便pdf文件传输,需要将pdf与base64进行相互转换,代码如下:

package com.ulic.yyl.util;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.xml.bind.DatatypeConverter;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class PDFFileUtils {
    public static void main(String[] args){   
//        String base64 = PDFToBase64("D:\\pdf\\测试5.pdf");
//        System.out.println("结果:"+base64);
    //    String base64Content="";
        base64StringToPDF(base64Content2);
    }
    
     /** 
         * 方法名:          base64StringToPDF
         * 方法功能描述:     将base64编码内容转换为Pdf
         */
        public static void base64StringToPDF(String base64Content){
            BASE64Decoder decoder = new BASE64Decoder();
            BufferedInputStream bis = null;
            FileOutputStream fos = null;
            BufferedOutputStream bos = null;
            try {
                //1.base64编码内容转换为字节数组
                //byte[] bytes = decoder.decodeBuffer(base64Content);
                byte[] bytes = DatatypeConverter.parseBase64Binary(base64Content);
                ByteArrayInputStream byteInputStream = new ByteArrayInputStream(bytes);
                bis = new BufferedInputStream(byteInputStream);
                
                //2.生成jpg图片,把图片保存到健康乐服务器
                String fileName = "base64ToPDF2";
                String realPath = "D:\\pdf\\";
                  String trueFileName=fileName+".pdf";
                  String imageSavePath = realPath + trueFileName;
                File file = new File(imageSavePath);
                File path = file.getParentFile();
                
                if(!path.exists()){
                    path.mkdirs();
                }
                
                fos = new FileOutputStream(file);
                bos = new BufferedOutputStream(fos);
     
                byte[] buffer = new byte[1024];
                int length = bis.read(buffer);
                while(length != -1){
                    bos.write(buffer, 0, length);
                    length = bis.read(buffer);
                }
                bos.flush();
                
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                try {
                    bis.close();
                    fos.close();
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    /** 
     * 方法名:          PDFToBase64
     * 方法功能描述:     将pdf文件转换为Base64编码
     * @param:        String sourceFile:源文件路径
     * @return:       String  base64字符串     
     * @Create Date:   2019年07月03日 
     */
    public static String PDFToBase64(String sourceFile) {
        BASE64Encoder encoder = new BASE64Encoder();
        FileInputStream fin =null;
        BufferedInputStream bin =null;
        ByteArrayOutputStream baos = null;
        BufferedOutputStream bout =null;
        File file = new File(sourceFile);
        try {
            fin = new FileInputStream(file);
            bin = new BufferedInputStream(fin);
            baos = new ByteArrayOutputStream();
            bout = new BufferedOutputStream(baos);
            byte[] buffer = new byte[1024];
            int len = bin.read(buffer);
            while(len != -1){
                bout.write(buffer, 0, len);
                len = bin.read(buffer);
            }
            //刷新此输出流并强制写出所有缓冲的输出字节
            bout.flush();
            byte[] bytes = baos.toByteArray();
            //return encoder.encodeBuffer(bytes).trim();
            return DatatypeConverter.printBase64Binary(bytes);
 
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                fin.close();
                bin.close();
                bout.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

}

 

posted @ 2022-01-10 11:22  存钱罐  阅读(1332)  评论(0编辑  收藏  举报