gpt4 book ai didi

java - 使用 Flying Saucer 将jsp转换为PDF

转载 作者:行者123 更新时间:2023-12-01 12:43:15 25 4
gpt4 key购买 nike

我有一个 jsp 文件,我喜欢使用 Flying Saucer 将其转换为 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>

这是我用来将 html 解析为 pdf 的 servlet 代码:

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);
}

}}

我有异常(exception)

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

有人可以帮助我吗?是否可以从这种 html 页面创建 pdf

最佳答案

FS需要XHTML ,这意味着它对 HTML 文件的输入非常挑剔。

这里有两件事值得尝试:

  1. 输入您的<!DOCTYPE html>在页面的最顶部。
  2. 结束 /在您的元标记上。
  3. 使用<c:out value="${message}" />而不是${message}确保您的 HTML 中没有放置非法字符,从而导致解析器崩溃。

如果失败,这里是我用于 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>

<小时/>还应该提到的是,如果您不想理会所有这些垃圾,您可以使用 JSoup 或其他 HTML 清理器来清理您的 HTML 并确保其 100% 对 FS 有好处。有个好的 fork of the FS project going on正在由 danfickle build 在 github 上有助于集成。他还添加了更多 CSS3 支持。

关于java - 使用 Flying Saucer 将jsp转换为PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24893490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com