P2oldi Geschrieben 8. Mai 2008 Geschrieben 8. Mai 2008 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 Bild 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 Zitieren
Pinhead Geschrieben 9. Mai 2008 Geschrieben 9. Mai 2008 Ich wollte den Code so mal testen. Allerdings lässt der sich bei mir gar nicht ausführen. java.lang.Error: Unresolved compilation problems: The type Base64 is not visible The type Base64 is not visible Abscheinend ist die Base64 Implementierung im java.util.prefs nicht freigegeben Zitieren
Pinhead Geschrieben 9. Mai 2008 Geschrieben 9. Mai 2008 So hab mal ein bisschen experimentiert und damit hat es funktioniert import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; ....... //Input lesen File datei = new File("c:\\temp\\input.pdf"); FileInputStream fis = new FileInputStream(datei); byte[] temp = new byte[(int)datei.length()]; fis.read(temp,0,(int)datei.length()); //Konvertierung Input in Base64 String anhangb64 = new BASE64Encoder().encode(temp); //Base64 decodieren byte[] zielinhalt = new BASE64Decoder().decodeBuffer( anhangb64 ); //Output schreiben FileOutputStream fos = new FileOutputStream(new File("c:\\temp\\output.pdf")); fos.write(zielinhalt); ... [/PHP] Zitieren
P2oldi Geschrieben 9. Mai 2008 Autor Geschrieben 9. Mai 2008 vielen Dank Pinhead, es lag am FileInputStream, damit klappts einwandfrei. Hab also den "nur" den falschen Reader fürs Einlesen benutzt Zitieren
kingofbrain Geschrieben 9. Mai 2008 Geschrieben 9. Mai 2008 Servus, um es vielleicht für andere noch klarer zu sagen: Du hast nicht den falschen Reader verwendet, dass Du einen Reader verwendet hast, war falsch. Ein Reader (für Writer gilt das selbe) ist für zeichenartige Datenstrukturen geeignet (Text), die Streams sind für Binärdaten gedacht. Ein Reader versucht immer, einen Input in Zeichen umzuwandeln. Und das ist in der Regel nicht gewollt. Zu meiner Schande muss ich gestehen, dass ich gar nicht geblickt hab, dass Du einen Reader verwendet hast. Da hatte der Nadelkopf wohl nadelscharfe Augen. Schöne Grüße, Peter Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.