1. 程式人生 > >檔案流轉換工具、二維碼生成工具、pdf轉圖片流

檔案流轉換工具、二維碼生成工具、pdf轉圖片流

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 流轉換工具
 * 檔案流轉換工具 
 * 二維碼轉換工具
 * @author syk
 *
 */
public class FileStreamConvertUtil {

	private static final Logger LOGGER = LoggerFactory.getLogger(FileStreamConvertUtil.class);
	
	 /** 
     * 獲得指定檔案的二進位制陣列 
     */  
    public static byte[] getBytesByFile(String filePath){  
        byte[] buffer = null;
        InputStream fis =null; 
        ByteArrayOutputStream bos = null; 
        try {
            fis = new ByteArrayInputStream(returnBitMap(filePath));
            bos = new ByteArrayOutputStream(1000); 
            byte[] b = new byte[1000];  
            int n;  
            while ((n = fis.read(b)) != -1) {  
                bos.write(b, 0, n);  
            }   
            buffer = bos.toByteArray();  
        } catch (FileNotFoundException e) {  
        	LOGGER.error("FileNotFoundException e:{}",e.getLocalizedMessage());
        } catch (IOException e) {  
        	LOGGER.error("IOException e:{}",e.getLocalizedMessage());
		} finally {
			try {
				if (fis != null) {
					fis.close();
				}

			} catch (IOException e) {
				LOGGER.error("FileInputStream close exception e:{}",
						e.getLocalizedMessage());
			}
			try {
				if (bos != null) {
					bos.close();
				}

			} catch (IOException e) {
				LOGGER.error("ByteArrayOutputStream close exception e:{}",
						e.getLocalizedMessage());
			}

		}
        return buffer;  
    } 
    
    /**
     * 將pdf轉換成圖片二進位制流
	 * http://blog.csdn.net/chenjhit/article/details/54410025
	 */
	public static List<byte[]> pdfToImage(String filePath){
		List<byte[]> imagesStream=new ArrayList<byte[]>();
	    List<byte[]> imagesStream=new ArrayList<byte[]>();
        try {
           PDDocument doc = PDDocument.load(returnBitMap(filePath));
           PDFRenderer renderer = new PDFRenderer(doc);
           int pageCount = doc.getNumberOfPages();
           for(int i=0; i<pageCount; i++){
               ByteArrayOutputStream os = null;
               ImageOutputStream ios = null;
               try{
                   BufferedImage image = renderer.renderImage(i, 1.5f);//scale=dpi/75f
                   os = new ByteArrayOutputStream();  
                   
                   ImageWriter imageWriter=ImageIO.getImageWritersBySuffix("jpg").next();
                   ios = ImageIO.createImageOutputStream(os);
                   imageWriter.setOutput(ios);
                      IIOMetadata imageMetaData = imageWriter.getDefaultImageMetadata(new ImageTypeSpecifier(image), null);
                   
                   ImageWriteParam imageWriteParam =imageWriter.getDefaultWriteParam();
                   imageWriteParam.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
                   imageWriteParam.setCompressionQuality(0.7f);//壓縮率
                   imageWriter.write(imageMetaData,new IIOImage(image, null, null), imageWriteParam);

                   imagesStream.add(os.toByteArray());
               }finally{
                   if(os!=null){
                       os.close();
                   }
                   if(ios!=null){
                       ios.close();
                   }
               }
               
            }
       } catch (Exception e) {
           LOGGER.error("pdf To Image exception e:{}",JosnLogUtil.formatEx(e));
       }
       return imagesStream; 
 
	}
    
	/**
	 * 根據url獲取InputStream
	 * @param path
	 * @return
	 */
	public static byte[] returnBitMap(String path) {  
        URL url = null;  
        InputStream is =null;  
        HttpURLConnection conn=null;
        byte[] byteStream=null;
        try {  
            url = new URL(path);  
        } catch (MalformedURLException e) {  
        	LOGGER.error("return bit map url exception e:{}",e.getLocalizedMessage()); 
        }  
        try {  
            conn = (HttpURLConnection) url.openConnection();//利用HttpURLConnection物件,可以從網路中獲取網頁資料.  
            conn.setDoInput(true);
            conn.setConnectTimeout(30000);
            conn.connect();
            is = conn.getInputStream(); //得到網路返回的輸入流  
            byteStream=toByteArray(is);
        } catch (IOException e) {  
        	LOGGER.error("return bit map inputStream exception e:{}",e.getLocalizedMessage());  
        }finally{
        	try {
        		if(conn!=null){
            		conn.disconnect();        		
            	}
        		if(is!=null){
        			is.close();        			
        		}
			} catch (IOException e) {
				LOGGER.error("inputStream close exception e:{}",e.getLocalizedMessage());
			}
        }
        return byteStream;  
    } 
	
	public static byte[] toByteArray(InputStream input){
		byte[] outBytes=null;
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        byte[] buffer = new byte[4096];
        int n = 0;
        try {
			while (-1 != (n = input.read(buffer))) {
			    output.write(buffer, 0, n);
			}
			outBytes=output.toByteArray();
		} catch (IOException e) {
			LOGGER.error("to Byte Array exception e:{}",e.getLocalizedMessage());  
		}finally{
			try {
				if(output!=null){
					output.close();					
				}
			} catch (IOException e) {
				LOGGER.error("byteArrayOutputStream close exception e:{}",e.getLocalizedMessage());
			}
		}
        return outBytes;
    }
	
	/**
	 * 建立二維碼
	 * @param _text
	 * @return
	 */
	public static byte[] createQrcode(String _text) {
		byte[] imagesStream=null;
		try {
			int qrcodeWidth = 400;
			int qrcodeHeight = 400;
			String qrcodeFormat = "png";
			HashMap<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
			hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
			hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
			hints.put(EncodeHintType.MARGIN, 0);
			BitMatrix bitMatrix = new MultiFormatWriter().encode(_text,
					BarcodeFormat.QR_CODE, qrcodeWidth, qrcodeHeight, hints);
			ByteArrayOutputStream os = null;
			try {
				os = new ByteArrayOutputStream();
				MatrixToImageWriter.writeToStream(bitMatrix, qrcodeFormat, os);
			}catch(Exception e){
				
			}finally{
				 if(os!=null){
	    			   os.close();
	    		 }
			}
			imagesStream=os.toByteArray();
			
		} catch (Exception e) {
			 LOGGER.error("create qrcode exception e:{}",e.getLocalizedMessage());
		}
		return imagesStream;
	}
}