【问题标题】:Exporting html contents to pdf is not working将 html 内容导出为 pdf 不起作用
【发布时间】: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


【解决方案1】:

内容类型标头只是对客户端/浏览器的提示。浏览器不做任何格式之间的转换。

它可能适用于 HTML XLS,因为 Microsoft XL 也设法解释 HTML 表格。事实上,如果您只是将 .html 文件重命名为 .xls 文件并“打开方式...”Microsoft XL,它将以电子表格的形式打开。

换句话说,恰好使用 .xls 扩展名保存 HTML 数据最终会导致数据在 Microsoft XL 中打开。但是,浏览器不会发生自动转换。 MS XL 正在帮忙。

对于 PDF,您必须在服务器端生成 PDF 并将字节发送给客户端。唯一的其他选项是在浏览器中触发打印对话框,在这种情况下,Chrome 允许用户将 HTML 页面保存为 PDF。对于其他浏览器,如果用户有 PDF 虚拟打印机(免费软件),他将能够将页面保存为 PDF。

【讨论】:

    猜你喜欢
    • 2015-01-27
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2014-08-22
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多