如何在java struts2中将jsp上显示的表格导出为pdf
Posted
技术标签:
【中文标题】如何在java struts2中将jsp上显示的表格导出为pdf【英文标题】:How to export table displayed on jsp to pdf in java strust2 【发布时间】:2012-11-22 22:54:57 【问题描述】:这是我以表格格式显示的数据。我想在不使用 struts2 的显示标签库的情况下以 PDF 格式显示。
<table border="1" align="center" style="border-color: #CCCCCC; border-width: 1px; border-style: None; width: 1320px; border-collapse: collapse;" id="tablepaging">
<tbody>
<tr>
<td>Leave ID</td>
<td>FROM DATE</td>
<td>TO DATE</td>
<td>DAYS REQUESTED</td>
<td>APPROVER</td>
<td>NOTES</td>
<td>REMARK</td>
<td>IS PLANNED</td>
<td>REASON</td>
</tr>
<tr>
<td>270</td>
<td>12/27/12</td>
<td>12/29/12</td>
<td>2</td>
<td>Sagar</td>
<td>s</td>
<td>s</td>
<td>true</td>
<td>s</td>
<td>
<a href="/HRIS_Updated/cancelRequest.action;jsessionid=A2313340A50DD2DAB054714BF65AB08B?leaveId=270" id="submitinvoice;jsessionid=A2313340A50DD2DAB054714BF65AB08B_">Cancel</a>
</td>
<td>
<a href="/HRIS_Updated/requestHistory.action;jsessionid=A2313340A50DD2DAB054714BF65AB08B?leaveId=270" id="submitinvoice;jsessionid=A2313340A50DD2DAB054714BF65AB08B_">History</a>
</td>
</tr>
</tbody>
</table>
是否可以使用 javascript 或 jquery?
请帮我提供一些代码,我已经在 Google 上搜索了几天但一无所获。
【问题讨论】:
【参考方案1】:在 jsp 上使用显示表将其转换为 *pdf 以及 .csv、.excel 和儿子非常容易,这是示例代码;
<display:table id="data" name="$questions" requestURI="" pagesize="10" export="true" >
<display:column property="label" title="Question" sortable="true"/>
<display:column title="Graph Analysis"> <img src="$imagePath$reportData.clientName/$data.label.png"/></display:column>
<display:setProperty name="export.pdf" value="true" />
</display:table>
【讨论】:
【参考方案2】:据我所知,不幸的是,javascript 无法自行创建 pdf 文件。而且我还没有使用struts。但我推荐你使用非常容易使用的 Displaytag 库:)
这是您特别需要的(使用代码):http://displaytag.sourceforge.net/10/export.html
文档(从头到尾):http://displaytag.sourceforge.net/10/displaytag.pdf
【讨论】:
【参考方案3】:要在 Java 中从 HTML
源生成 PDF
,您可以使用 iText's HTMLWorker
模块(现已弃用,新项目是 XMLWorker,但这取决于您使用的 iText 版本)。
您可以在操作的字符串变量中模拟 JSP 页面上的表格,比如CreatePDFAction
;
然后,从 JSP 中,使用提交按钮调用 CreatePDFAction
(如果需要,可以在新页面上打开 pdf)。
在 Struts.xml 中,将 CreatePDFAction
结果声明为 stream
result type,并使用适当的 contentType
(application/pdf
) 和所需的 contentDisposition
指定文件名和行为:下载它 (@987654333 @) 或在浏览器中打开 (inline
)。
在CreatePDFAction
操作中,您接收字符串,实例化一个新文档和一个新 HTMLWorker,将包含您的 HTML 的字符串提供给它,然后从生成的 PDF 中提取字节并将其放入通过行动的吸气剂。
【讨论】:
但是我们如何将 jsp 中的表格模拟为字符串。并感谢您提供的解决方案,将通过 Google 搜索以了解更多信息 几乎每次我使用它时,用户都会在 WYSIWYG 编辑器(如 CKEditor 或 TinyMCE)中输入 HTML,然后使用 javascript 读取。在您的情况下,您可以使用 Java 函数重新创建您在 JSP 中编写的表,因为您知道该表的外观。或者您可以从 Java 生成一次表格,并将其用于 PDF 和 JSP,而不是在 JSP 中硬编码;您甚至可以使用 javascript 读取表格并将其重新创建为字符串参数以发送到操作,但这将是矫枉过正......等等根据您的需要找到您的方式:) 非常感谢我使用 jquery 检索表结构和使用的 itext html 解析器和繁荣我生成了 pdf 非常感谢好友 @Andrea Ligios 不错的解决方案 Buddy 在网上搜索了很多,试图打印特定表格然后生成 pdf,但您的解决方案简单有效,继续指导像我们这样的初学者【参考方案4】: Finaly i got the solution here is the code
<script language="javascript" type="text/javascript">
function Retrivetable()
var table = document.getElementById("historyTable");
if (table)
// If outerHTML property available, use it
if (typeof table.outerHTML == 'string')
$('#settable').val(table.outerHTML)
// Otherwise, emualte it
else
var div = document.createElement('div');
div.appendChild(table.cloneNode(true));
$('#settable').val(div.innerHTML);
</script>
<s:submit
onclick="Retrivetable()"
value="Export to Pdf" action="ExportToPdf" method="ExportPDF" align="bottom"/>
In the action class
public String ExportPDF()
tablestruct = "<html><head></head><body>"+tablestruct+"</body></html>";
//System.out.println("After concat "+tablestruct);
try
String filePath = ServletActionContext.getServletContext().getRealPath("/testpdf.pdf");
System.out.println(filePath);
Document document=new Document(PageSize.LETTER);
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(filePath));
document.open();
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.parse(new StringReader(tablestruct));
document.close();
System.out.println("Done");
File file = new File(filePath);
inputStream = new DataInputStream( new FileInputStream(file));
catch (Exception e)
// TODO Auto-generated catch block
e.printStackTrace();
【讨论】:
【参考方案5】:我不确定struts,我在JSP 中使用了itextpdf
。
http://tutorials.jenkov.com/java-itext/getting-started.html
希望对你有帮助
【讨论】:
安德鲁感谢您将 pdf 保存在本地驱动器上的回复。实际上我希望生成的 pdf 应该自动下载或者应该显示在浏览器上以上是关于如何在java struts2中将jsp上显示的表格导出为pdf的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Struts 2 中将数据库记录列表(通过 Hibernate 检索)显示到 JSP 页面?
刚開始学习的人非常有用:struts2中将jsp数据传到action的几种方式