2012-05-28 4 views
0

서블릿에서 생성 된 PDF를 인쇄하려고 할 때 google-chrome의 인쇄 미리보기에 문제가 있습니다. 오류는 기본 pdf 플러그인에만 표시되며 Adobe pdf 플러그인에서 작동합니다. 서블릿에서 PDF 출력 코드 : 크롬 오류 로그크롬 서블릿에서 PDF 인쇄 미리보기 오류

response.setContentType("application/pdf"); 
     response.setHeader("Cache-Control","public"); 
     response.setHeader("Content-Disposition", "inline; filename=\"crreport.pdf\""); 

     /*if (byteArrayInputStream != null){ 
      byteArray = new byte[1024]; 
      while((bytesRead = byteArrayInputStream.read(byteArray)) != -1) { 
       response.getOutputStream().write(byteArray, 0, bytesRead); 
      } 
     }else { 
      throw new Exception("byteArrayInputStream is null!"); 
     }*/ 

     if (byteArrayInputStream != null){ 
      byteArray = new byte[byteArrayInputStream.available()]; 
      byteArrayInputStream.read(byteArray); 
      response.setContentLength(byteArray.length); 

      response.getOutputStream().write(byteArray); 

     }else { 
      throw new Exception("byteArrayInputStream is null!"); 
     } 

     System.out.println("End"); 
     response.getOutputStream().flush(); 
     response.getOutputStream().close(); 

내가 생성 된 PDF 미리 볼 : 예기치 않은 MIME 타입 응용 프로그램/PDF (예상 응용 프로그램/X-구글 - 크롬 - 인쇄 미리보기 -와 무시 플러그인을 pdf)

크롬 페이지의 오른쪽 아래에 기본 저장 버튼이있는이 PDF를 저장하고 로컬 컴퓨터에서 열면 미리보기가 작동합니다.

나는 googleit을 시도했지만 크롬에 대한 많은 질문에 pdf 플러그인 캔트는 유용한 정보를 찾지 못했습니다. 이것이 어떻게 고칠 수있는 제안?

답변

0

마지막으로, 제 경우의 주요 문제가 무엇인지 알아 냈습니다. 나는 이클립스 플러그인에 대한 크리스탈 보고서를 사용하여 PDF 보고서를 생성하려고했습니다. CR4E에 의해 생성 된 byteArrayInputStream은 Chrome 기본 PDF 플러그인에서만 작동하지 않는 방식으로 손상된 것으로 보입니다. 그것은 iText 라이브러리와 함께 해결할 수 있습니다. CR4E byteArrayInputStream 기반의 iText를 사용하여 조립 된 PDF는 일반적으로 미리보고 인쇄 할 수 있습니다.

0

파일 길이를 사용할 수 없습니다. 정의 상으로는 차단하지 않고 즉시 읽을 수있는 부분입니다 (= 다음 부분을 읽을 때까지 기다림). 그것은 종종 길이를 줄 수 있습니다. 응답의 출력 스트림을 닫지 않아야합니다.

if (byteArrayInputStream == null){ 
     throw new Exception("byteArrayInputStream is null!"); 
    } 
    ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream(); 
    org.apache.commons.io.IOUtils.copy(byteArrayInputStream, byteArrayOS); 

    byteArray = byteArrayOS.toByteArray(); 
    response.setContentLength(byteArray.length); 
    response.getOutputStream().write(byteArray); 

    System.out.println("End"); 
    response.getOutputStream().flush(); 
    //response.getOutputStream().close(); 

오류의 원인 : 두 플러그인의 서로 다른 리소스 사용량에 따라 다르게 동작 할 수 있습니다.

+0

표시 한 코드의 오류를 수정했습니다. 귀하의 의견에 감사드립니다,하지만 그것은 크롬 인쇄 미리보기와 함께 주요 문제를 해결하지 못했습니다. – Konstantin