0

目前我正在使用以下代码打印带有打印图标的整个页面:

<a href="javascript:window.print()">
<img src="images/printIcon.gif" alt="Print the Records" width="40" height="40" border="0" /> 
</a>

我正在阅读 JSP 中的对象列表并使用<c:foreach>. 我想在每个对象的详细信息旁边显示一个打印图标,并在单击它时仅打印(到外部打印机)该单个对象的详细信息。整个页面在单个 div 中。

我不确定这是否可以完成。我可以使用某种 ID 控制每个循环吗?

编辑:

例子:

  <c:forEach var="case" items="${distributions}">
     <table>
        <tr> 
            Print case details
        </tr>
     </table>
  </c:foreach>

如果我有 10 个分布,我会得到 10 个表,所以在每个表旁边都需要一个打印图标,当点击它时,只打印那个单独的表。

4

3 回答 3

2

我没有做以下事情,但理论上它应该可以工作:

1)定义一个打印样式表,其中:

body.detail-print .detail-item{display:none}
body.detail-print .detail-item.current{display:block}

2) 定义一个事件监听器,例如使用 jQuery

$(".detail-item .print").click(function(e) {
    $("body").addClass("detail-print");
    $(this).closest(".detail-print").addClass("current");
    window.print();
});

这应该只打印打印样式表中可见的内容。

我在这里看到的唯一问题:如果有人想在之后打印整个页面,浏览器将只打印最后选择的项目。您可以使用 setTimeout 重置类。我暂时没有更好的主意...

于 2013-03-07T22:18:37.650 回答
0

在您的块中,您可以将数据放在 td 中,然后使用本文中描述的方法打印该 td 的内容。

<script type="text/javascript">
$(function(){
 $(".printable").each(function(){
   var $td = $(this);
   var $printIconTD = $('<td><img src="images/printIcon.gif" alt="Print the Records" width="40" height="40" border="0" /></td>');
   $td.parent().append($printIconTD);
   $printIconTD.click(function(){
        Popup($td.html());
   });

});
});
</script>

....

 <c:forEach var="case" items="${distributions}">
 <table>
    <tr> 
        <td class="printable">Print case details</td>
    </tr>
 </table>

此解决方案的唯一问题是上帝,每个人都禁用了弹出窗口,因此您必须在页面上放置各种通知,让用户知道

于 2013-03-07T22:22:51.157 回答
0

A different way to what has been suggested would be to reload the page showing only the selected object and then call the printer dialog (e.g. on document load). So the printer icons next to the objects could link to the same page and pass it a parameter that you'll be printing and the ID of the object that you want to print.

于 2013-03-07T22:25:07.623 回答