目前我正在使用以下代码打印整个页面的打印图标:
<a href="javascript:window.print()">
<img src="images/printIcon.gif" alt="Print the Records" width="40" height="40" border="0" />
</a>
我正在阅读JSP中的对象列表,并使用<c:foreach>
显示对象详细信息。
我想在每个对象的详细信息旁边显示一个打印图标,并在单击它时打印(到外部打印机)单个对象的详细信息。整个页面都是单一的。
我不确定是否可以这样做。我可以使用某种ID来控制每个循环吗?
编辑:
示例:
<c:forEach var="case" items="${distributions}">
<table>
<tr>
Print case details
</tr>
</table>
</c:foreach>
如果我有10个发行版,我会得到10个表,所以想要在每个表旁边打印一个图标,当点击它时,只打印该表。
答案 0 :(得分: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重置类。我现在没有更好的主意......
答案 1 :(得分:0)
在您的块中,您可以将数据放入td,然后使用this post中描述的方法打印该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>
这个解决方案唯一的问题是上帝,每个人都禁用了弹出窗口,因此您必须在页面上发布通知,让用户知道
答案 2 :(得分:0)
与建议的不同之处在于重新加载仅显示所选对象的页面,然后调用打印机对话框(例如,在文档加载时)。因此,对象旁边的打印机图标可以链接到同一页面,并传递一个您要打印的参数和要打印的对象的ID。