有时候为了方便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; } }