1. 程式人生 > >將PDF格式檔案轉成二進位制並生成Base64編碼,將Base64編碼轉成PDF檔案

將PDF格式檔案轉成二進位制並生成Base64編碼,將Base64編碼轉成PDF檔案

// 為工程新增 sun.misc.BASE64Encoder和sun.misc.BASE64Decoder包:  
//右鍵專案》屬性》Java Build Path》jre System Library 》access rules》resolution選擇accessible,下面填上**點選確定即可!  
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 org.apache.commons.codec.binary.Base64;

import sun.misc.BASE64Decoder;    
import sun.misc.BASE64Encoder;    
    
public class TestPDFBinary {    
	/*BASE64Encoder和BASE64Decoder這兩個方法是sun公司的內部方法,並沒有在java api中公開過,所以使用這些方法是不安全的,
	 * 將來隨時可能會從中去除,所以相應的應該使用替代的物件及方法,建議使用apache公司的API*/
    static BASE64Encoder encoder = new sun.misc.BASE64Encoder();    
    static BASE64Decoder decoder = new sun.misc.BASE64Decoder();    
        
    public static void main(String[] args) {    
         //將PDF格式檔案轉成base64編碼 
    	 String base64String = getPDFBinary(new File("/home/amarsoft/AFm.pdf"));
    	 System.out.println(base64String);
    	//將base64的編碼轉成PDF格式檔案
    	base64StringToPDF(base64String);
    }    
        
