2013-06-13 6 views
0

jdbc를 사용하여 데이터베이스에서 데이터를 가져온 다음 iText를 사용하여 클라이언트 컴퓨터에서 다운로드 할 수있는 PDF 파일을 만듭니다. 응용 프로그램은 html/jsp로 코딩되어 있으며 Apache Tomcat에서 실행됩니다.iText를 사용하여 이미지를 PDF로 삽입하고 클라이언트 컴퓨터로 다운로드하는 방법은 무엇입니까?

response.getOutputStream을 사용하여 즉시 출력 PDF 파일을 만듭니다.

문제는

로 getOutputStream()가 이미 나는 이해

이 응답을 촉구되었다는 것을 저와 오류를 제공로서 지금, 나는이 문서에 이미지를 삽입 할 수 없다는 것입니다 이미지를 삽입하는 중에 Outputstream을 다시 호출하므로 오류가 발생합니다.

어떻게 문서에 이미지를 삽입하고 클라이언트 컴퓨터에서 다운로드 할 수있는 동적 PDF 파일을 생성 할 수 있습니까?

관련 코드 :

response.setContentType("application/pdf"); 
response.setHeader("Content-Disposition","attachment; filename=\"LicenseInfo.pdf\""); // Code 1 
Document document = new Document(); 

PdfWriter.getInstance(document, response.getOutputStream()); // Code 2 

Image image = Image.getInstance("logo.jpg"); 

document.open(); 

document.add(image); 

답변

1

미안 해요,하지만 당신은 당신이 복사 코드로, 모든 관련 코드가 표시되지 않는/붙여 넣기는 언급 예외에 대한 책임을지지 않습니다.

관련 부분은 JSP를 사용하고 있으며 9 장에 나열된 JSP와 관련된 중요한 경고를 읽지 않았기 때문에 my book입니다. 당신이 JSP를 쓸 때

, 당신은 아마 예를 들어 공백 및 들여 쓰기, 같은 : 당신이 iText를 사용하거나하지 않는 경우

<% //a line of code %> 
<% 
    // some more code 
%> 
<% // another line of code %> 
<% 
    response.getOutputStream(); 
%> 

이 관계없이 항상 예외 "getOutputStream() has already been called for this response"의 원인이됩니다. getOutputStream() 메소드는 JSP 스크립트에서 첫 번째 공백 문자를 도입 한 순간에 호출되었습니다. 아니 하나의 문자가 <%%> 마커 밖에 허용됩니다

<% //a line of code %><% 
    // some more code 
%><% // another line of code %><% 
    response.getOutputStream(); 
%> 

:

는이 문제를 해결하려면 모든 공백을 제거해야합니다. 더 나은 JSP 매뉴얼에서 설명했듯이, JSP를 사용하여 바이너리 파일을 생성해서는 안됩니다. 왜 안돼? JSP는 바이너리 파일의 임의의 장소에 공백 문자를 도입하기 때문에. 그 결과 파일이 손상됩니다. 대신 서블릿을 사용하십시오!

+0

당신의 제안에 감사드립니다. 그러나 나는 (선택의 여지가없는) JSP를 사용해야합니다. 둘째로 공백을 제거하려고했습니다. 내가 그렇게 할 때 내 PDF 파일이 생성되지만 데이터가 손상되었다고 말하면 열지 못합니다. –

+0

나는 다음을 사용하여 공백을 제거했습니다. <% @ page trimDirectiveWhitespaces = "true"%> –

+0

Er ... 완전히 잘못되었습니다. JSP 파일에서 공백을 수동으로 제거해야합니다. –

관련 문제