2009-12-21 2 views
3

PDF 문서를 iframe에만 JSF 페이지로 표시하는 데 도움을 줄 수 있습니까? 사전에iFrame의 jsf 페이지에 PDF 문서를 표시하는 방법

감사합니다,

수레 쉬

+0

그래서, jsp 또는 jsf? – Bozho

+0

그리고 새 창이나 iframe에서 어디에서 표시하고 싶습니까? – Bozho

+0

관련 : http://stackoverflow.com/questions/1776142/getoutputstream-has-already-been-called-for-this-response – skaffman

답변

8

그냥 사용 <iframe> 일반적인 방법 :

문제가 아니라 PDF가 WebContent에있는 것이 아니라 어딘가에 설치하지 말이면
<iframe src="/path/to/file.pdf"></iframe> 

그렇지 않으면 디스크 파일 시스템이나 심지어는 데이터베이스에, 그럼 당신은 기본적으로 가져 와서 대답 OutputStream에 쓰는 Servlet이 필요합니다 :

response.reset(); 
response.setContentType("application/pdf"); 
response.setContentLength(file.length()); 
response.setHeader("Content-disposition", "inline; filename=\"" + file.getName() + "\""); 
BufferedInputStream input = null; 
BufferedOutputStream output = null; 

try { 
    input = new BufferedInputStream(new FileInputStream(file), DEFAULT_BUFFER_SIZE); 
    output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE); 

    byte[] buffer = new byte[DEFAULT_BUFFER_SIZE]; 
    int length; 
    while ((length = input.read(buffer)) > 0) { 
     output.write(buffer, 0, length); 
    } 
} finally { 
    close(output); 
    close(input); 
} 

당신이 this article에 유사한 서블릿의 완전한 예제를 찾을 수 있습니다 대신이 서블릿 : 예컨대 :

<iframe src="/path/to/servlet/file.pdf"></iframe> 

를 가리 단지 수 있습니다 이쪽으로.

도 JSF 1.2 이상을 사용한다고 가정하고 JSF에서 잘 작동합니다.

<f:verbatim><iframe src="/path/to/servlet/file.pdf"></iframe></f:verbatim> 
+0

내가 틀렸다면 나에게 맞는 서블릿을 web.xml에 등록하지 않아도됩니다. 서블릿 3.0, 맞습니까? 이 '@WebServlet (name = "pdfHandler", urlPatterns = { "/ pdfHandler"})'을 실행하고''을 시도했지만 서블릿이 호출되지 않았습니다. . 기묘한. 왜 이런 식으로 행동하는지, BalusC? –

+1

@Harry : 그러면 URL이 잘못되었습니다. 컨텍스트 경로를 고려 했습니까? 당신의 예제에서는 웹 애플리케이션이 ROOT에 배치 될 것으로 기대합니다. 편집 : 오, 기다려, 귀하의 URL 패턴'/ pdfHandler/*'요청 매개 변수 대신 여분의 경로 정보 URL을 받아 들일 수있다. – BalusC

+0

그래, 실제로'http : // localhost : 8080/MyNote-war/pdfHandler'라는 URL 전체를 사용해야한다.'/ pdfHandler'로 충분할 것이라고 생각했다. –

1

내가 당신을 추천 : JSF 1.1 이상에서는 그렇지 않으면 출력에 탈구 될 것 같은 그들은 JSF 컴포넌트 트리로 이동합니다 있도록 <f:verbatim> 내부 <iframe> 같은 일반 바닐라 HTML 요소를 포장해야 봐야 http://www.jpedal.org/입니다. 각 PDF 페이지를 이미지로 변환하여 브라우저에 개별적으로 전달할 수 있습니다.

이 방법은 pdf가 절대로 클라이언트에 전송되지 않으므로 응용 프로그램에 대해보다 안전합니다.

+0

물론 그들은 무료가 아닙니다. D 실제로는 꽤 비쌉니다. –

+0

** "이 방법은 pdf가 절대로 보내지 않기 때문에 응용 프로그램에 더 안전합니다. 클라이언트 "** 어째서?! 브라우저에 표시되는 모든 것이 실제로 처음으로 클라이언트 시스템에 다운로드되는 것이 아닙니까? 그리고 여기에는 모든 CSS, js, 이미지, html 파일이 포함됩니다! – Nabeel

+0

모든 페이지가 jpg로 렌더링되고 PDF는 최종 사용자가 "직접"액세스 할 수 없습니다. 물론 그는 "아날로그 구멍"을 활용하고 모든 단일 페이지를 다운로드 할 수 있습니다. 그러나 사용자가 전체 문서를 탐색해야하므로이 작업은 다소 시간이 걸릴 수 있습니다. 또한이 정보를 서버에 등록하고 적절한 조치를 취할 수 있습니다. –

관련 문제