Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

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]

vielen Dank Pinhead,

es lag am FileInputStream, damit klappts einwandfrei. Hab also den "nur" den falschen Reader fürs Einlesen benutzt :)

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.