EDIT : 아래 답변에서 my working code을 참조하십시오.Java Bean에서 JSP로 PDF 파일을 반환
간단히: 나는 자바 빈의 메소드를 호출하는 JSP 파일이 있습니다. 이 메서드는 PDF 파일을 생성하고 이론적으로 사용자가 다운로드 할 수 있도록 JSP로 반환합니다. 그러나 PDF를로드 할 때 Adobe Reader는 다음 오류를 표시합니다. 파일이 '% PDF-'로 시작하지 않습니다..
세부 사항 : 지금까지 JSP가 메서드를 성공적으로 호출하면 PDF가 만들어지고 JSP에서 사용자에게 완성 된 PDF 파일이 제공됩니다. 그러나 Adobe Reader가 PDF 파일을 열려고하면 오류 메시지가 표시됩니다. 파일이 '% PDF-'로 시작하지 않습니다.. 그냥 좋은 측정을 위해, 나는 그것을 확인할 수 있도록 내 바탕 화면에 PDF를 만드는 방법을 가지고; Windows 내에서 정상적으로 열면 괜찮아 보입니다. 그러면 JSP의 출력이 다른 이유는 무엇입니까?
PDF를 만들려면 Apache FOP을 사용하고 있습니다. 필자는 가장 기본적인 예제 중 하나를 따르고 있습니다. 단, PDF를 로컬 시스템에 저장하는 대신 결과 JSP를 JSP로 전달하는 경우는 예외입니다. 나는 그들의 basic usage pattern과 this example code을 따라왔다.
<%@ taglib uri="utilTLD" prefix="util" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x" %>
<%@ page language="java" session="false" %>
<%@ page contentType="application/pdf" %>
<%-- Construct and initialise the PrintReportsBean --%>
<jsp:useBean id="printReportsBean" scope="request" class="some.package.printreports.PrintReportsBean" />
<jsp:setProperty name="printReportsBean" property="*"/>
<c:set scope="page" var="xml" value="${printReportsBean.download}"/>
가 여기 내 자바 콩 방법입니다 :
여기 내 JSP 파일의
//earlier in the class...
private static FopFactory fopFactory = FopFactory.newInstance();
public File getDownload() throws UtilException {
OutputStream out = null;
File pdf = new File("C:\\documents and settings\\me\\Desktop\\HelloWorld.pdf");
File fo = new File("C:\\somedirectory", "HelloWorld.fo");
try {
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
out = new FileOutputStream(pdf);
out = new BufferedOutputStream(out);
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer(); //identity transformer
Source src = new StreamSource(fo);
Result res = new SAXResult(fop.getDefaultHandler());
transformer.transform(src, res);
return pdf;
} catch (Exception e) {
throw new UtilException("Could not get download. Msg = "+e.getMessage());
} finally {
try {
out.close();
} catch (IOException io) {
throw new UtilException("Could not close OutputStream. Msg = "+io.getMessage());
}
}
}
나는 이것이 매우 구체적인 문제이지만, 어떤 도움이 많이 주시면 감사하겠습니다 실현!
trimDirectiveWhitespaces는 매우 유용합니다. 그러나 일부 인터넷 검색은 JSP 2.1 이후에만 나타납니다 (꽤 새로울 것입니다). –