2017-11-13 1 views
1

다음 코드는 텍스트 파일에서는 작동하지만 pdf 파일에서는 작동하지 않습니다. 내 파일에 영어와 그리스 문자가 포함되어 있습니다. pdf 파일을 byteStream으로 변환하고 byteStreamString 형식으로 변환하여 database에 저장하려고합니다. 이 후 저장된 문자열에서 pdf을 만들려고합니다.pdf to byteArray - byteArray to String - byteArray - byteArray to pdf

어떤 도움이 필요합니까?

public class PdfToByteStream { 

    public static byte[] convertDocToByteArray(String path)throws FileNotFoundException, IOException{ 
     File file = new File(path); 

     FileInputStream fis = new FileInputStream(file); 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     byte[] buf = new byte[1024]; 
     try { 
      for (int readNum; (readNum = fis.read(buf)) != -1;) { 
       bos.write(buf, 0, readNum); 
      } 
     } catch (IOException ex) { 
      Logger.getLogger(genJpeg.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     byte[] bytes = bos.toByteArray(); 
     return bytes; 
    } 

    public static void convertByteArrayToDoc(String path, byte[] bytes)throws FileNotFoundException, IOException { 
     File someFile = new File(path); 
     FileOutputStream fos = new FileOutputStream(someFile); 
     fos.write(bytes); 
     fos.flush(); 
     fos.close(); 
    } 

    public static void main(String[] args) throws FileNotFoundException, IOException { 
     byte[] bytes = convertDocToByteArray("path/test.pdf"); 

     String stream = new String(bytes, "UTF-8");//ok for txt 
     byte[] newBytes = stream.getBytes(Charset.forName("UTF-8")); // ok for txt 

     convertByteArrayToDoc("path/newTest.pdf", newBytes); 
    } 
} 
+0

https://en.wikipedia.org/wiki/UTF-8#Invalid_byte_sequences 방과 후 칠판 100 배에 – JimmyB

+3

쓰기 : '문자열'은 바이너리 데이터의 컨테이너가 아닙니다. ' – EJP

답변

1

Base64 인코딩을 사용하면 PDF를 문자열로 변환 할 수 있습니다. 여기

을 변경해야하는 코드의 관련 부분입니다 :

import java.util.Base64; 

... 

public static void main(String[] args) throws FileNotFoundException, IOException { 
    byte[] bytes = convertDocToByteArray("some.pdf"); 
    String stream = Base64.getEncoder().encodeToString(bytes); 
    byte[] newBytes = Base64.getDecoder().decode(stream); 
    convertByteArrayToDoc("some_new.pdf", newBytes); 
} 
+0

고마워. 너는 내 시간을 절약한다! – xarlap