package cn.wonders.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.springframework.web.util.UriUtils;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;
import sun.misc.BASE64Decoder;
public class GetFile {

static BASE64Decoder decoder = new sun.misc.BASE64Decoder();

/**
* @Title:buFile
* @Description:根据防伪码获取文件,将pdf转成base64字符串
* @param: @param typeData
* @param: @param codeData
* @param: @return
* @return:StringBuffer
* @throws
*/

public static String buFile(String typeData,String codeData) {
InputStream is = null;
ByteArrayOutputStream os = null;
String resultCode = "00";
String dUrlData="";
// StringBuffer res_xml = new StringBuffer();

//pdf源路径
String urlStr = " ";
byte[] buff = new byte[1024];
int len = 0;
try {
URL url = new URL(UriUtils.encodePath(urlStr, "UTF-8"));
// URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Content-Type", "plain/text;charset="+ "UTF-8");
conn.setRequestProperty("charset", "UTF-8");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("GET");
conn.setReadTimeout(30000);
conn.connect();
is = conn.getInputStream();
os = new ByteArrayOutputStream();
while ((len = is.read(buff)) != -1) {
os.write(buff, 0, len);
}

//刷新此输出流并强制写出所有缓冲的输出字节,必须这行代码,否则有可能有问题
os.flush();
os.toByteArray();
dUrlData= Base64.encode(os.toByteArray());
// 二进制数据流转BASE64格式字符串

} catch (IOException e) {
resultCode = "01";
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
resultCode = "02";
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
resultCode = "03";
}
}
}
System.out.println(dUrlData);
return dUrlData;
}

/**
* @Title:base64StringToPDF
* @Description:
*1.使用BASE64Decoder对编码的字符串解码成字节数组
    *2.使用底层输入流ByteArrayInputStream对象从字节数组中获取数据;
    *3.建立从底层输入流中读取数据的BufferedInputStream缓冲输出流对象;
    *4.使用BufferedOutputStream和FileOutputSteam输出数据到指定的文件中
* @param: @param base64sString
* @param: @param filePath
* @return:void
* @throws
*/
public static StringBuffer BasetoPdffile(String typeData, String codeData,String filepath){
BufferedInputStream bis = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
String pdfBase64Str = null;
String resultCode = "00";
StringBuffer res_xml = new StringBuffer();
try{

//将pdf转为base64编码的字符串
pdfBase64Str = buFile( typeData,codeData);

//将base64编码的字符串解码成字节数组
byte[] bytes=Base64.decode(pdfBase64Str);

//apache公司的API
//byte[] bytes = Base64.decodeBase64(pdfBase64Str);

//创建一个将bytes作为其缓冲区的ByteArrayInputStream对象
ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(bytes);

//创建从底层输入流中读取数据的缓冲输入流对象
bis=new BufferedInputStream(byteArrayInputStream);

//指定输出的文件
File file=new File(filepath);
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){
resultCode="01";
e.printStackTrace();
}finally {
try{
bis.close();
bos.close();
fos.close();
}catch (IOException e){
resultCode="02";
e.printStackTrace();
}
}

res_xml.append("{");
res_xml.append("\""+Contant.XML_RESULTCODE+"\":\""+resultCode+"\",");
res_xml.append("\""+Contant.XML_RESULTDATA+"\":\""+filepath+"\"");
res_xml.append("}");
System.out.println("filepath="+filepath);
return res_xml;
}

/**
* @Title:inStFile
* @Description:pdf按行读取
* @param: @param typeData
* @param: @param codeData
* @param: @return
* @return:StringBuffer
* @throws
*/
public static StringBuffer inStFile(String typeData,String codeData) {
InputStream is = null;
String resultCode = "00";
StringBuffer res_xml = new StringBuffer();
StringBuffer sb = new StringBuffer();

//源路径
String urlStr = "";
try {
URL url = new URL(urlStr);
// URL url = new URL(UriUtils.encodePath(urlStr, "UTF-8"));
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestProperty("Content-Type", "plain/text;charset="+ "UTF-8");
conn.setRequestProperty("charset", "UTF-8");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestMethod("GET");
conn.setReadTimeout(30000);
conn.connect();

InputStreamReader brr = new InputStreamReader(conn.getInputStream(),"UTF-8");
BufferedReader br = new BufferedReader(brr);
String message = null;
while ((message = br.readLine()) != null) {
sb.append(message);
}
} catch (IOException e) {
resultCode = "01";
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
resultCode = "02";
}
}
}
res_xml.append("{");
res_xml.append("\""+Contant.XML_RESULTCODE+"\":\""+resultCode+"\",");
res_xml.append("\""+Contant.XML_RESULTDATA+"\":\""+sb+"\"");
res_xml.append("}");
System.out.println(res_xml);
return res_xml;
}

}

