P2oldi
2008-05-08, 16:51:32
Tag zusammen,
ich sitze hier grade über einem Problem, wo mir selbst das allwissende Googel nicht so recht weiterhelfen mag...oder ich frag einfach falsch :)
Problem:
Ich habe ein PDF-File (2 Seiten, die jeweils ein großes eingescanntes Bilde enthalten). Dieses PDF muß ich in ein XML-File eingebettet verschicken.
Für diesen Zweck schien mir eine Base64-Codierung angebracht, damit das auch korrekt an der Empfangsstelle eintrifft.
Das funktioniert soweit auch ganz gut, das PDF kommt an und ich kann es decodieren / abspeichern, aber es ist einfach nur ein 2-seitiges, leeres PDF, d.h. die Bilder sind weg :( Und ohne Bilder nützt mir das PDF natürlich auch nix mehr.
Hab dann zur Kontrolle in einer Methode das PDF eingelesen, nach Base64 codiert, sofort wieder decodiert und das Ergebnis in ein File ausgegeben. Siehe da, auch hier sind die Bilder verschwunden. Das Ergebnis hat aufs Byte genau die gleiche Größe, läßt sich wunderbar öffnen...bis auf die Bilder also alles schick.
Das bringt mich zu der Vermutung, daß ich irgendwas mit der Base64-Codierung versemmelt habe, bzw. die buggy ist.
hier mal die Methode, mit der ich getestet habe:
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//Input lesen
File datei = new File("c:\\temp\\input.pdf");
FileReader fr = new FileReader(datei);
String inhaltstring = new String();
char[] temp = new char[(int)datei.length()];
int chr = fr.read(temp, 0, (int)datei.length());
inhaltstring = String.copyValueOf(temp);
//Konvertierung Input in Base64
String anhangb64 = Base64.byteArrayToBase64(inhaltstring.getBytes());
//Base64 decodieren
byte[] zielinhalt = Base64.base64ToByteArray(anhangb64);
//Output schreiben
FileOutputStream fos = new FileOutputStream(new File("c:\\temp\\output.pdf"));
fos.write(zielinhalt);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
die zur Codierung genutzte Base64 liegt in java.util.prefs.Base64.
Falls jemand dazu ne Idee, oder sogar noch besser ne Lösung hat wäre ich sehr dankbar,
viele Grüße
ich sitze hier grade über einem Problem, wo mir selbst das allwissende Googel nicht so recht weiterhelfen mag...oder ich frag einfach falsch :)
Problem:
Ich habe ein PDF-File (2 Seiten, die jeweils ein großes eingescanntes Bilde enthalten). Dieses PDF muß ich in ein XML-File eingebettet verschicken.
Für diesen Zweck schien mir eine Base64-Codierung angebracht, damit das auch korrekt an der Empfangsstelle eintrifft.
Das funktioniert soweit auch ganz gut, das PDF kommt an und ich kann es decodieren / abspeichern, aber es ist einfach nur ein 2-seitiges, leeres PDF, d.h. die Bilder sind weg :( Und ohne Bilder nützt mir das PDF natürlich auch nix mehr.
Hab dann zur Kontrolle in einer Methode das PDF eingelesen, nach Base64 codiert, sofort wieder decodiert und das Ergebnis in ein File ausgegeben. Siehe da, auch hier sind die Bilder verschwunden. Das Ergebnis hat aufs Byte genau die gleiche Größe, läßt sich wunderbar öffnen...bis auf die Bilder also alles schick.
Das bringt mich zu der Vermutung, daß ich irgendwas mit der Base64-Codierung versemmelt habe, bzw. die buggy ist.
hier mal die Methode, mit der ich getestet habe:
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//Input lesen
File datei = new File("c:\\temp\\input.pdf");
FileReader fr = new FileReader(datei);
String inhaltstring = new String();
char[] temp = new char[(int)datei.length()];
int chr = fr.read(temp, 0, (int)datei.length());
inhaltstring = String.copyValueOf(temp);
//Konvertierung Input in Base64
String anhangb64 = Base64.byteArrayToBase64(inhaltstring.getBytes());
//Base64 decodieren
byte[] zielinhalt = Base64.base64ToByteArray(anhangb64);
//Output schreiben
FileOutputStream fos = new FileOutputStream(new File("c:\\temp\\output.pdf"));
fos.write(zielinhalt);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
die zur Codierung genutzte Base64 liegt in java.util.prefs.Base64.
Falls jemand dazu ne Idee, oder sogar noch besser ne Lösung hat wäre ich sehr dankbar,
viele Grüße