我已经使用iText将表格内容导出为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>
<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>
Servlet:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfWriter;
/**
* 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");
try {
// Get the text that will be added to the PDF
String text = request.getParameter("datatoexport");
if (text == null || text.trim().length() == 0) {
text = "You didn't enter any text.";
}
// step 1
Document document = new Document();
// step 2
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter.getInstance(document, baos);
// step 3
document.open();
// step 4
document.add(new Paragraph(text));
// step 5
document.close();
// setting some response headers
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "public");
// setting the content type
response.setContentType("application/pdf");
// the contentlength
response.setContentLength(baos.size());
// write ByteArrayOutputStream to the ServletOutputStream
OutputStream os = response.getOutputStream();
baos.writeTo(os);
os.flush();
os.close();
}
catch(DocumentException e) {
throw new IOException(e.getMessage());
}
}
}
用过itextpdf-5.1.0.jar这是我的JSP页面。
从jsp获取字符串时,
String text = request.getParameter("datatoexport");
我得到的内容与表td tr…相同,而不是实际值。
有什么帮助吗?
请看一下示例ParseHtmlTable1和ParseHtmlTable2。
他们创建以下PDF:html_table_1.pdf
和html_table_2.pdf 。
该表是这样创建的:
StringBuilder sb = new StringBuilder();
sb.append("<table border=\"2\">");
sb.append("<tr>");
sb.append("<th>Sr. No.</th>");
sb.append("<th>Text Data</th>");
sb.append("<th>Number Data</th>");
sb.append("</tr>");
for (int i = 0; i < 10; ) {
i++;
sb.append("<tr>");
sb.append("<td>");
sb.append(i);
sb.append("</td>");
sb.append("<td>This is text data ");
sb.append(i);
sb.append("</td>");
sb.append("<td>");
sb.append(i);
sb.append("</td>");
sb.append("</tr>");
}
sb.append("</table>");
我自由地定义了CSS,如下所示:
tr { text-align: center; }
th { background-color: lightgreen; padding: 3px; }
td {background-color: lightblue; padding: 3px; }
在另一个答案中,已经提到您的设计存在缺陷。您
应该学习如何创建一个体面的体系结构。分隔数据(例如
表格)和样式(例如颜色)是您可以改进的一个示例。
现在,我们像这样解析CSS和HTML:
CSSResolver cssResolver = new StyleAttrCSSResolver();
CssFile cssFile = XMLWorkerHelper.getCSS(new ByteArrayInputStream(CSS.getBytes()));
cssResolver.addCss(cssFile);
// HTML
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
// Pipelines
ElementList elements = new ElementList();
ElementHandlerPipeline pdf = new ElementHandlerPipeline(elements, null);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
// XML Worker
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
p.parse(new ByteArrayInputStream(sb.toString().getBytes()));
现在elements列表包含一个元素:您的表:
return (PdfPTable)elements.get(0);
您可以将此表添加到PDF文档中
问题内容: 我当地的机场可耻地阻止了没有IE的用户,并且看起来很糟糕。我想编写一个Python脚本,该脚本每隔几分钟就会获取“到达和离开”页面的内容,并以更具可读性的方式显示它们。 我选择的工具是使网站相信我使用IE的机械化工具,以及BeautifulSoup来解析页面以获得航班数据表的工具。 老实说,我迷失在BeautifulSoup文档中,无法理解如何从整个文档中获取表(我知道它的标题),以及
问题内容: 我正在使用Selenium进行网络爬网,我想在Selenium模拟点击假链接后获得由JavaScript编写的元素(例如链接)。 我尝试了get_html_source(),但其中不包含JavaScript编写的内容。 我写的代码: 我使用while循环单击一系列伪造的链接,这些伪造的链接触发js操作以显示额外的内容,而该内容正是我想要的。但是sel.get_html_source()
问题内容: 这个问题已经在这里有了答案 : 使用Python在Selenium WebDriver中获取WebElement的HTML源代码 (15个答案) 6年前关闭。 我正在使用Selenium进行网络爬网,我想在Selenium模拟点击假链接后获得由JavaScript编写的元素(例如链接)。 我尝试了get_html_source(),但其中不包含JavaScript编写的内容。 我写的代
问题内容: 我正在查看的页面包含: 我想获取div中的所有文本,除了中的文本。(我想获得“文本1”,“文本3”和“文本4”)。可能有几个元素,或者根本没有。而且可能有一些元素,甚至一个元素都在另一个元素之中,或者根本没有。 我想通过获取div的所有html源并使用正则表达式删除元素来做到这一点。但是selenium.get_text不会返回html,而只是返回文本(全部!)。 我知道我可以使用正则
问题内容: 假设我有一个名为abhishek.txt的文件,其中包含以下行 我是,你叫什么名字。 现在我要写 阿比舍克 在“我是”之后,就像我是Abhishek,..如何直接在此特定位置书写内容。 问题答案: 您不能将数据插入文件中。您可以使用覆盖特定位置的数据。但是,插入操作需要更改其后的所有数据。对于您的情况,请尝试以下类似方法: