"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();
}
}
}
감사 :
이
내 코드입니다. 확실히
감사합니다. 이게 내 문제를 해결했습니다. – Richal