如何在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的几种方式

在java中将Arraylist值从servlet传递到JSP?

struts2 jsp如何获取action值

Java数组,如何通过JSP表单将数组传递到后台?

如何在 VueJs 中将我的搜索显示到我的表中?