Eine als Text String vorliegende PDF Datei (UUEncoded) darstellen

Hallo,

ich kämpfe mich schon seit einiger Zeit mit einem Problem ab, bei dem ich Eure Hilfe brauche.

Ich lese aus einem ASCII-File einen Text ein.
Dieser Text (ist entweder direkt ein PDF-Dokument oder ein UUEncodedes PDF Dokument) sollte als PDF Dokument dargestellt werden.

Das Textfile beinhaltet folgenden String (=UUEncoded PDF gekürzt)


begin 644 pdf1.pdf\x0D\\x0A\M)5!$1BTQ+C,-"B7BX\E\_3#0H-"C$@,"!O8FH-"CP\E\#0HO5'EP92`O0V%T86QO\x0D\\x0A\M9PT*+T]U=\T\QI;F5S(#(@,"!2#0HO4\T\%G97,@,R`P(%(-"CX\S\#0IE;F1O8FH-\x0D\\x0A\M"@T*,B`P(\T\]B:@T*/#P-"B]4>7!E("]/=71L:6YE<PT*+T-O=6YT(#`-"CX\S\\x0D\\x0A\M#0IE;F1O8FH-"@T*,R`P(\T\]B:@T*/#P-"B]4>7!E("]086=E<PT*+T-O=6YT\x0D\\x0A\M(#$-"B]+:61S(%L@-"`P(%(@72`-"CX\S\#0IE;F1O8FH-"@T*-"`P(\T\]B:@T*\x0D\\x0A\M/#P-"B]4>7!E("]086=E#0HO4\T\%R96YT(#,@,"!2#0HO4F5S;W5R8V5S(#P\E\\x0D\\x0A\M#0HO1F]N="`\E\/`T*+T8Q(#<@,"!2(`T*+T8R(#@@,"!2(`T*/CX-"B]83V)J\x0D\\x0A\M96-T(#P\E\#0HO1S$@.2`P(%(-"B]',B`Q,"`P(%(-"CX\S\#0HO4')O8

ich müsste jetzt die Zeichen “\X0D” und “\x0A” gegen “\r” bzw. "
" ersetzen.
Das gelingt mir nicht.
Kann mir hier jemand einen Tipp geben?

segment: ist der eingelesene String aus der Textdatei
outfile: dort schreibe ich den geänderten Text in eine Datei zurück

public void strip(String segment, String outfile) throws IOException {
		
		boolean stop;
		
		StringReader fr = new StringReader(segment);
		BufferedReader br = new BufferedReader(fr);
		
		
		
		String line =null;
		while ((line = br.readLine()) != null) {
			
			   if (line.contains("\\x0A\\")) {
					log.info("Found String");
					line=line.replaceAll("\\\\x0D\\\\", "\
");
					line=line.replaceAll("\\\\x0A\\\\", "\\r");
					
				} else {
					log.info("not found");
				}
					
			log.info(line);

			
		    FileWriter fstream = new FileWriter(outfile);
	        BufferedWriter out = new BufferedWriter(fstream);
	        out.write(line);
	        //Close the output stream
	        out.close();
			
		}
	}

Danke

GGK

als Ersetzung schreibe nur "
", das ist dann ein Zeilenumbruch, ein einzelnes Zeichen (String-Länge 1)
"
" ist nach Compiler ein \ und ein n, ein escaptes n als zwei Zeichen, das hat gar keine Bedeutung für RegEx, jedenfalls beim Ersetzungsfall, deswegen wird mit schlichten n ersetzt
"\
" ist nach Compiler widerum interessant, 2x \ (und ein n), es kommt dann ein \ (und das n) in der Ersetzung an

  1. nutze replace() und nicht replaceAll(), denn replaceAll() erwartet ein RegEx-muster
  2. du hast einfach zu viele escapes drin
    die condierungen sind nur “\xHH”, du suchst in deinem replaceAll() aber nach der codierung “\xHH\”, und das wird natürlich nicht gefunden
  3. wie slater schon angemerkt hat : du willst ja nicht die zeichenfolge "
    " in den output schreiben sondern das steuerzeichen "
    " 0x0A, also musst du das auch so in den code schreiben
    die korrekte zeile wäre dann also

line=line.replace("\x0D\", “\r”).replace("\x0A\", "
");

Danke Euch…das war die Lösung!

GGK