2013-02-12 5 views
0

"CONTENIDO"라는 노드가있는 XML 파일이 있습니다.이 노드에는 base64 문자열로 인코딩 된 PDF 파일이 있습니다.base64 문자열을 디코딩하는 중 오류가 발생했습니다.

이 노드를 읽고 base64의 문자열을 디코드 한 다음 PDF 파일을 내 컴퓨터로 다운로드하려고합니다.

문제는 파일이 원본 PDF와 동일한 크기 (KB)로 다운로드되고 페이지 수가 동일하지만 모든 페이지가 아무런 내용없이 공백 상태이며 파일을 열 때 문제가 발생한다는 것입니다. 다운로드 한 파일에 "unknown uniqueive 806.6n"이라는 오류가있는 팝업이 나타납니다. 그게 무슨 뜻인지 모르겠다.

문자열을 디코드 할 때 다른 방법으로 인터넷에서 솔루션을 찾으려고했지만 항상 같은 결과가 나타납니다. XML은 기본입니다. XML은 기본입니다. 확인은 base64 문자열을 확인한 후 확인입니다. 또한 코드를 디버깅했습니다. 그리고 base64 문자열을 읽는 var "fichero"의 내용도 Ok이므로 어떤 문제인지 모릅니다. 사전에

package prueba.sap.com; 

import java.io.ByteArrayOutputStream; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.transform.Transformer; 
import javax.xml.transform.TransformerFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 

import sun.misc.BASE64Decoder; 

import javax.xml.bind.DatatypeConverter; 

public class anexoPO { 


    public static void main(String[] args) throws Exception { 
     FileInputStream inFile = 
       new FileInputStream("C:/prueba/prueba_attach_b64.xml"); 
     FileOutputStream outFile = 
       new FileOutputStream("C:/prueba/salida.pdf");  
     anexoPO myMapping = new anexoPO(); 
     myMapping.execute(inFile, outFile); 
     System.out.println("Success"); 
     System.out.println(inFile);   

    } 

    public void execute(InputStream in, OutputStream out) 
    throws com.sap.aii.mapping.api.StreamTransformationException { 

     try {  

      //************************Code To Generate The XML Parsing Objects*****************************//  
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      Document doc = db.parse(in); 
      Document docout = db.newDocument(); 

      NodeList CONTENIDO = doc.getElementsByTagName("CONTENIDO"); 
      String fichero = CONTENIDO.item(0).getChildNodes().item(0).getNodeValue(); 

      //************** decode *************/ 

       //import sun.misc.BASE64Decoder; 
       //BASE64Decoder decoder = new BASE64Decoder(); 
       //byte[] decoded = decoder.decodeBuffer(fichero); 

       //import org.apache.commons.codec.binary.*; 
       //byte[] decoded = Base64.decode(fichero); 

       //import javax.xml.bind.DatatypeConverter; 
       byte[] decoded = DatatypeConverter.parseBase64Binary(fichero); 

      //************** decode *************/ 

      String str = new String(decoded); 
      out.write(str.getBytes()); 

      } catch (Exception e) { 
       System.out.print("Problem parsing the file"); 
       e.printStackTrace(); 
       }  
    } 

} 

감사 :

내 코드입니다. 확실히

답변

2

:

out.write(decoded); 
out.close(); 

문자열 모든 바이트를 대표 할 수 없으며, PDF 바이너리입니다.

또한이 패키지는 모든 곳에 존재하지 않으므로 sun.misc.BASE64Decoder의 가져 오기를 제거하십시오. 그것은 컴파일러에 의해 제거 될 수 있지만, 나는 그것에 내기를하지 않을 것이다.

+0

감사합니다. 이게 내 문제를 해결했습니다. – Richal

관련 문제