Java 使用飞碟将jsp转换为PDF

Java 使用飞碟将jsp转换为PDF,java,jsp,pdf,itext,flying-saucer,Java,Jsp,Pdf,Itext,Flying Saucer,我有一个jsp文件,我喜欢用飞碟把它转换成PDF。以下是jsp文件: <%@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

我有一个jsp文件,我喜欢用飞碟把它转换成PDF。以下是jsp文件:

<%@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>
} }

我有个例外

javax.xml.transform.TransformerException: org.xml.sax.SAXParseException: The markup in    the document preceding the root element must be well-formed.
有人能帮我吗?有没有可能从这种html页面创建pdf呢?这意味着它对html文件的输入非常挑剔

这里有两件事可以尝试:

  • 将您的
    放在页面的最上方
  • 在元标记上加一个结束符
    /
  • 使用
    而不是
    ${message}
    来确保HTML中没有放置非法字符导致解析器中断
  • 如果失败,这里有一个用于FS jsp页面的标准模板,文档类型声明是可选的,您可以使用标准的
    ,但我发现自定义声明大大提高了速度。但是,这并不意味着您必须使用十进制编码转义字符

    <?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>
    
    
    ]> 
    ....
    

    还应该提到的是,如果你不想为这些垃圾而烦恼,你可以使用JSoup或其他HTML清理程序来清理你的HTML,并确保它100%对FS有好处。github上正在构建一个很好的工具来帮助实现这种集成。他还增加了更多的CSS3支持

    <?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>