java将pdf转成base64字符串及将base64字符串反转pdf的更多相关文章

  1. 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片

    项目中运用到pdf文件转换成image图片,开始时使用pdfbox开源库进行图片转换,但是转换出来的文件中含有部分乱码的情况.下面是pdfBox 的pdf转换图片的代码示例. try{ String ...

  2. 【PyMuPDF和pdf2image】Python将PDF转成图片

    前言: 在最近的测试中遇到一个与PDF相关的测试需求,其中有一个过程是将PDF转换成图片,然后对图片进行测试. 粗略的试了好几种方式,其中语言尝试了Python和Java,总体而言所找到的Python ...

  3. java自带BASE64工具进行图片和字符串转换

    java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  4. java自带BASE64工具进行图片和字符串转换【转】

    java自带BASE64工具进行图片和字符串转换 import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  5. 直接用<img> 的src属性显示base64转码后的字符串成图片

    直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="base64转码后的字符串" ></img> 下面的图片 ...

  6. 直接用<img> 的src属性显示base64转码后的字符串成图片【原】

    直接用<img> 的src属性显示base64转码后的字符串成图片 <img src="data:image/gif;base64,base64转码后的字符串" ...

  7. 【Java】字符拼接成字符串的注意点

    这两天敲代码的时候,偶然间发现一个好玩的事情,分享一下,记录一下. 该段代码主要是:先产生的几个整数,把整数转换成对应的字符,最后的字符拼接成字符串,在把字符拼接成字符串的时候,个人因为偷懒使用+号进 ...

  8. java算法:统计数字-将数字转换成字符串,然后使用字符串String.valueOf()方法进行判断

    题目: 计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值. 样例 样例 1: 输入: k = 1, n = 1 输出: 1 解释: 在 [0, 1] 中,我们发现 1 出现了 ...

  9. Java 二进制数据转成文件

    SqlServer数据库中,存储文件的字段的类型是image,对应的Java类型是byte[],下面的函数将演示如何把读取出来数据放入指定目录.当然,首先需要从数据库读出,然后调用该方法. impor ...

随机推荐

  1. ZROI2018普转提day2t4

    传送门 分析 考场上暴力水过好评... 然后我的st表查询似乎是log的,然后log三方跑的比log方快,qwq. 我们发现如果一个区间的最小值就是这个区间的gcd,则这个区间合法.所以我们二分区间长 ...

  2. Help Bubu UVALive - 4490

    传送门 题目大意 有n本书,最多k次操作,每次操作可以把一本书拿出来,放到一个位置去,有一个指标较mess度,他是书的高度的段数,连续的书高度一样算一段,现在给你最先开始各个位置上的书的高度,求操作后 ...

  3. c++调用shell命令

    system()这个函数就不说了,不能读取返回值. #include<cstdio> int main() { FILE *fp; ]={}; fp=popen("ssh roo ...

  4. Python--面向对象编程--时钟实例开发

    在学习python面向对象编程的时候,心血来潮,决定写一个时钟模型来玩玩,所以就有了现在这个小玩意,不过python这个东西确实是挺好玩的 方法:运用python的tkinter库开发图形化时钟程序 ...

  5. Android将程序崩溃信息保存本地文件

    大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了 ...

  6. Android camera调用出现错误解决方法

    开发时,先是使用三星的手机测试,发现一切正常: 但是到了小米的手机的时候,发现图片很模糊,发现是设置camera.setParameters(parameters);报错导致用的是默认的最小的分辨率, ...

  7. 移动端自适应个人理解与收集——rem

    rem——更好的适配移动端.这个单位我一直想弄个究竟,今天终于看了个差不多.看了很多的博客.心中总算有自己的想法.(还有vh,vw这里我这个小白还没有弄明白就先不写了.) 1.rem可以在html,b ...

  8. NMS---非极大值抑制

    在物体检测中,NMS(Non-maximum suppression)应用十分广泛,其目的是为了消除多余的框,找到最佳的物体检测的位置.在RCNN系列算法中,会从一张图片中找出很多个候选框(可能包含物 ...

  9. ubuntu - 14.04,安装CDT(Eclipse开发C++和C的插件)

    我已经安装完Eclipse了,我想把CDT加入到我的Eclipse里面. 一,下载CDT:我下载的是64位的CDT,下载地址:http://eclipse.bluemix.net/packages/m ...

  10. 【图灵学院15】极致优化-高性能网络编程之BIO与NIO区别

    一.Java IO概念 1.  一个http请求节点 数据传输 1)网络传输 TCP.UDP 2)通信模型 BIO.NIO.AIO 数据处理 3)应用协议 HTTP.RMI.WEBSERVICE.Re ...