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

如何在JavaStrust2中将jsp上显示的表导出为pdf,java,javascript,struts2,pdf-generation,itext,Java,Javascript,Struts2,Pdf Generation,Itext,这是我以表格格式显示的数据。我想在不使用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>

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

假身份证
从日期开始
迄今为止
要求的天数
批准人
笔记
评论
计划
理由
270
12/27/12
12/29/12
2.
萨加尔
s
s
真的
s
可以使用javascript或jquery吗


请帮我翻译一些代码,我在谷歌上搜索了几天,但什么也没有得到。

我对struts不太清楚,我在JSP中使用了
itextpdf


希望它能有所帮助

据我所知,不幸的是javascript无法自行创建pdf文件。我还没有使用struts。但我建议您使用易于使用的Displaytag库:)

这是您特别需要的(与代码一起使用)


文档(从头到尾):

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

您可以在一个操作的字符串变量中模拟JSP页面上的表,比如说
createpdaction

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

在Struts.xml中,使用适当的
contentType
application/pdf
)和指定文件名所需的
contentDisposition
,将
createpdaction
结果声明为,并执行以下行为:下载文件名(
attachment
)或在浏览器中打开文件名(
inline

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

最后我得到了解决方案,这就是代码
        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();
                        }
                }     
函数可检索() { var table=document.getElementById(“historyTable”); 如果(表){ //如果outerHTML属性可用,请使用它 if(typeof table.outerHTML=='string'){ $('#setable').val(table.outerHTML) //否则,你就把它弄掉 }否则{ var div=document.createElement('div'); div.appendChild(table.cloneNode(true)); $('#setable').val(div.innerHTML); } } } 在动作课上 公共字符串ExportPDF() { tablestruct=“”+tablestruct+”; //System.out.println(“在concat之后”+tablestruct); 试一试{ 字符串filePath=ServletActionContext.getServletContext().getRealPath(“/testpdf.pdf”); System.out.println(文件路径); 文档=新文档(页面大小.字母); PdfWriter PdfWriter=PdfWriter.getInstance(文档,新文件输出流(文件路径)); document.open(); HTMLWorker HTMLWorker=新HTMLWorker(文档); parse(新的StringReader(tablestruct)); document.close(); 系统输出打印项次(“完成”); 文件文件=新文件(文件路径); inputStream=新数据inputStream(新文件inputStream(文件)); } 捕获(例外e){ //TODO自动生成的捕捉块 e、 printStackTrace(); } }
在jsp上使用显示表将其与.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> 


Andrew感谢您的回复,将pdf保存在本地驱动器上。事实上,我希望生成的pdf应该自动下载,或者应该显示在浏览器上,但是我们如何在jsp中将表模拟为字符串呢。感谢这个解决方案,我将在上面用谷歌来了解更多关于它的信息。几乎每次我使用它时,HTML都是由用户在所见即所得编辑器(如CKEditor或TinyMCE)中输入的,然后用javascript阅读。在您的例子中,您可以使用Java函数重新创建在JSP中编写的表,因为您知道该表的外观。或者您可以从Java生成一次表,并将其用于PDF和JSP,而不是在JSP中对其进行硬编码;您甚至可以使用javascript读取该表,并将其作为字符串参数重新创建以发送到操作,但这样做太过分了。。。等等,根据你的需要找到你的方法:)非常感谢,我使用jquery和使用的itext html解析器检索了表结构,并生成了pdf,非常感谢buddy@AndreaLigios尼斯解决方案Buddy在网上搜索了很多,试图在屏幕上打印一个特定的表格,然后生成pdf,但u r解决方案简单有效,效果很好指导像我们这样的初学者