如何在java struts2中将jsp上显示的表导出为pdf

问题描述 投票:3回答:5

这是我以表格格式显示的数据。我想在不使用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可以吗?

请帮我一些代码我用谷歌搜索了几天但什么都没得到。

java javascript struts2 pdf-generation itext
5个回答
1
投票

使用jsp上的显示表将更容易将其转换为* pdf以及.csv,.excel和son on,这是示例代码;

<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> 

1
投票

据我所知,不幸的是javascript无法自己创建pdf文件。我还没有使用struts。但我建议你使用Displaytag库这是非常容易使用的:)

这是您特别需要的(使用代码):http://displaytag.sourceforge.net/10/export.html

文档(从头到尾):http://displaytag.sourceforge.net/10/displaytag.pdf


1
投票

要从Java中的PDF源生成HTML,您可以使用iText's HTMLWorker模块(现已弃用,新项目是XMLWorker,但这取决于您正在使用的iText版本)。

您可以在Action的String变量中模拟JSP页面上的表,假设CreatePDFAction;

然后,从JSP中,使用提交按钮调用CreatePDFAction(如果需要,可以在新页面上打开pdf)。

在Struts.xml中,将CreatePDFAction结果声明为stream result type,使用适当的contentTypeapplication/pdf),并使用所需的contentDisposition来指定文件名和行为:下载它(attachment)或在浏览器中打开它(inline)。

CreatePDFAction操作中,您将收到String,实例化一个新文档和一个新的HTMLWorker,使用包含HTML的字符串提供它,然后从生成的PDF中提取字节并将其放入通过操作通过getter公开的InputStream中。


1
投票
        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();
                        }
                }     

0
投票

我不确定struts,我在JSP中使用了itextpdfhttp://tutorials.jenkov.com/java-itext/getting-started.html

希望它会有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.