2016-04-15 2 views
-3

ich eine vorhandene PDF lese (INPUT) mit iText:Wie kann ich produzieren eine Base64 codiert PDF, die von iText des PdfReader gelesen wird

PdfReader reader = new PdfReader(INPUT); 

Ich bin mit diesem reader Beispiel die PDF zu manipulieren, aber das Ende Das Ergebnis muss Base64-codiert sein (ich muss es als Text-BLOB in eine db2-Datenbank einfügen). Wie kann ich sicherstellen, dass die Ausgabe von iText Base64-codiert ist?

+0

Sie müssen klären, denn im Moment macht Ihre Frage keinen Sinn. 'PdfReader' erzeugt kein PDF, daher ist eine Möglichkeit, Ihre Frage zu interpretieren: Wie kann ich' PdfReader' veranlassen, INPUT zu akzeptieren, das mit base64 kodiert ist? Diese Frage ist leicht zu beantworten.'PdfReader' wird in Kombination mit einer Writer-Klasse (' PdfCopy', 'PdfStamper', ...) verwendet, die PDF erzeugt. Eine andere Möglichkeit, Ihre Frage zu interpretieren, besteht darin, dass Sie ein in base64 codiertes PDF erstellen möchten. Das ist auch leicht zu erreichen, aber es ist eine ganz andere Frage als die erste Interpretation. Alles in allem ist die Qualität dieser Frage gering. –

+0

Ich lese ein PDF mit PdfReader, und ich muss es in base64 konvertieren, um in eine Tabelle in db2 einfügen – Vins

+0

Dann warum hast du es nicht gesagt? Bitte lies meine zweite Antwort. Außerdem: Wenn Sie das PDF nicht ändern müssen, warum verwenden Sie iText, um das PDF zu kodieren ??? Ich habe deine Frage umgeschrieben, aber es besteht die Chance, dass du iText nicht brauchst. –

Antwort

0

Ihre Frage ist unklar, oder zumindest zweideutig.

Fragen Wie kann ich PdfReader pdfReader in Base64 konvertieren? macht keinen Sinn, und deshalb ist Ihre Frage unklar. Ihr Problem ist wahrscheinlich, dass Sie entweder Eingabe haben, die mit Base64 codiert ist, oder dass Sie Ausgabe möchten, die Sie mit Base64 codiert haben möchten. Das macht deine Frage mehrdeutig.

Wenn INPUT ist String, die eine PDF-Datei repräsentiert Base64 codiert sind, dann können Sie es wie folgt entschlüsseln:

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

Wenn INPUT ist (den Pfad zu), um eine PDF-Datei, die Sie mit so manipulieren wollen führen Sie eine PDF, die als Base64 String codiert ist, dann können Sie dies wie folgt aus:

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()); 

Es können auch andere Möglichkeiten, die Base64-Ausgabe zu erzeugen, zB mit einer Art von Base64OutputStream, aber ich bevorzuge die Base64 Klasse verwenden, die mit iText geliefert wird.

Wenn Sie das PDF nicht bearbeiten müssen, brauchen Sie nicht einmal iText. Sie können einfach die Antwort auf diese Frage verwenden: Out of memory when encoding file to base64

UPDATE:

in einem Kommentar zu dieser Antwort, Sie schrieb:

Ich habe dies:

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

Ich möchte schreibe das "decompilata" in pdf-Datei mit itext.jar

Sie haben zwei Optionen:

[1.] Sie brauchen iText nicht. Sie können einfach die byte[] in eine Datei schreiben, wie hier beschrieben: byte[] to file in Java

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

[2.] Sie lesen die Antwort auf diese Frage:

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

Ich bin sehr überrascht von Ihrem Eifer iText zu verwenden . Sie brauchen iText wirklich nicht, um Ihre Anforderung zu erfüllen. Alles, was Sie brauchen, ist eine Schulung darüber, wie Sie Java-Code schreiben, um einige einfache I/O durchzuführen.

+0

Noch einmal stellen Sie eine Frage, die keinen Sinn ergibt. Was ist der Inhalt von 'byte []'? Wenn Sie diese Frage nicht beantworten, sollten Sie keine Antwort erwarten. Vielleicht ist es so einfach wie das, was hier erklärt wird: http://stackoverflow.com/questions/4350084/byte-to-file-in-java Aber natürlich, wenn 'byte []' keine tatsächliche PDF-Datei ist (z. B. es ist Base64-codiert), dann wird die Antwort anders sein. –

+0

Ich werde meine Antwort aktualisieren. –

Verwandte Themen