2014-05-14 5 views
0

itext를 사용하여 pdf 파일을 생성하는 코드를 jsp에 성공적으로 작성했습니다. 그것은 잘 작동하지만 pdf를 즉시 생성하는 대신 부분적으로 생성합니다. 다른 탭이나 창으로 전환 한 다음 원래 탭으로 다시 전환 할 때만 전체 항목을 올바르게 표시합니다.itext를 사용하여 pdf를 생성하고 브라우저에 표시

해결책은 서버에 pdf 파일을 만들고 브라우저 창에서 열고 서버 메모리가 열리 자마자 서버 메모리에서 삭제하는 것입니다. 누구든지 저를 도울 수 있습니까?

는 [다음은 프로그램의 압축 된 근사합니다.]

<%@ page trimDirectiveWhitespaces="true" %> 
<%@ 
page import="java.servlet.*, 
javax.servlet.http.*, 
java.io.*, 
java.util.*, 
com.lowagie.text.pdf.*, 
com.lowagie.text.*" 
%> 

<%@ include file="connection.jsp" %> 
<% 
response.setContentType("application/pdf"); 
Document document = new Document(); 
try 
{ 
    ByteArrayOutputStream buffer = new ByteArrayOutputStream(); 
    PdfWriter.getInstance(document, buffer); 
    document.open(); 
    PdfPTable table = new PdfPTable(1); 
    table.addCell("1"); 
    table.addCell("2"); 
    table.addCell("3"); 
    table.addCell("4"); 
    table.addCell("5"); 
    table.addCell("6"); 
     document.add(table);   
    document.close(); 

    DataOutputStream dataOutput = new DataOutputStream(response.getOutputStream()); 
    byte[] bytes = buffer.toByteArray(); 
    response.setContentLength(bytes.length); 
    for(int i = 0; i < bytes.length; i++) 
     dataOutput.writeByte(bytes[i]); 

    dataOutput.flush(); 
    dataOutput.close(); 
    return; 
} 

catch(DocumentException e) 
{ 
    e.printStackTrace(); 
} 

%> 
+2

jsp에서 iText를 사용하는 이유가 불량한 것으로 간주됩니다. 오히려 서블릿을 사용하십시오. –

+0

@sankrish에 동의합니다 ... 서블릿을 사용해보고 알려주세요 ... –

답변

0

당신이 당신의 실제 코드를 복사 한 경우, 당신은 처음부터 손상된 PDF 파일을 만들 수 있습니다. 여기 예를 들어, 공백과 줄 바꿈을 도입하고있다 : 당신이 거기에 속하지 않는 PDF로 바이트를 도입됨에 따라

%><%@ include file="connection.jsp" %> 

이 필요한

%> 

<%@ include file="connection.jsp" %> 

가로 변경 될 수 있습니다.

또한 공백 또는 새 줄을 도입하는 순간 response.getOutputStream() 메서드가 암시 적으로 트리거되기 때문에 코드가 실제로 작동한다는 것이 놀랍습니다.

명시 적으로 출력 스트림을 가져올 때 "getOutputStream()가 이미이 응답에 대해 호출되었습니다"라고 말하면 java.lang.IllegalStateException이 표시됩니다.

모두 : JSP를 사용하여 이진 파일을 만드는 것은 좋지 않습니다. 서블릿을 사용해야합니다. 설명하는 동작은 깨진 PDF의 경우 일반적입니다. 제 생각에는 JSP를 사용하는 방식 때문에 PDF가 손상된 것 같습니다.

관련 문제