2016-04-15 51 views
-3

我讀利用iText現有的PDF(INPUT):我怎麼可能產生Base64編碼的PDF由iText的的PdfReader閱讀

PdfReader reader = new PdfReader(INPUT); 

我用這reader實例來操縱PDF,但最終的結果需要進行Base64編碼(我需要將它作爲文本BLOB插入到db2數據庫中)。我怎樣才能確保iText的輸出是Base64編碼的?

+0

你必須澄清,因爲現在你的問題沒有意義。 'PdfReader'不生成PDF,所以解釋你的問題的一種方法是:我怎樣才能使'PdfReader'接受使用base64編碼的INPUT。這個問題很容易回答。'PdfReader'與一個產生PDF的作者類('PdfCopy','PdfStamper',...)結合使用。解釋你的問題的另一種方法是,你想產生一個用base64編碼的PDF。這也很容易實現,但這與第一種解釋完全不同。總而言之,這個問題的質量很低。 –

+0

我使用PdfReader閱讀PDF,我必須將其轉換爲base64才能插入db2中的表中 – Vins

+0

那麼,您爲什麼不首先這麼說呢?請閱讀我的第二個答案。另外:如果你不需要改變PDF,那你爲什麼使用iText來編碼PDF?我重寫了你的問題,但有可能你甚至不需要iText。 –

回答

0

你的問題不清楚,或者至少含糊不清。

詢問如何在Base64中轉換PdfReader pdfReader?沒有任何意義,這就是爲什麼你的問題不清楚。你的問題可能是你有輸入使用Base64編碼,或者你想要輸出,你想用Base64編碼。這使你的問題變得模糊不清。如果INPUT

import com.itextpdf.text.pdf.codec.Base64; 
... 
PdfReader reader = new PdfReader(Base64.decode(INPUT)); 

您要使用的操作(路徑)的PDF文件

如果INPUTString表示使用Base64編碼的PDF文件,那麼你可以像這樣解碼結果被編碼爲Base64編碼字符串一個PDF,那麼你就可以做到這一點是這樣的:

import com.itextpdf.text.pdf.codec.Base64; 
PdfReader reader = new PdfReader(INPUT); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
PdfStamper stamper = new PdfStamper(reader, baos); 
// do stuff with stamper 
stamper.close(); 
String base64 = Base64.encode(baos.toByteArray()); 

可能有其他的方式來生產的Base64編碼輸出,如使用某種Base64OutputStream,但我更喜歡使用iText附帶的Base64類。

如果您不需要操作PDF,您甚至不需要iText。你可以簡單地使用這個問題的答案:Out of memory when encoding file to base64

UPDATE:

在這個答案評論

,你寫道:

我有這樣的:

byte[] bdata = blob.getBytes(1, (int) blob.length()); 
InputStream inputStream = blob.getBinaryStream(); 
String recuperataDaDb = convertStreamToString(inputStream); 
byte[] decompilata = Base64.decode(recuperataDaDb); 

我想在pdf文件中寫下這個「decompilata」whittext.jar

你有兩個選擇:

[1.]您不需要iText。你可以簡單地寫byte[]到一個文件如下所述:byte[] to file in Java

FileOutputStream stream = new FileOutputStream(path); 
try { 
    stream.write(bytes); 
} finally { 
    stream.close(); 
} 

[2]你看這個問題的答案:你渴望使用iText的

PdfReader reader = new PdfReader(decompilata); 
FileOutputStream fos = new FileOutputStream(pathToFile); 
PdfStamper stamper = new PdfStamper(reader, fos); 
stamper.close(); 

我很驚訝。你真的不需要iText來滿足你的要求。所有你需要的是如何編寫Java代碼來執行一些簡單的I/O的教育。

+0

再次提出一個沒有道理的問題。 byte []'的內容是什麼?如果你不回答這個問題,你不應該期待一個答案。也許它就像這裏解釋的一樣簡單:http://stackoverflow.com/questions/4350084/byte-to-file-in-java但是,當然,如果'byte []'不是一個真正的PDF文件(例如它是Base64編碼的),那麼答案會有所不同。 –

+0

我會更新我的答案。 –