2012-12-05 23 views
3

这是我以表格格式显示的数据。我想在不使用struts2的显示标签库的情况下以PDF格式显示它。如何将jsp上显示的表格导出为java中的pdf strust2

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

请帮我一些代码我已经使用了几天,但没有得到任何东西。

回答

1

在JSP中使用显示表将是相当easire将其转换为*名为.csv,.excel和儿子,这里是示例代码的PDF格式;

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

非常感谢帮助 –

1

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

您可以在Action页面的String变量中模拟JSP页面上的表格,比如说CreatePDFAction;

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

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

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

+0

,但我们如何模仿jsp中的表来字符串。并感谢解决方案将谷歌了解更多关于它 –

+0

几乎每次我使用这个,HTML是由用户输入一个所见即所得的编辑器(如CKEditor或TinyMCE),然后用javascript读取。就你而言,你可以使用Java函数重新创建你在JSP中编写的表,因为你知道表的样子。或者您可以从Java生成一次表格,并将其用于PDF和JSP,而不是在JSP中对其进行硬编码;你甚至可以阅读与JavaScript的表,并重新创建它作为一个字符串参数发送到行动,但这将是矫枉过正...等找到你的方式根据您的需要:) –

+0

非常感谢我检索表结构使用jquery和使用的itext html解析器和繁荣我生成的pdf感谢很多好友 –

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(); 
         } 
       }  
相关问题