2014-07-22 2 views
0

플라잉 받침판을 사용하여 PDF로 변환하려는 jsp 파일이 있습니다. 여기 jsp를 플라잉 받침 접시를 사용하여 PDF로 변환

<%@page contentType="text/html" pageEncoding="UTF-8" isELIgnored="false"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ taglib prefix="display" uri="http://displaytag.sf.net/el" %> 
<!DOCTYPE html> 
<% 
String path = request.getContextPath(); 
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; 
%> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>JSP Page</title> 
</head> 
<body> 
    <form name="testDBForm" action="<%=basePath%>/TestDatabase" method="post" onsubmit="return true"> 
     <input type="submit" id="btnInsert" value="btnInsert" name="btnInsert" text="INSERT"/> 
     <input type="submit" id="btnSelect" value="btnSelect" name="btnSelect" text="SELECT"/> 
     <input type="submit" id="btnDelete" value="btnDelete" name="btnDelete" text="DELETE"/> 
     <input type="submit" id="btnUpdate" value="btnUpdate" name="btnUpdate" text="UPDATE"/> 
    </form> 
    <c:if test="${not empty message}"> 
     <h1>${message}</h1> 
    </c:if> 
    <c:if test="${not empty insert}"> 
     <h1>Insert: ${message}</h1> 
    </c:if> 
    <c:if test="${not empty select}"> 
     <h1>Select: ${message}</h1> 
    </c:if> 
    <c:if test="${not empty update}"> 
     <h1>Update: ${message}</h1> 
    </c:if> 
    <c:if test="${not empty delete}"> 
     <h1>Delete: ${message}</h1> 
    </c:if> 

</body> 
    </html> 

내가 PDF로 HTML을 구문 분석을 위해 사용하고있는 서블릿 코드 : 다음은 JSP 파일입니다

protected void processRequest(HttpServletRequest request, HttpServletResponse response) { 
    response.setContentType("application/pdf"); 
    String inputFile = "D:\\03072014\\src\\main\\webapp\\includes\\testDatabase.jsp"; 
    String url=""; 
    try { 
     url = new File(inputFile).toURI().toURL().toString(); 
    } catch (MalformedURLException ex) { 
     Logger.getLogger(HtmlToPdfTaxCardConvertor.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    OutputStream os=null; 
    try { 
     os = response.getOutputStream(); 
    } catch (IOException ex) { 
     Logger.getLogger(HtmlToPdfTaxCardConvertor.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    ITextRenderer renderer = new ITextRenderer(); 
    renderer.setDocument(url); 
    renderer.layout(); 
    try { 
     renderer.createPDF(os); 
     os.close(); 
    } catch (DocumentException ex) { 
     Logger.getLogger(HtmlToPdfTaxCardConvertor.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    catch (IOException ex) { 
     Logger.getLogger(HtmlToPdfTaxCardConvertor.class.getName()).log(Level.SEVERE, null, ex); 
    }  

} }

나는 예외 얻었다는

javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: The markup in the document preceding the root element must be well-formed. 

누군가 저를 도울 수 있고이 종류의 html 페이지에서 pdf를 창조하는 것이 가능합니다

답변

1

FS는 XHTML이며, 이는 HTML 파일의 입력이 매우 까다 롭다는 것을 의미합니다.

Heres는 2 가지 시도 :

  1. 페이지의 당신의 <!DOCTYPE html>에서 맨 위에 넣습니다.
  2. /을 메타 태그에 추가하십시오.
  3. ${message} 대신 <c:out value="${message}" />을 사용하면 HTML에 잘못된 문자가 삽입되어 파서가 손상되지 않도록 할 수 있습니다. 즉를 heres 내 FS의 JSP 페이지에 사용하는 표준 템플릿을 실패하면

는 문서 타입 선언은 선택 사항이며 표준 <!DOCTYPE html> 사용할 수 있지만 사용자 정의 선언이 크게 속도를 증가 시킨다는 것을 찾을 수 있습니다. 그러나 이스케이프 문자를 십진수로 인코딩해야한다는 의미입니다.

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<!DOCTYPE doctypeName [ 
    <!ENTITY nbsp "&#160;"> 
    <!ENTITY amp "&#38;"> 
]> 
<%-- other jsp stuff here --%> 
<%@include file="/WEB-INF/jsp/taglib.inc"%> 
<html> 
.... 
</html> 


또한 언급해야 당신은 당신이 정리하여 HTML에 청소기 JSoup 또는 다른 HTML을 사용하여 FS 좋은 자사가 100 % 확신 할 수있는 모든이 쓰레기 귀찮게 싶지 않는 경우. 그 통합에 도움이되는 danfickle github에 의해 구축되고있는 좋은 fork of the FS project going on가 있습니다. 그는 CSS3 지원을 훨씬 더 많이 추가했습니다.