【发布时间】:2014-08-22 05:35:11
【问题描述】:
到目前为止,我尝试将表格内容导出到 Excel。它工作正常。但是,我需要将相同的内容导出为 pdf。所以我在内容类型中尝试了response.setHeader("Content-Type", "application/pdf");。但是,它不起作用。我的 pdf 文件已损坏,无法打开。
有人可以帮我解决这个问题吗? 这是我的代码。
JSP:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Export to Excel - Demo</title>
<!-- Jquery script -->
<script src="scripts.js"></script>
<script language="javascript">
function exportToExcel()
{
$("#datatoexport").val($("#customers").html());
$('#myForm').submit();
}
</script>
</head>
<body>
<form id="myForm" action="Sample" method="post">
<div id="customers">
<table id="exportTableSelector" align="left" border="2">
<thead>
<tr bgcolor="lightgreen">
<th>Sr. No.</th>
<th>Text Data</th>
<th>Number Data</th>
</tr>
</thead>
<tbody>
<%
for (int i = 0; i < 10; i++) {
%>
<tr bgcolor="lightblue">
<td align="center"><%=i + 1%></td>
<td align="center">This is text data <%=i%></td>
<td align="center"><%=i * i%></td>
</tr>
<%
}
%>
</tbody>
</table>
</div>
<br><br>
<p>
some text
</p>
<textarea name="datatoexport" id="datatoexport"></textarea>
<a href="" onclick="exportToExcel();" target="_blank">Export to Excel</a>
</form>
</body>
</html>
小服务程序:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Sample
*/
public class Sample extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Sample() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Inside doGet");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("Inside doPost");
actionExportToExcel(request, response);
}
public void actionExportToExcel(HttpServletRequest request, HttpServletResponse response) throws IOException
{
String datatoexport = request.getParameter("datatoexport");
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-Disposition", "attachment; filename=PayHistory.pdf");
response.setHeader("Cache-Control", "cache, must-revalidate");
response.setHeader("Pragma", "public");
response.getWriter().write(datatoexport);
response.getWriter().flush();
response.getWriter().close();
}
}
【问题讨论】:
-
您是否希望通过告诉客户数据现在是 pdf 来将您所做的任何计算的输出更改为 pdf?您必须以某种方式在服务器端创建 pdf。
-
和excel一样,如果我们将内容类型改为response.setHeader("Content-Type", "application/vnd.ms-excel");它将在excel中写入表格内容。同样,如何在pdf中做到这一点?
-
我要求没有任何 jar 或外部库。我从这段代码本身问一个解决方案@SidM
-
除非您想手动编写 PDF 格式化程序,否则无法做到这一点。如果有的话,人们通常不会为此使用 PDF 格式化程序。
-
PMF 是对的,您需要在服务器上使用一些东西(库)来创建 PDF,然后才能通过 servlet 发回。如果您的 HTML 很简单,您可以简单地将其转换为 PDF,但如果您想要更好的东西,最好找到一个库而不是创建您需要的 PDF 类型。
标签: java html jsp servlets export-to-pdf