2016-08-26 3 views
2

요청한 사용자에게 PDF 문서를 반환하는 서블릿이 있습니다. 브라우저에서 호출하면 PDF 문서가 자동으로 다운로드됩니다. 이제 자바 (서블릿이 아닌 독립형 코드)에서이 서블릿을 호출해야합니다. 이 Java 코드가 PDF 문서를 가져 오면 Apache PDF Box API를 사용하여 이미지로 변환해야합니다.BufferedReader를 파일로 변환

내 Java 코드의 모습입니다. 바이트를 화면에 씁니다.

String pdfFileName = "myfile.pdf"; 
PDDocument document = PDDocument.load(new File(pdfFileName)); 

이 지금은이 두 그래서 메모리 (다운로드 한 PDF 파일이 선호하는 것을하지 않음을 결합해야처럼

URL url = new URL("http://localhost:8080/Stream/Document&type=pdf"); 
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
String line = in.readLine(); 
System.out.println(line); 
in.close(); 

이 코드는 이미지로 변환하는 방법은 보인다 파일 시스템에 쓰기)는 JPG로 변환됩니다. 따라서 하드 코딩 된 파일 이름을 전달하는 대신 BufferedReader 객체를 File 객체로 변환하고 PDDocument의 입력으로 전달해야합니다.

이 전환이 어떻게 발생하는지 알 수 없습니다.

+1

힌트 : https://pdfbox.apache.org/docs/2.0.2/javadocs/org/apache/pdfbox/ pdmodel/PDDocument.html # load (java.io.InputStream) (그리고 ** InputStream ** Reader) –

+1

첫 번째 실수는 PDF 파일이 문자 데이터가 아니며'Reader'가 아닌'InputStream'으로 읽어야한다는 것입니다. . – EJP

답변

1

From the docs, PDDocument 또한 바이트 배열 또는 InputStream에서로드 할 수 있습니다.

따라서 url의 입력 스트림을 사용하고 PDDocument.load(InputStream)으로 전달하면됩니다.

+0

다음을 시도했습니다. [코드] \t URL url = 새 URL ("http : // localhost : 8080/Stream/Document & type = pdf"); \t \t InputStream in = url.openStream(); \t \t PDDocument document = PDDocument.load (in); \t \t document.close(); [/ 코드] 하지만 나에게 아래의 오류를 제공 [코드] 때 java.io.IOException : 오류 : 헤더가 포함되어 있지 않습니다 VERSIONINFO org.apache.pdfbox.pdfparser.PDFParser.parse에서 \t (PDFParser 된 .java 244)에서 org.apache.pdfbox.pdmodel.PDDocument.load \t (PDDocument.java:973) org.apache.pdfbox.pdmodel.PDDocument.load에서 \t (PDDocument.java:875) [/ 코드] – swati

+2

서블릿이 PDF가 아닌 데이터를 보내는 것으로 보입니다. 일반 PDF 뷰어로 해당 PDF를 열 수 있습니까? –

1

load(InputStream input) (https://pdfbox.apache.org/docs/2.0.2/javadocs/org/apache/pdfbox/pdmodel/PDDocument.html#load(java.io.InputStream))을 사용하면 직접 url.openStream()을 넘겨 줄 수 있습니다.

UPDATE : 틸만 하우 쉐어의 의견을 고려하는 당신은 try-with-resources 사용할 수 있습니다

final URL url = new URL("http://localhost:8080/Stream/Document&type=pdf"); 
    final PDDocument document; 
    try (InputStream urlStream = url.openStream()) { 
     document = PDDocument.load(urlStream); 
    } 
+1

스트림을 닫는 것을 잊지 마세요. –