    /**
     *  將PDF轉換成base64編碼
     *  1.使用BufferedInputStream和FileInputStream從File指定的檔案中讀取內容;
     *  2.然後建立寫入到ByteArrayOutputStream底層輸出流物件的緩衝輸出流BufferedOutputStream
     *  3.底層輸出流轉換成位元組陣列,然後由BASE64Encoder的物件對流進行編碼
     * */
    static String getPDFBinary(File file) {
    	FileInputStream fin =null;
    	BufferedInputStream bin =null;
    	ByteArrayOutputStream baos = null;
    	BufferedOutputStream bout =null;
    	try {
    		//建立讀取檔案的檔案輸出流
    		fin = new FileInputStream(file);
    		//在檔案輸出流上安裝節點流(更大效率讀取)
    		bin = new BufferedInputStream(fin);
    		// 建立一個新的 byte 陣列輸出流,它具有指定大小的緩衝區容量
    		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();
    		 //sun公司的API
    		 return encoder.encodeBuffer(bytes).trim();  
    		 //apache公司的API
    		 //return Base64.encodeBase64String(bytes);
    		
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				fin.close();
				bin.close();
				//關閉 ByteArrayOutputStream 無效。此類中的方法在關閉此流後仍可被呼叫,而不會產生任何 IOException
				//baos.close();
				bout.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
    	return null;
    }
        
    /**
     * 將base64編碼轉換成PDF
     * @param base64sString
     * 1.使用BASE64Decoder對編碼的字串解碼成位元組陣列
     *  2.使用底層輸入流ByteArrayInputStream物件從位元組陣列中獲取資料;
     *  3.建立從底層輸入流中讀取資料的BufferedInputStream緩衝輸出流物件;
     *  4.使用BufferedOutputStream和FileOutputSteam輸出資料到指定的檔案中
     */
    static void base64StringToPDF(String base64sString){
    	BufferedInputStream bin = null;
    	FileOutputStream fout = null;
    	BufferedOutputStream bout = null;
    	try {
    		 //將base64編碼的字串解碼成位元組陣列
			byte[] bytes = decoder.decodeBuffer(base64sString);
    		//apache公司的API
    		//byte[] bytes = Base64.decodeBase64(base64sString);
			//建立一個將bytes作為其緩衝區的ByteArrayInputStream物件
			ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
			//建立從底層輸入流中讀取資料的緩衝輸入流物件
			bin = new BufferedInputStream(bais);
			//指定輸出的檔案
			File file = new File("/home/amarsoft/test.pdf");
			//建立到指定檔案的輸出流
			fout  = new FileOutputStream(file);
			//為檔案輸出流對接緩衝輸出流物件
			bout = new BufferedOutputStream(fout);
			
			byte[] buffers = new byte[1024];
			int len = bin.read(buffers);
			while(len != -1){
				bout.write(buffers, 0, len);
				len = bin.read(buffers);
			}
			//重新整理此輸出流並強制寫出所有緩衝的輸出位元組,必須這行程式碼,否則有可能有問題
			bout.flush();
			
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				bin.close();
				fout.close();
				bout.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
    }
}    

相關推薦

PDF格式檔案二進位制生成Base64編碼Base64編碼PDF檔案

// 為工程新增 sun.misc.BASE64Encoder和sun.misc.BASE64Decoder包: //右鍵專案》屬性》Java Build Path》jre System Library 》access rules》resolution選擇accessi

圖片二進位制生成Base64編碼可以在網頁中通過url檢視圖片

    data格式的Url最直接的好處是,這些Url原本會引起一個新的網路訪問,因為那裡是一個網頁的地址,現在不會有新的網路訪問了,因為現在這裡是網頁的內容。這樣做,會減少伺服器的負載,當然同時也增加了當前網頁的大小。所以對“小”資料特別有好處。   另外聽說這種

[大型網站優化技術] -- 減少HTTP請求之圖片二進位制生成Base64編碼,可以在網頁中通過url檢視圖片

1 <?php 2 $pathinfo = pathinfo($_SERVER['SCRIPT_FILENAME']); 3 define('ROOT', $pathinfo['dirname']); 4 5 function generateIcon_

PB 如果把PDF 轉換二進位制資料儲存到資料庫讀取顯示

PB如果把PDF檔案轉換成二進位制資料儲存到資料庫,並讀取顯示。 給視窗新增一個PDF的OLE控制元件。 //OLE控制元件關聯檔案 string ls_filepath,ls_filename blob lb_object,ole_blob GetFileOpenName

如何用mysql 建資料庫設定為utf-8編碼和general_utf8_ci編碼格式

create database Herodefault character set utf8default collate utf8_general_ci;Query OK, 1 row affected (0.00 sec)utf8_general_ci;表示編碼格式,此編

那些PDF轉換圖片、PPT、Word的神操作一鍵互不是夢

type page jpeg 分割 利用 日常 完成 cee split 無論你是職場辦公,還是日常學習,只要使用電腦你就逃不開PDF文件。 因為PDF兼容性強,又能保證無論你在什麽系統和端口打開的時候,內容格式都不會發生變形。尤其是在打印文件的時候,這個優勢就特別明顯

爬蟲QQ說說生成詞雲圖回憶滿滿!比比誰更殺馬特!

body ~~ beautiful BE -c 添加 Python標準庫 clas mark 無圖言虛空 解析器使用方法優勢劣勢 Python標準庫 BeautifulSoup(markup, "html.parser") Python的內置標準庫 執行速度

C# 匯出excel後刪除該檔案提示 正由另一程序使用因此該程序無法訪問此檔案

原始碼 path = Server.MapPath("~/TemporaryFile/"); if (false == System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(p

python爬蟲學習:爬蟲QQ說說生成詞雲圖回憶滿滿

自學過一段時間的python,用django自己做了個網站,也用requests+BeautifulSoup爬蟲過些簡單的網站,週末研究學習了一波,準備爬取QQ空間的說說,並把內容存在txt中,讀取生成雲圖。 好久不登qq了,空間說說更是幾年不玩了,裡面滿滿的

linux下安裝opencv生成opencv-java即linux下用java呼叫opencv

版本是opencv2.4.5 1、安裝依賴包,採用yum命令安裝,在終端機輸入以下指令 yum install cmake gcc gcc-c++ gtk+-devel gimp-devel gimp-devel-tools gimp-help-browser zlib

Gson字符串編碼字符串轉換圖片保存二進制轉換圖片保存

tex pen text one ext align lin rim mon import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File;

什麽是et文件?如何et文件PDF格式

跳過 文件夾 follow mage ron 需要 href 原因 png et文件什麽格式呢?可能對於大部分工作的人來說,都遇見過它,但是很少人註意到這一點。在處理到et文件的時候,介於某種原因需要你將et格式的文件轉成PDF格式,那我們該如何解決呢?不會的夥伴可以看看下

怎樣PNG格式的圖片PDF格式

都知道我們經常在網上看到的圖片雖然有的看起來是一樣,但是右擊檢視圖片的屬性都是不一樣的。在這裡小編問大家一個問題,你們知道如何將一般圖片的格式轉換=成PDF格式嗎?就拿PNG轉PDF格式來說,可能大部分人都不知道如何進行解決的。那下面不妨看看小編是如何操作的!1:在電腦桌面新建一個資料夾取名為PNG圖片,然後

CAD轉換PDF格式輸出為DPI是什麼意思?有什麼含義?

可能很多的小夥伴們都有一個這樣的疑惑,什麼是DPI格式?這是個什麼東西?DPI即Dot per-inch,滑鼠解析度(也可稱之光學解析度),是滑鼠在桌面上每移一英寸反映在螢幕上游標所對應移動的點數。滑鼠是控制游標移動的唯一原動力,那麼,在滑鼠移動距離相同的情況下,高DPI滑鼠對應螢幕游標移動

怎麼PDF格式檔案轉換CAD格式呢?

怎麼將PDF格式檔案轉換成CAD格式呢?在日常生活中,PDF和CAD格式的檔案我們都不少見,那我們應該使用什麼辦法將這兩個格式的檔案進行轉換呢?今天小編就要來教大家的就是怎麼將PDF格式的檔案轉換成CAD格式的全部操作了,希望被採納! 第一步:首先要開啟你們電腦上面的CAD轉換器軟體,如果你們電腦上面沒有這

PDF格式圖紙怎樣CAD格式

將PDF格式圖紙怎樣轉成CAD格式?在工作中我們會經常遇到的一種格式就是PDF格式,那麼,如果我們想將其改成CAD格式應該如何進行操作,會不會操作起來很麻煩,今天小編就要來教大家的就是怎麼樣將PDF格式的轉成CAD格式的全部操作步驟,希望能夠幫助到大家! 第一步:首先需要在電腦上安裝一款CAD轉換器

base64格式圖片轉換二進位制生成圖片檔案

/**  * 將base64格式的字串轉換成二進位制流,並轉換成圖片  */ public  boolean changeBase64ToImage(String base64String){     //base64格式字串為空,返回fal

怎麼多張CAD圖紙檔案共同轉換PDF格式檔案

怎麼將多張CAD圖紙檔案共同轉換成PDF格式檔案?在設計繪製好一張CAD圖紙檔案,想要將其進行開啟檢視或是列印的時候都是那麼的不方便,所以這時候我們就需要將其轉換成PDF格式的檔案,那麼如果是一張一張的將CAD圖紙進行轉換的話就會很麻煩而且還很費時間,今天小編就要來教大家的就是怎樣同時將多張CAD圖紙檔

java 編碼填充 word 模板生成 word合同word合同pdf 文件

                        &nbs

java使用SWFToolsPDFswf使用flexpaper播放PDF

前導:1、 將PDF轉換為swf檔案java程式碼如下windows執行轉換命令方式:  第一種:windowsD:\\Program Files (x86)\\SWFTools\\pdf2swf.ex